開発者向けセキュリティ チェックリスト
この文書は、開発者向けセキュリティ の補足として提供されています。 これは、一般的な開発タスクと、実行する必要のあるセキュリティ対策のリストです。
セキュリティ チェックリスト
作業の対象 | チェックリスト |
---|---|
ブラウザーのCookie |
# UserID の Cookie 値を取得しようとする。
# 注: 戻り値は信頼できず、int に強制される。
$sId = intval( $wgRequest->getCookie( 'UserID' ) );
|
動的コード生成 |
これらの機能が本当に必要な場合もあります (明らかに インライン ラムダ関数を使用すると、ネイティブ構文で書かれたコードの利点を保持しながら、コールバックをインラインで作成するのが容易になります。
$str = preg_replace( "!" . preg_quote( $externalStr, '!' ) . "!", $replacement, $str );
|
外部プログラム |
// Automatically escape any naughty characters
$result = Shell::command( $cmd, '--version' )
->params( 'some', 'extra', 'parameters' )
->execute();
Note that old |
フォーム |
|
GET データ |
# Check if the action parameter is set to 'purge'
if ( $wgRequest->getVal( 'action' ) == 'purge' ) {
...
|
出力 (API、CSS、JavaScript、HTML、XML など)Any content that MediaWiki generates can be a vector for XSS attacks. |
# rawElement() escapes all attribute values
# (which, in this case, is provided by $myClass)
echo Html::rawElement( 'p', [ 'class' => $myClass ] );
|
利用者提供 CSSUser provided CSS (Say for use in a |
# let $CSSFromUser be the user's CSS.
echo Html::rawElement( 'p', [ 'style' => Sanitizer::checkCss( $CSSFromUser ) ] );
|
POST データ |
# Check if the action parameter is set to 'render'
if ( $wgRequest->getVal( 'action' ) == 'render' ) {
...
|
クエリ文字列 |
|
セッション |
|
レビュアーの不安 |
# $wgRequest isn't yet available. Forced to use $_GET instead.
if ( $_GET['setupTestSuite'] !== null ) {
$setupTestSuiteName = $_GET['setupTestSuite'];
...
|
SQL クエリ |
自動チェック
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.
関連項目