ハッカーは、次の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に作成する準備された統計を使用しています。
私の質問:
ベストプラクティス、サーバーおよびクライアント側:常に、常に入力、出力をサニタイズし、準備されたステートメントを使用します。
試みられたSQL攻撃などを検出し、保護層を提供し、検出された場合の応答をカスタマイズするWAF(Webアプリケーションファイアウォール)の使用を検討することもできます。 IPブラックリストのようなものを介して攻撃者を阻止する以外に、インターネット向けのサービスがある場合、悪意のある攻撃者が攻撃を仕掛けます。これを防ぐには、準備されたステートメントなど、安全で適切に記述されたコードが必要です。
クエリ文字列、つまりsqlmapに基づいて、脆弱性をスキャンするのではなく、データを抽出します。これは、脆弱性があるか、それが誤検出であるかを示唆しています。ただし、エラーベースの抽出を使用しているため、誤検知が発生しにくい。
これをさらに調査することをお勧めします。パラメーター化されたクエリを使用している可能性があります(SQLインジェクションを回避するための最良の方法です)、脆弱性を開いたままにしていないコードでパラメーターが欠落している可能性があります。