次のコードがあるとしましょう(ある種の検索などのために):
$stmt = $pdo->prepare("SELECT * FROM users WHERE username LIKE ?");
$stmt->execute(array('%' . $username . '%'));
指定されたユーザー名は適切にエスケープされますが、文字%
(= 0以上の任意の文字)および_
(=正確に1つの任意の文字)はMySQLによってワイルドカードとして解釈されます。
%
ユーザーが検索にまたはを入力できることを理解してい_
ます。検索機能を正しく機能させるには、それをエスケープする必要があります。(のような場合や結果set_pt
を取得setopt
する場合)。
しかし、私の質問は、誰かがこれを悪用できるかどうかです。はいの場合、誰かがこれをどのように悪用し、どのように防ぐことができますか?以下の機能で十分でしょうか?
function escape_like_string($str) {
return str_replace(Array('%', '_'), Array('\%', '\_'), $str);
}
私が考えることができる1つの可能性は、大量のを入力することで%
あるため、サーバーは大量のメモリを割り当てる必要があります。これは機能しますか?