そのため、3 つの競合するもの (バインドされたパラメーター、正規表現、ユーザー入力を使用した部分一致検索) を安全に組み合わせる方法に頭を悩ませようとしていますが、これらを処理する正しい/安全な方法を発見したかどうかはわかりません。もの。これは珍しい問題ではありませんが、PDO と php の 3 つのセキュリティ要素すべての交差を扱うドキュメントは、見つけるのが難しいか存在しません。
私のニーズは比較的単純で標準的です。優先順位は次のとおりです。
- SQL インジェクションを防止したい (現在、バインドされたパラメーターを使用しています)
- 正規表現インジェクションを防ぎたい
- ユーザー入力文字列を使って部分一致で検索したい
したがって、たとえば、ユーザーが大文字と小文字を区別しない部分一致でユーザー名を検索できるようにしたい。たとえば、検索するとユーザー名が表示Xiu
されXiu
、Xiulu
さらにxiuislowercase
現在、私は次の声明を持っています:
select * from users where username ilike :search_string || '%'
他の場所では、次のように正規表現演算子を使用してより複雑なケースを使用します。
select * from users where username ~* :search_string || '%'
はphp pdo:search_string
のバインドされたステートメントであり、データベースはpostgresqlです。これは正しい検索を実行し、正しい結果を返します。バインドされたパラメーターであるため、SQL インジェクションに対する証拠であると確信しています。ただし、それが正規表現インジェクションに対する証明であるとは確信していません。また、正規表現インジェクションに対する証明と同時に、SQL インジェクションに対する証明を行う方法もわかりません。
PHP、PDO、およびpostgresqlを使用して、正規表現インジェクションに対しても完全に保護するにはどうすればよいですか?