1

私のWebアプリには、データベース接続設定などを含む構成ファイルがあり、常にPHPスクリプトの最初の行にロードされます。おそらく既存の XSS および SQL インジェクションのリスクのために、すべての POST および GET データを消去する関数を含めたいと考えています。

本当にその機能で十分かどうかはわかりません

function make_safe($variable) 
{
   $variable = strip_tags(mysql_real_escape_string(trim($variable)));
   return $variable; 
}

foreach ($_POST as $key => $value) {
   $_POST[$key] = make_safe($value);
}
//Same for $_GET & $_SESSION

この問題に対する推奨事項はありますか?

4

1 に答える 1

4

この機能:

function make_safe($variable) 
{
   $variable = strip_tags(mysql_real_escape_string(trim($variable)));
   return $variable; 
}

動作しないでしょう

SQL インジェクションと XSS は別物です。それぞれ異なるエスケープが必要なため、各エスケープ関数 strip_tags と mysql_real_escape_string を別々に使用する必要があります。それらを結合すると、それぞれのセキュリティが無効になります。

データベースにデータを入力するときは、標準の mysql_real_escape_string() を使用します。それらを画面に出力する前にデータベースからクエリを実行する場合は、strip_tags() を使用します。

2 つの機能を組み合わせることが危険な理由 馬の口から: http://php.net/manual/en/function.strip-tags.php

strip_tags()は実際には HTML を検証しないため、タグが部分的または壊れていると、予想よりも多くのテキスト/データが削除される可能性があります。

そのため、巧妙な攻撃者は不正な形式の html をデータベース フィールドに入力することで、単純な実装を使用mysql_real_escape_string()してコンボを打ち負かすことができます。

于 2013-02-18T15:02:28.600 に答える