「エスケープ」機能を 1 つだけ持って、それが常に機能することを期待することはできません。特定の衛生ルーチンを必要とするさまざまな攻撃があります。この概念を理解する唯一の方法は、脆弱なコードを書き、それを悪用することです。エクスプロイト コードを記述することは、セキュリティ システムを理解するために不可欠です。
たとえば、次のクエリは SQL インジェクションに対して脆弱です。
$host=htmlspecialchars($_GET[host],ENT_QUOTES);
$name=htmlspecialchars($_GET[name],ENT_QUOTES);
mysql_query("select * from user where Host='$host' and Name='$name' ");
エクスプロイト:
http://localhost/sqli_test.php?host= \&name=%20sleep(20)--%201
mysql の最適なエスケープ関数は mysqli_real_escape_string() ですが、これは失敗する可能性があります。
mysql_query("select * from user where id=".mysqli_real_escape_string($_GET[id]));
エクスプロイト:
http://localhost/sqli_test.php?id=1%20or%20sleep(20)
実際、SQL インジェクションを処理する最善の方法は、エスケープ関数を呼び出すことではなく、SQL インジェクションに ADODB のパラメーター化されたクワイアを使用することです。XSS には htmlspecialcahrs($var,ENT_QUTOES) を使用します。OWASPのトップ 10 を読んでください。Web アプリケーションのセキュリティで問題が発生する可能性は十分にあるからです。