Security checklist for developers/ja

この文書は、 の補足として提供されています. これは、一般的な開発タスクと、実行する必要のあるセキュリティ対策のリストです.



セキュリティ チェックリスト
{| class="wikitable" | ! 作業の対象 ! チェックリスト


 * valign="top" |
 * valign="top" |



ブラウザーのCookie

 * valign="top" |
 * の代わりに を使用することでレビュアーの不安を軽減しましたか?
 * を使用して Cookie を取得しましたか?
 * を使用して Cookie を設定しましたか?


 * valign="top" |
 * valign="top" |



動的コード生成
関数、 関数、  関数の   パターン修飾子を使用することは避けてください. これらの機能は強力で便利ですが、本質的に安全ではありません:
 * valign="top" |


 * 正規表現で処理されるテキストに任意の文字列を入れることが簡単で、 パターン修飾子と組み合わせると、コード インジェクション攻撃を引き起こす可能性があります.
 * 文字列の一部であるコードを読み取り、メンテナンスすることが難しくなります.
 * 静的解析ツールは、コードの警告やエラーをキャッチできません.
 * opcode キャッシュ (APC など) は、文字列に混在するコードをキャッシュできません.
 * には、ガベージ コレクションの問題点がある場合があります.
 * ループの中に  関数がある場合、各イテレーションで新しい関数が作成されます.

これらの機能が本当に必要な場合もあります (明らかに  は   を実行する必要がある). しかし、ほとんどの場合、関数を分割してコールバックとして参照したいと思います.

インライン ラムダ関数を使用すると、ネイティブ構文で書かれたコードの利点を保持しながら、コールバックをインラインで作成するのが容易になります.


 * 正規表現の一部として使用される外部のすべてのものは、preg_quote ($externalStr, $delimiter) でエスケープする必要があります. これにより、正規表現構文の一部であるすべての文字の前にバックスラッシュが挿入され、2 番目のパラメーターとして与えられた区切り文字もエスケープされます:


 * valign="top" |
 * valign="top" |



外部プログラム

 * valign="top" |
 * executed the program via from namespace  ?
 * quoted all arguments to external programs using the above's secure parameter passing facilities (which is basically everything except for )?

Note that old /  are not recommended because they make it easier for developers to miss escaping a parameter.
 * valign="top" |
 * valign="top" |

フォーム

 * valign="top" |
 * used  to implement anti-CSRF measures?
 * used when checking the token to avoid timing attacks?
 * reduced reviewer anxiety by using or extending MediaWiki's existing form functionality?


 * valign="top" |
 * valign="top" |



GET データ

 * valign="top" |
 * reduced reviewer anxiety by using  instead of  ?


 * valign="top" |
 * valign="top" |



出力 (API、CSS、JavaScript、HTML、XML など)
Any content that MediaWiki generates can be a vector for XSS attacks.
 * valign="top" |
 * used the  and   helper classes?


 * reduced reviewer anxiety by using ResourceLoader to deliver CSS and JavaScript resources?
 * valign="top" |
 * valign="top" |



利用者提供 CSS
User provided CSS (Say for use in a  attribute) needs to be sanitized to prevent XSS, as well as to disallow insertion of tracking images (via background-image), etc
 * valign="top" |
 * Use the Sanitizer::checkCss method for any css received from a user, possibly along with the Html class.


 * For CSS provided by the extension (and not the user), this is not needed (and will remove some valid things like ). However, extension provided CSS should go in stylesheets loaded by ResourceLoader, and not in   attributes.
 * valign="top" |
 * valign="top" |



POST データ

 * valign="top" |
 * reduced reviewer anxiety by using  instead of
 * Always validate that any POST data received is what you expect it to be


 * valign="top" |
 * valign="top" |



クエリ文字列

 * valign="top" |
 * See #GET data above


 * valign="top" |
 * valign="top" |

セッション

 * valign="top" |


 * valign="top" |
 * valign="top" |



レビュアーの不安

 * valign="top" |
 * Clearly added comments to explain unexpected or odd parts of your code?


 * valign="top" |
 * valign="top" |



SQL クエリ

 * valign="top" |
 * used MediaWiki's database wrappers?


 * }



自動チェック
Some of these issues can be checked with phan-taint-check-plugin, which is required for all MediaWiki code in Wikimedia production. This is of course just a tool, and it cannot detect all issue types, and may miss issues even in the issue types it can check for.



関連項目

 * Security for developers