1

ユーザー入力 (つまり、アンケートの質問に答えるのではなく、「質問」すること) がかなり信頼されるアンケート フレームワークでは、私の前任者は、ユーザー定義の制約からほとんど直接的な MySQL クエリを構築することにしました (つまり、悪意のあるSQL インジェクション (SQL インジェクションは意図した結果であるため)。

ほとんどの場合、これらの制約は次のようなsex = 1クエリに変換される場合はこの質問をスキップするようなものになります

SELECT IF(sex = 1) AS test FROM Survey1 WHERE user_id = 12

より複雑なケースでは、
Survey1.agreed = 1 OR (Survey2.age < 50 AND Survey2.age > 18) OR Survey3.number_of_children IN(2,3,5,7) 無制限の複雑さとネストをサポートするために結合などを構築する必要がある場所に制約が存在する可能性があります。

明らかに、悪意のあるユーザーがまれであっても、ユーザーにクエリの WHERE 部分をほとんど指定させてしまうと、うまくいかない場合がたくさんあります。
彼はこれらの制約を自分で解析しようとしましたが、複雑なケースではパフォーマンスが非常に悪かったため、最終的に安全ではありませんが高速なアプローチを採用しました。

この問題に対する安全である程度パフォーマンスの高い解決策は何でしょうか?

4

0 に答える 0