検索
完全一致や部分一致など比較方法がいろいろある
部分一致は前方一致・後方一致のような比較的単純なものから、部分文字列一致のような複雑なものまでさまざま
前方一致のような単純な例を含めて、クエリ構文のセマンティクスは相互に互換性がない
a.*のようなクエリをグロブとみなすか正規表現とみなすかによって結果が変わる 結果が変わるだけではなく最悪の場合はDoSやディレクトリトラバーサルのような脆弱性も引き起こしうる 無害化を試みると柔軟性を損うことがあるので無邪気に「無害化しておけばよい」とは言えない
検索対象によって適したクエリ構文も異なる
ファイルパスを検索する際はどちらかといえば階層が意味を占める割合が大きいと考えられるのでグロブが適している・正規表現だとエスケープが煩雑になる
ドメインやIPなどは正規表現で特別扱いされる . が頻出する
以上より次のようなことがいえる
クエリ構文のセマンティクスは利用者に対し明示されるべき
クエリ文字列そのものだけを元にセマンティクスの動的選択は避けるべき
クエリ文字列は信頼できないユーザ入力かもしれない
/.../ のように /で囲まれていたら正規表現として評価する仕様は、悪意ある第三者が容易に攻撃できる
どういうインターフェースが望ましいか
完全一致