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

Changes between Version 1 and Version 2 of pne-spec


Ignore:
Timestamp:
Oct 12, 2007, 2:39:40 AM (14 years ago)
Author:
tejimaa
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • pne-spec

    v1 v2  
    33OpenPNEの正式な仕様書が出来るまでの仕様メモです。
    44
     5[[TOC]]
     6= 検討中案件 =
     7 * OpenPNE2.8の次は3.0ではなくOpenPNE2.10とする
     8 * OpenPNE安定版マイナーバージョンアップ中はDB定義とconfig.phpディレクトリ構造を変更しない
     9 * メジャーバージョンアップでは2バージョンアップに1度DB定義変更をする(現在は1バージョンアップ毎)
     10
     11
     12= 設計 =
     13-----
     14== OpenPNEのセキュリティ対策 ==
     15
     16 '''*XSS(Cross Site Scripting)'''::
     17    DB、リクエストから取得した値を表示する際にはHTML生成前に
     18    デフォルトで全てサニタイズされるようにしており、
     19    管理画面から管理者が入力した項目など信頼できる一部の値のみを
     20    そのまま表示するようにしている
     21
     22 '''*SQL Injection'''::
     23    変数が含まれるSQL文はプレースホルダを使用し
     24    エスケープ処理を行っている
     25
     26 '''*CSRF(Cross Site Request Forgeries)'''::
     27    データ登録・編集などdoアクションのすべてのリクエストに
     28    セッションIDに基づいたハッシュ値(セッションIDそのものではない)
     29    を含めて、これが一致しない場合にはアクションを行わない
     30
     31 '''*Null Byte Attack'''::
     32    リクエストバリデーションの際に、事前のフィルタリングで
     33    全変数デフォルトでヌルバイトを削除している
     34
     35 '''*Directory Traversal'''::
     36    ローカルファイルをオープンする場合には
     37    /などを含む文字列は弾いている
     38
     39 '''*HTTP Response Splitting'''::
     40    リダイレクトのためのLocationヘッダなど、
     41    スクリプト側で動的にHTTP Response Headerを生成する場合には
     42    不要なCRおよびLFを除去している
     43
     44 '''*Session Hijacking'''::
     45    携帯版を除きセッションIDの取得はCookieからのみに制限している
     46    また、セッションの有効期限をpc/ktai/adminそれぞれに設定できる[[BR]]
     47    携帯版については、GET(/POST)でセッションIDを引き回すため
     48    URLにセッションIDが含まれてしまうが、Refererで外部に漏れないよう
     49    外部サイトへのリンクを一切生成しないようにしている
     50    また、デフォルトでセッションの有効期限を短く設定している
     51
     52 '''*Session Fixation'''::
     53    pc/ktai/admin ともにログイン時に、その時点のセッションIDを無効にして
     54    新しいセッションIDを生成している
     55
     56 '''*File Upload Attack'''::
     57    アップロードファイルは画像のみに限定し、
     58    アップロード時に必ずGDに通し画像として変換できたもののみを
     59    正当な画像として受け入れている
     60
     61 '''*OS Command Injection'''::
     62    外部コマンドを実行する関数は一箇所だけで、
     63    画像変換にImageMagickを使用する設定にしていた場合にのみ
     64    passthru()関数を使用するが、
     65    引数として渡すコマンドは検証済みのもので
     66    リクエストを直接入れるようなことはしていない
     67
     68 '''*Parameter Manipulation'''::
     69    入力バリデータに通し検証済みの値を使用している
     70
     71 '''*Brute force attack'''::
     72    招待状発行時及び新規登録時に画像認証を挟むようにしている
     73
     74[wiki:Architecture 上へ戻る]
     75-----
     76
     77== 設計ルール ==
     78
     79新規・高度なプログラミング手法は極力利用しない
     80
     81オブジェクト指向は、
     82
     83 * PHP4 PHP5間での違いが激しすぎる
     84 * PHP5でのオブジェクト指向が中途半端
     85 * コミッター全員が使いこなせない
     86 * PHP用のエディタでうまく管理出来るものが見つからなかった
     87
     88という理由で極力利用していません。
     89
     90現状のプログラムレベルでは
     91
     92 * 命名規則を徹底すれば何とかなる
     93 * コミッターががんばってたくさんコードを読む
     94 * プログラムの習熟度がある程度低くても、とりあえずコードが書ける
     95 * オブジェクト指向ではある程度の、モデル化が必要だが 変化の激しいSNSのモデル化は、現時点で出来そうもない
     96
     97[wiki:Architecture 上へ戻る]
     98-----
     99== コーディングルール ==
     100
     101 * 長くていいから、変数をしっかり書く
     102 * 全コードをもう一度書き直すモチベーションを維持する
     103 * スタイルについては 確かPEAR準拠にする
     104
     105[wiki:Architecture 上へ戻る]
     106-----
     107
     108== コア設計 ==
     109
     110== カスタマイズアドバイス ==
     111
     112== MasterPNE ==
     113== SlavePNE ==
     114
     115== ポイント実装 ==
     116
     117[wiki:Architecture 上へ戻る]
     118-----
     119== 小窓 ==
     120=== 使用可能Cmdタグ一覧(Ver2.4.2) ===
     121
     122以下のサイトのURLは自動的にコンテンツへと変換されます
     123 * flipclip.net
     124 * grouper.com
     125 * kakaku.com
     126 * video.google.com
     127 * watchme.tv
     128 * ebitv.jp
     129 * youtube.com
     130
     131リンク [wiki:CMDHowTo]
     132
     133[wiki:Architecture 上へ戻る]
     134-----
     135
     136== OpenPNEAPI ==
     137
     138=== OpenPNEに用意するAPI ===
     139
     140(OpenPNE内部の情報を外部に提供する)
     141
     142=== OpenPNEAPIの方針 ===
     143
     144OpenPNEでは、APIを新規に作成する事よりも、なるべく既存のAPIの仕様を利用する方針をとります。
     145
     146 * 理解しやすい
     147 * 十分にテストされている
     148 * すでにライブラリを作ってくれている
     149
     150 '''XMLRPC'''::
     151  * [wiki:OpenPNEAPI OpenPNEAPI仕様案]
     152
     153 '''RSS'''::
     154  * OpenPNEの更新情報を認証付きRSS情報として配信
     155[[BR]]
     156仕様案[[BR]]
     157
     158ユーザーごとにカスタマイズされたRSSを取得する方法は
     159
     160  * !http://sns.example.com/?m=api&a=rss&t=friend_diary
     161  * HTTPS通信
     162  * メソッド GET
     163  * ベーシック認証でメルアド、パスワードを渡す
     164
     165結果はRSS形式
     166
     167=== OpenPNEが取りに行くためのAPI ===
     168 '''RSS'''::
     169  * 外部BLOG情報はRSSを通じて取得している
     170
     171 '''AmazonWebService'''::
     172  * 現在OpenPNEのレビューはAWSを通じて取得している
     173    * AWSプロトコルに合わせてくれれば、どんなレビューでもOpenPNEから取得できる
     174
     175 '''XMLRPC'''::
     176
     177  * OpenPNEブランクボックス(仮)用
     178
     179  * メソッド案
     180    * エントリポイント
     181      * http://sitedomain/xxx/xmlrpc.php(ユーザー設定可能)
     182    * メソッド
     183      * POST
     184    * リクエスト形式
     185      * 呼び出し対象target_id 呼び出し元page_name
     186
     187  * レスポンス書式
     188    * BODY(HTMLタグ)
     189    * サニタイズを行うかどうかは、サイト管理者が決定する。
     190    * デフォルトでは行う設定
     191
     192[wiki:Architecture 上へ戻る]