SQLインジェクションは、他の情報を取得するために、Webサイトインターフェイスを介してデータベースにSQLコマンドを発行する試みです。つまり、この情報は、ユーザー名やパスワードなどの保存されたデータベース情報です。
データベースインスタンスに接続するスクリプトまたはページを保護するための最初のルールは、ユーザー入力を信頼しないことです。
あなたの例は、SQLステートメントで誤って引用された文字列を終了しようとしています。これを理解するには、最初にSQLステートメントを理解する必要があります。パラメータにaを追加する例では'
、「インジェクション」は次のタイプのステートメントを期待しています。
SELECT username、password FROM users WHERE username ='$ username'
そのステートメントにを追加する'
ことで、SQLパラメーターまたはクエリを追加できます。' OR username --
SELECT username、password FROM users WHERE username ='' OR username-'$ username
これはインジェクションです(クエリの再形成の1つのタイプ)。ユーザー入力は、事前に作成されたSQLステートメントに挿入されたステートメントになります。
一般に、SQLインジェクションメソッドには次の3つのタイプがあります。
- クエリの再形成またはリダイレクト(上記)
- エラーメッセージベース(そのようなユーザー/パスワードはありません)
- ブラインド注射
SQLインジェクション、脆弱性のテスト方法、 SQLインジェクションの理解と克服、およびインジェクションの回避に関するStackOverflowのこの質問(および関連する質問)を読んでください。
編集:
SQLインジェクションについてサイトをテストする限り、「シンボルを追加する」よりもはるかに複雑になることを理解してください。あなたのサイトが重要であり、あなた(またはあなたの会社)がそれを買う余裕があるなら、プロの侵入テスターを雇ってください。それができない場合、この優れた例/証明は、注入テストを実行するために使用する可能性のあるいくつかの一般的な手法を示すことができます。SQLインジェクションとデータベース引き継ぎシナリオのいくつかのテストを自動化できる SQLMapもあります。