1

この関数を使用して、MYSQL dBに書き込む前に、フィールドからすべての非数値を削除します。

function remove_non_numeric($inputtext) {return preg_replace("/[^0-9]/","",$inputtext);

これは、SQLインジェクションを防ぐために、入力データを効果的にエスケープしますか?この関数をでラップすることもできますがmysql_real_escape_string、それは冗長かもしれないと思いました。

4

2 に答える 2

3

SQLインジェクションに関しては、仮定がすべてのピー音の母です。とにかく mysql_real_escape_string でラップしてください。

于 2011-08-05T18:55:35.143 に答える
0

これはデータをエスケープしませんが、OWASPが推奨するアプローチの例です。

入力から数値以外をすべて削除することで、ホワイト リストを実装することで SQL インジェクションから効果的に保護できます。結果の文字列 (この特定のケース) を効果的な SQL インジェクション ペイロードにするほどのパラノイアはありません。

ただし、コードは古くなり、変更され、新しい開発者に継承されるため誤解されます。要するに、正しいアドバイス、すべてを終わらせてすべてを維持することは、次の 3 つのステップの 1 つまたは複数を使用して SQL インジェクションを積極的に防止することです。この順番で。これまで。独身。時間。

  1. 安全なデータベース API を使用してください。(たとえば、準備されたステートメントまたはパラメーター化されたクエリ)
  2. データベース固有のエスケープまたはエスケープ ルーチンを使用します (mysql_real_escape_stringこのカテゴリに分類されます)。
  3. 許容可能な入力値のドメインをホワイト リストに登録します。(提案された数値解はこのカテゴリに分類されます)

mysql_real_escape_stringすべてのアンチ SQL インジェクションに対する答えではありません。これは最も堅牢な方法ではありませんが、機能します。数値以外のすべてを削除することは、安全な値をホワイトリスト化することであり、健全なアイデアでもありますが、どちらも安全な API を使用するほど良いものではありません。

于 2012-10-15T22:32:51.607 に答える