未検証のユーザー入力に対する PostgreSQL の LIKE 式のリテラル パターン マッチング
PostgreSQL でユーザー入力を LIKE パターンと照合する場合、エスケープすることが重要ですリテラル一致を保証するために、「_」や「%」などの特殊なパターン文字を使用します。 PostgreSQL では、これらの文字をバックスラッシュ () または ESCAPE 句で定義されたカスタム エスケープ文字を使用して引用符で囲む必要があります。
たとえば、「rob」を文字通り一致させるには、アンダースコアまたはを含むユーザー入力をエスケープする必要があります。パーセント記号。ただし、ここには潜在的な落とし穴があります。ユーザー入力にバックスラッシュも含まれている場合は、バックスラッシュもエスケープする必要があります。これは複雑になり、バグにつながる可能性があります。
サーバー側のソリューション
これを適切に処理するには、PostgreSQL の replace() 関数を利用して、特殊文字を特殊文字に置き換えることができます。エスケープされたバージョン。このアプローチにはいくつかの利点があります。
たとえば、「rob」を文字通り検索するには、次のクエリを使用できます。
SELECT * FROM users WHERE name LIKE replace(replace(replace(,'^','^^'),'%','^%'),'_','^_') ||'%' ESCAPE '^'
このクエリ内:
結論
サーバー側の置換とカスタム エスケープ文字を使用することで、リテラル パターン マッチングを確実に行うことができます。未検証のユーザー入力に対する PostgreSQL の LIKE 式。このアプローチは堅牢で、インジェクションの脆弱性を回避し、コードを簡素化します。
以上が未検証のユーザー入力を使用して PostgreSQL の LIKE 式でリテラル パターン マッチングを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。