10

SQL インジェクション攻撃からコードを保護する方法はたくさんあります。しかし、私が必要とするのは、SQL インジェクション攻撃をログに記録して、彼 (攻撃者ユーザー) をブラックリスト ユーザー データベースに追加できるようにする方法です。

ここで必要なのは、SQL インジェクションがある場合に true を返す一種の関数です。

<?php
if(isset($_POST['username'])){
// need a function here which will return true if there's
// a sql injection else false
}
?>
4

3 に答える 3

6

PHP-IDSを使用して、セキュリティ攻撃 (SQL インジェクションだけでなく) を検出し、カスタム動作を追加できます。私の場合、すべてのリクエストの開始時に PHP-IDS を実行します。問題が検出された場合は、データベースにログを記録し、一般的なエラー メッセージをユーザーに返し、die() を実行します。

ただし、PHP-IDS がすべての SQL インジェクションの問題を検出するわけではないことに注意してください。それを自動的に行うことはできません。クエリを適切に処理する必要があります。

于 2012-04-30T12:46:42.580 に答える
3

編集:この回答は、質問が大幅に変更される前に作成されました。まだ有効ですが、OP の特定の状況には対応しなくなりました。

SQL インジェクションは、修正が最も簡単な Web アプリケーションの脆弱性の 1 つです。潜在的な攻撃を特定し、それらを記録し、使用拒否機能を備えたユーザー ブラックリストを維持および管理するという問題空間は、何桁も複雑なプログラミング作業です。

適切に使用することを学びparameterised queries、SQL インジェクションを考慮する必要はありません。PHP では、mysqliまたはPDOライブラリを使用してこれを実現できます。ここには、これに対処するための質問がたくさんあります。また、「パラメーター化されたクエリ」または「準備されたステートメント」のグーグル検索から到達できるさらに多くのチュートリアルがあります。

于 2012-04-30T12:44:27.803 に答える
2

これほど深刻な問題に対して、自家製の解決策を考え出そうとしないでください。you_know_whereであなたを噛むために戻ってくる可能性があります。

代わりに、ユーザーが行うクエリと要求の種類をサーバー ログから確認し、それに基づいて決定を下すようにしてください。(GET 要求の場合)。https://stackoverflow.com/a/10383937/561269が言ったように、POST リクエストの場合は、それを使用できます。

于 2012-04-30T12:51:17.227 に答える