私は、ユーザが単純なブール論理を入力してそれをmySQL検索文字列に変換できるデータベース検索フィールドを用意しました。例えばのでユーザが入力したブール検索文字列をmySQLに変換
ユーザ入力の場合:(php AND mysql) OR ajax
私はそれを変換したい:
((c.Skillset LIKE '%php%' AND c.Skillset LIKE %mysql%) OR c.Skillset LIKE '%ajax%')
は、これを行うのはかなり簡単な方法はありますか?私はブラケットの解決策が出てくるのを特に困らせていますが、そうでなければそれはかなり簡単でしょう。
このツールのユーザーはどの程度悪意のあると思われますか?最悪のユーザー以外は何も設計するべきではないことを知っていますが、有効であることを検証するために文字列をトークン化/解析する必要がある場合、それはいくつかのpreg_replacesを行うよりも難しい問題です。 – Steve
さて、私は、htmlspecialcharsを実行することを計画していました。 'ajax'、 'mysql'などの検索項目を想定し、入力からロジックを解釈することによって何かが関数によって書き込まれます。私が理解しているように、検索文字列にandsとorsとbracketを配置するだけで、悪意のあるものではないので、それはうまくいくと思います。 – dlofrodloh
しかし、 '(((((php AND mysql)OR ajax'例えば、有効なクエリではないでしょう。したがって、用語を適切にグループ化する括弧の数を一致させると、複雑さが増します。 – Steve