1

送信ごとにユーザーからの入力をフィルタリングするか、取得/投稿値を操作してフォームの送信ごとに呼び出す関数を作成します。

しかし今、私は以下の関数をメインのインクルードファイルに保持しました:

foreach ($_POST as $key => $value) {
    $_POST[$key] = mysql_real_escape_string(trim($value));
}

foreach ($_GET as $key => $value) {
    $_GET[$key] = mysql_real_escape_string(trim($value));
}

それはうまく機能しますが、すべての単一の投稿/取得に対してこれを行うことの欠点はありますか? PSまあ、スクリプトのパフォーマンスを除いて。

4

3 に答える 3

0
  1. 検証後、dbuに挿入する前に、最初にエスケープするのではなく、ユーザー入力を検証してください。
  2. あなたの質問への答え:適切な方法でそれを行うことは、関数を使用し、それらの関数を別のファイルに配置し、関数を呼び出す前にそのファイルを含めることです..あなたの最も遠い方法も問題ありませんが、フォームとそのフィールドの数が多い場合そうすると、スクリプトが乱雑になり、他の開発者が保守するのが難しくなるため、フィルタリング関数を含むファイルを使用する2番目の方法を使用することをお勧めします。
于 2012-04-16T07:10:11.623 に答える
0

これは、これを解決するための論理的な方法ではありません。前述のように、これは多次元配列を処理しないため、突然元の値で作業する必要がある場合は煩わしいものになります。たとえば、誰かがtextareaフィールドを保存したいと思っていて、後で作業を続行するために下部の2行を望んでいる場合があります。これらの行は、保存すると消えます。
フォームの検証も少し面倒になる可能性があります。

あなたの解決策も100%安全な方法ではありません。あなたはまだXXSに対して脆弱です。

それを除けば、これを自動的に行うフレームワークはわかりません。おそらく、彼らはそれを行っていないのには理由があります。

于 2012-04-16T07:11:18.330 に答える
0

mysql_real_escape_stringSQL インジェクションを完全に防止するわけではありません。次の例を見てみましょう。

$input = mysql_real_escape_string($_POST['id']);
$query = "DELETE FROM user WHERE id={$input};";

$_POST['id']に等しいとしましょう1 OR TRUE

于 2012-04-16T07:19:56.100 に答える