2016-05-07 8 views
2

私はSQLインジェクション攻撃に関するレポートを作成しています。私はOwaspの例を以下のように見つけました。SQL注入クエリ

これは例であり、私にとって、特定のIDを持つ行を取得する単純なクエリのように見えます。

String query = "SELECT * FROM accounts WHERE custID='" + 
request.getParameter("id") + "'"; 
// Since this is an online example i don't know what getParameter("id") method does. 
+0

が含まれている可能性のあるSQL文を、含めることができます:それは、コードについてです*ない*アプリケーションである目で。 Wikipediaのページ(https://en.wikipedia.org/wiki/SQL_injection)から始めてください。 –

+0

あなたに提供されている例は悪い例だと思います。 'OR 1 == 1;'(return * all * records)のようなSQLインジェクションの適切な例を与える代わりに、Javaコードのように見えます。 –

答えて

5

を含めることができますので、SQLインジェクションは、それが特定のIDを持つ行を取得する単純なクエリと思われるが、この場合に可能である

それは注射の魔法です。クエリは、は要求(例えば、HTMLからのGETまたはPOSTのような)から来る特定の基準に適合する行しか得られません。

したがってrequest.getParameter("id")は、ユーザ(または非常に悪い人)が提出したパラメータを提供します。

id = 12

SELECT * FROM accounts WHERE custID='12' 

につながることになる。この場合、ユーザー(悪いものならば何が起こるかイメージ:コードの平和はこのような何かを期待することを書いた通常誰

)はこれを代わりに送信します。

id = 0'; DROP TABLE accounts; -- 

意図したポイント(';

  • を注入する前に、クエリを終了し

    1. が意図したクエリがエラーなしで実行していることを確認します(0
    2. :LD

      SELECT * FROM accounts WHERE custID='0'; DROP TABLE accounts; --' 
      

      ステップ・バイ・ステップとして実行あなたの悪質なコード(DROP TABLE accounts;

    3. 元のクエリの残りの部分がコメントとして扱われていることを確認してください(--

    OWASP例の問題は、クエリ自体が、)request.getParameter("id")(「外部」から来るパラメータは、任意の潜在的な制御文字をエスケープすることなく、クエリを生成するために使用されているという事実はありません。

    このスタイルのコードを記述すると、基本的にSQL Server上でコードを実行できます。

  • 1
    request.getParameter("id") 
    

    例えば、HTTPリクエストからパラメータ "ID" を取得しますfor:http://test.com/?id=qwertzrequest.getParameter("id")は "qwertz"を返します。このパラメータの値は、すべてにチェックされなかったし、私には何も

    3

    このクエリの問題は、SQLが動的に作成されることです。 Request.getparameterはおそらく、特定のWebリクエストの行のIDを返す関数です。

    しかし、Webページでこのパラメータをテキストボックスに入力できる場合や、JavaScriptから関数を直接呼び出す場合は、idに任意の値を設定できます。

    これが正しい認証で、でも私はあなたがSQLインジェクションのポイントを逃していると思う「DROPのデータベース」

    関連する問題