データを安全にすることについて話しているときに、マニュアルがどのような例外を参照しているのかわかりません。例外は、データが安全であることがすでにわかっている場合であると言えます。たとえば、次のようなケースが思い浮かびます。
- データは数値として入力されます(これは実際には次の項目の専門分野です)
- エスケープする必要のある文字が含まれていないことはすでにご存知でしょう(たとえば、ハードコーディングしたいくつかのオプションを含む「ホワイトリスト」配列で何かを検索した場合など)
たとえば、持っている場合は、クエリに挿入する前$id = intval($_GET['id'])
にエスケープする必要はありません。$id
でも!すべての入力をエスケープすることは決して害にはなりません。そうすることで、コードに脆弱性が導入される可能性がなくなります(たとえば、エスケープを忘れた場合、要件が変更された場合など)。ですから、すべてを逃れ、「例外」を忘れる習慣を身につけることをお勧めします。
入力の一部としての%
and文字については、これらを認識するコマンドにこの入力をフィードする場合を除いて_
、これらをエスケープする必要はありません。したがって、たとえば、次のようなクエリがある場合:
$term = $_GET['term'];
$sql = sprintf("SELECT FROM table WHERE column LIKE '%%s%'",
mysql_real_escape_string($term));
この場合、ユーザーがの%
一部としてaと入力$term
すると、実際にリテラルを検索したいと考えるのが妥当です%
。したがって、このような場合は、 (デフォルトのエスケープ文字)%
に置き換えてエスケープする必要があります。またはこれには2つの良いオプションがあります。\%
\
str_replace
strtr