SQl Injection
SQL Injectionとは?
ハッカーによって操作されたSQLクエリー文をそのままデータベースに渡し、異常なコマンドを実行する攻撃方法。
攻撃方法
1)認証迂回
通常ログイン時にinputウィンドウにユーザー名とパスワードを入力します.
たとえば、ユーザ名がabcパスワード1234の場合、クエリは次のように送信される.
SELECT * FROM USER WHERE ID = "abc" AND PASSWORD = "1234";
SQL Injectionで攻撃する場合は、inputウィンドウにパスワードを入力し、別のクエリー文を入力します.SELECT * FROM USER WHERE ID = "abc" AND PASSWORD = "1234"; DELETE * FROM USER WHERE ID = "1";
セキュリティが不十分な場合、このようにパスワードとアイデンティティが一致してTrueとなり、後に書かれたDELETE文もデータベースに影響し、致命的な場合です.また、基本問合せ文のWHERE節にOR文を追加し、
'1' = '1'
などの真文を作成し、無条件適用に変更してDBを自由に操作することもできます.2)データ漏洩
これはシステムで発生したエラー情報を利用して攻撃する方法である.
通常のエラーは、開発者がエラーを修正する上で役立つ存在です.ハッカーたちは逆に悪意のある文を挿入し、エラーを引き起こす.
例えば、ハッカーは、GET方式で実行されるURLクエリ文字列を追加することによってエラーを発生させる.
対応するエラーが発生した場合、そのエラーから対応するWebアプリケーションのデータベース構造を推定し、ハッカー攻撃に使用できます.
防御方法
1)入力値受信時に特殊文字かチェック
ログイン前に、認証ロジックを追加し、プリセットの特殊文字が要求に入るのを防止します.
2)SQLサーバーエラーが発生した場合、該当するエラーメッセージを非表示にしてください
viewを使用して、ソース・データベース・テーブルへのアクセス権を向上させます.一般ユーザーはviewでしかアクセスできません.これによりエラーが表示されません.
3)prepare文の使用
prepare文を使用すると、特殊文字を自動的にエスケープできます.
(文とは異なり、クエリー文では伝達パラメータ値を受け入れます)これを利用して、サーバ側はフィルタ処理によって攻撃を防御します.
参考資料
Reference
この問題について(SQl Injection), 我々は、より多くの情報をここで見つけました https://velog.io/@woo00oo/SQl-Injectionテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol