web-dev-qa-db-ja.com

URLクエリ文字列を使用したSQLインジェクション(Webアプリケーション/ PHPサーバー)

ハッカーは、次のSQLインジェクションクエリを使用してサイトを攻撃し、SQLバージョンを取得しようとしています。

URLサイトを利用。例:

www.abc.com/?queryParamString=(SELECT 9701 FROM(SELECT COUNT(*),CONCAT(0x71787a7171,(SELECT (ELT(9701=9701,1))),0x71767a6271,FLOOR(Rand(0)*2))X FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY X)a)

私のアプリケーションでは、副作用なしでqueryParamStringをクリアテキストとしてDBに作成する準備された統計を使用しています。

私の質問:

  • PHP=サーバーがページのレンダリング要求を受け取ったときにURLをサニタイズするためのベストプラクティスはありますか?.
  • または、クライアント側のプラクティスはありますか?
  • この種の攻撃をどのように防ぐか、またはどのように対処するかについての指針
2
user2936008

ベストプラクティス、サーバーおよびクライアント側:常に、常に入力、出力をサニタイズし、準備されたステートメントを使用します。

試みられたSQL攻撃などを検出し、保護層を提供し、検出された場合の応答をカスタマイズするWAF(Webアプリケーションファイアウォール)の使用を検討することもできます。 IPブラックリストのようなものを介して攻撃者を阻止する以外に、インターネット向けのサービスがある場合、悪意のある攻撃者が攻撃を仕掛けます。これを防ぐには、準備されたステートメントなど、安全で適切に記述されたコードが必要です。

2
LTPCGO

クエリ文字列、つまりsqlmapに基づいて、脆弱性をスキャンするのではなく、データを抽出します。これは、脆弱性があるか、それが誤検出であるかを示唆しています。ただし、エラーベースの抽出を使用しているため、誤検知が発生しにくい。

これをさらに調査することをお勧めします。パラメーター化されたクエリを使用している可能性があります(SQLインジェクションを回避するための最良の方法です)、脆弱性を開いたままにしていないコードでパラメーターが欠落している可能性があります。

1
wireghoul