-1

、SQL インジェクションを防止しようとしていますが、MySQL を使用している場合、機能は十分ですか? どうすれば改善できますか?

お時間をいただきありがとうございます。

    <?php
    function sanitize($data) {
        if (is_array($data)) {
            foreach($data as $var=>$val) {
                $output[$var] = sanitize($val);
            }
         }
         else {
             if (get_magic_quotes_gpc()) {
                 $data = stripslashes($data);
             }
             $data = htmlspecialchars($data);
             $output = mysql_real_escape_string($data);
         }
         return $output;
    }
    ?>
4

1 に答える 1

4

これは、コードで決して使用してはならないものの完全な例です。ルールは非常に単純です。

a)準備されたステートメントを使用します(このソリューションを強くお勧めします)

または (何らかの理由で PDO または mysqli を使用できない場合)

b.1)値として機能するすべての (「信頼できる」ソースから取得したものであっても例外なく) 文字列を編集する必要があります b.2) すべての整数を編集する必要があります b.3) 整数ではないすべてのmysql_real_escape_string数値
を 編集(int)する必要があります
b.4
) 列/テーブル名の代用としてユーザーの入力を使用しないでください。常にホワイトリストを使用してください。

1-2-3と同じくらい簡単

したがって、サニタイズ関数は必要なときにのみ適用します。「ユニバーサル」関数をすべての変数に適用することはありません。

どうすれば改善できますか?

それを改善する唯一の方法は、それを削除することです

更新日:

ホワイトリストとは - ユーザー入力を受け入れて列名として使用するとします。例えば仕分け施設。

array('col1', 'col2')そのため、ユーザーの入力がこの配列 (いわゆるホワイトリスト) に存在するかどうかを作成して確認する必要があります。もしそうなら - あなたはそれを使うことができます、そうでなければ - あなたはそれをしません

于 2012-05-18T07:32:32.807 に答える