wiki:DevelopDocument
 ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Version 2 (modified by koizumi, 13 years ago) (diff)

--

検討中案件

  • OpenPNE2.8の次は3.0ではなくOpenPNE2.10とする
  • OpenPNE安定版マイナーバージョンアップ中はDB定義とconfig.phpディレクトリ構造を変更しない
  • メジャーバージョンアップでは2バージョンアップに1度DB定義変更をする(現在は1バージョンアップ毎)

設計


OpenPNEのセキュリティ対策

*XSS(Cross Site Scripting)
DB、リクエストから取得した値を表示する際にはHTML生成前に デフォルトで全てサニタイズされるようにしており、 管理画面から管理者が入力した項目など信頼できる一部の値のみを そのまま表示するようにしている
*SQL Injection
変数が含まれるSQL文はプレースホルダを使用し エスケープ処理を行っている
*CSRF(Cross Site Request Forgeries)
データ登録・編集などdoアクションのすべてのリクエストに セッションIDに基づいたハッシュ値(セッションIDそのものではない) を含めて、これが一致しない場合にはアクションを行わない
*Null Byte Attack
リクエストバリデーションの際に、事前のフィルタリングで 全変数デフォルトでヌルバイトを削除している
*Directory Traversal
ローカルファイルをオープンする場合には /などを含む文字列は弾いている
*HTTP Response Splitting
リダイレクトのためのLocationヘッダなど、 スクリプト側で動的にHTTP Response Headerを生成する場合には 不要なCRおよびLFを除去している
*Session Hijacking
携帯版を除きセッションIDの取得はCookieからのみに制限している また、セッションの有効期限をpc/ktai/adminそれぞれに設定できる
携帯版については、GET(/POST)でセッションIDを引き回すため URLにセッションIDが含まれてしまうが、Refererで外部に漏れないよう 外部サイトへのリンクを一切生成しないようにしている また、デフォルトでセッションの有効期限を短く設定している
*Session Fixation
pc/ktai/admin ともにログイン時に、その時点のセッションIDを無効にして 新しいセッションIDを生成している
*File Upload Attack
アップロードファイルは画像のみに限定し、 アップロード時に必ずGDに通し画像として変換できたもののみを 正当な画像として受け入れている
*OS Command Injection
外部コマンドを実行する関数は一箇所だけで、 画像変換にImageMagickを使用する設定にしていた場合にのみ passthru()関数を使用するが、 引数として渡すコマンドは検証済みのもので リクエストを直接入れるようなことはしていない
*Parameter Manipulation
入力バリデータに通し検証済みの値を使用している
*Brute force attack
招待状発行時及び新規登録時に画像認証を挟むようにしている

上へ戻る


設計ルール

新規・高度なプログラミング手法は極力利用しない

オブジェクト指向は、

  • PHP4 PHP5間での違いが激しすぎる
  • PHP5でのオブジェクト指向が中途半端
  • コミッター全員が使いこなせない
  • PHP用のエディタでうまく管理出来るものが見つからなかった

という理由で極力利用していません。

現状のプログラムレベルでは

  • 命名規則を徹底すれば何とかなる
  • コミッターががんばってたくさんコードを読む
  • プログラムの習熟度がある程度低くても、とりあえずコードが書ける
  • オブジェクト指向ではある程度の、モデル化が必要だが 変化の激しいSNSのモデル化は、現時点で出来そうもない

上へ戻る

コーディングルール

  • 長くていいから、変数をしっかり書く
  • 全コードをもう一度書き直すモチベーションを維持する
  • スタイルについては 確かPEAR準拠にする

上へ戻る


コア設計

MasterPNE

SlavePNE

ポイント実装

上へ戻る


OpenPNEAPI

OpenPNEに用意するAPI

(OpenPNE内部の情報を外部に提供する)

OpenPNEAPIの方針

OpenPNEでは、APIを新規に作成する事よりも、なるべく既存のAPIの仕様を利用する方針をとります。

  • 理解しやすい
  • 十分にテストされている
  • すでにライブラリを作ってくれている
XMLRPC
RSS
  • OpenPNEの更新情報を認証付きRSS情報として配信


仕様案

ユーザーごとにカスタマイズされたRSSを取得する方法は

  • http://sns.example.com/?m=api&a=rss&t=friend_diary
  • HTTPS通信
  • メソッド GET
  • ベーシック認証でメルアド、パスワードを渡す

結果はRSS形式

OpenPNEが取りに行くためのAPI

RSS
  • 外部BLOG情報はRSSを通じて取得している
AmazonWebService?
  • 現在OpenPNEのレビューはAWSを通じて取得している
    • AWSプロトコルに合わせてくれれば、どんなレビューでもOpenPNEから取得できる
XMLRPC
  • OpenPNEブランクボックス(仮)用
  • レスポンス書式
    • BODY(HTMLタグ)
    • サニタイズを行うかどうかは、サイト管理者が決定する。
    • デフォルトでは行う設定

上へ戻る