ここにアクセスすると、私の Magento ストア ( http://www.princessly.com/catalogsearch/term/popular/ ) で悪意のある検索試行の全ページが表示されます。
私の質問は、悪意のある検索フレーズが一般的な検索用語ページに表示されるのを防ぎながら、善意のユーザーからの正当な検索用語を表示するにはどうすればよいですか?
ありがとう!
ここにアクセスすると、私の Magento ストア ( http://www.princessly.com/catalogsearch/term/popular/ ) で悪意のある検索試行の全ページが表示されます。
私の質問は、悪意のある検索フレーズが一般的な検索用語ページに表示されるのを防ぎながら、善意のユーザーからの正当な検索用語を表示するにはどうすればよいですか?
ありがとう!
結果が返されない検索や、「ずさんな」一致しか返されない検索はリストしないでください。「悪意のある検索」はおそらくサイト上のどの製品とも一致しないため、このルールによって除外されます。
このルールは、検索の特定の形式を認識する必要がない (ブラックリストではない) ため、堅牢です。さらに、結果のない通常の検索をリストすることは、あなたやあなたの顧客に利益をもたらさない可能性が高いため、それらを除外することは、スパムの問題を処理する以上の改善になります.
最初に、インジェクション検索用語が評価されているかどうか、つまり、SQL インジェクションを防ぐために検索用語が適切にエスケープおよびフィルタリングされているかどうかを確認します。次に、索引付けされた検索用語のデータベースのクリーニングに進みます。次に、インデックス作成機能を調べます。検索機能に十分な sql インジェクションと xss 保護がある場合は、実際に心配する必要はありません (帯域幅を使い果たしている場合を除き、調べた方がよいかもしれません)。 IP をブラックリストに登録するか、アクティブな検索フィルタリングを行いますが、これは少し複雑になります)。基本的に、適切なクエリのみを保存する必要があります。最も簡単な方法は、アルファベット順のクエリのみを保存することですが、これは非常に制限的であり、他の有効なクエリを除外する可能性があります。逆に、ブラックリストと正規表現チェックを使用できます。しかし、それは実装が少し難しく、タイムリーです。最後に、期間ごとに検索制限を課したり、ユーザー エージェント チェックなどを行って、ユーザーが実際に検索していることを確認したりできます。ある種の CAPTCHA を使用することもできますが、それはユーザーが検索機能を広範囲に使用することを著しく妨げる可能性があるため、私はそれを思いとどまらせます.
悪意のある検索用語は何らかの形で列挙される可能性があるため、開発者は一連の正規表現を作成して、入力された検索用語/クエリがクリーンであるかどうかを確認します。たとえば' OR '1'='1
、検索入力として SQL インジェクションを使用してみましょう。
対象:' OR '1'='1
データベースに取り込まれないようにする。HOWTO: 正規表現を適用します。たとえば^'?1 (')? [Oo][Rr] (')?1(')?=1(')?$
、その正規表現が true を返した場合、用語がキャプチャされないようにブロックします。ブロックされた用語をさらに追加したい場合は、これに似たことができます^('?1 (')? [Oo][Rr] (')?1(')?=1(')?)|(Other Regex)^
。ただし、用語が既にキャプチャされている場合は、データベースをクリーニングすることが最善の解決策です。人気のある検索用語が表示されるたびに正規表現チェックを実行しようとすると、サイトのパフォーマンスが低下するため、私の提案は一般的な用語テーブルに対して正規表現を実行してデータベースをクリーンアップし、悪意を持って行を削除します。