1

MySQL DB クエリの場合、エスケープされていない文字をチェックして記録したいと考えています。

セキュリティで保護されたデータベースが必要であり、SQL インジェクションで (今のところ) 試行を記録したいためです。

テスト中なので、値をプレーンテキストに記録する必要があります。

どうしていいかわからないので。serialize と serialize を使用して、エスケープ文字に問題があるためブレーキがかかるかどうかを確認し、文字列を記録することをお勧めします。

これは予防的というよりも受動的な状況であると認識していますが、それでもテストには適しています。

4

3 に答える 3

4

他の人が言及しているように、データベースを保護するために、準備されたステートメント、クエリ バインディング、または少なくとも MySQL クエリのエスケープを使用することをお勧めします。要するに、独自のソリューションを展開しようとするのではなく、確立された関数/ライブラリにデータベースを保護する仕事を処理させるという考えです。これには、「疑わしい」エントリを手動で承認する必要がないという追加の利点があります。これは、教育的なレッスンには適している可能性がありますが、あらゆる規模のサイトで使用するには実用的ではありません.

于 2013-04-29T05:48:06.617 に答える
3

文字列をエスケープする必要があるかどうかを本当に知りたい場合は、次のようなテストを行うことができます (ここでは PDO を使用)。

$originalString = 'Some value';
$quoted = substr($pdo->quote($originalString), 1, -1);
// PDO::quote() wraps the string in quotes so using substr to remove them

if ($originalString != $quoted) {
    // log this string as requiring escaping
}
于 2013-04-29T05:46:40.690 に答える