0

SQLI および XSS 攻撃で使用される一般的な構文について、(文字列が関数を介して送信されると) 文字列をチェックする関数を作成しています。問題は、私が知っているのは一部だけです..しかし、それらすべてではないため、SOの人々がこれらのタイプの攻撃の一般的な使用法に関する情報/構文を提供できるかどうか疑問に思っていました.

私のコードは以下の通りです:

function CleanInput ($Arg)
{
    foreach (array("@", "<", ">", "'", "|", "/", "\\", "-", "+", "-", "_", "'") as $value)
    {
        $check = strpos($Arg, $value);
        if ($check !== false)
        {
            return true;
        }
    }
    return false;
}
4

1 に答える 1

1

入力は本質的に「クリーン」または「クリーン」ではありません。(ここでやっているように) あたかもそうであるかのように扱うことは、奇妙な機能の問題やセキュリティ ホールへの早道です。

代わりに、データを送信する場所 (ユーザー入力かどうかにかかわらず!) を常に念頭に置き、出力に適した方法でデータを変更するようにしてください。例えば:

  • データを SQL に送信するときは、可能であればバインドされたパラメーターを使用します。そうでない場合は、データをクエリに挿入する直前に SQL エスケープを適用します。
  • htmlspecialchars()HTML を出力するときは、データが他の HTML と結合されるポイントで適切な HTML エスケープ関数 ( など) を使用します。
  • JSON を生成するときは、 を使用しますjson_encode()。例外なく。
  • シェル コマンドを作成するときは、シェル エスケープ関数を使用して非定数データを含めます。

一般に、入力ではなく出力でデータをエスケープします。

于 2013-01-18T01:50:28.867 に答える