SQL注入クエリ
答えて
を含めることができますので、SQLインジェクションは、それが特定のIDを持つ行を取得する単純なクエリと思われるが、この場合に可能である
それは注射の魔法です。クエリは、は要求(例えば、HTMLからのGETまたはPOSTのような)から来る特定の基準に適合する行しか得られません。
したがってrequest.getParameter("id")
は、ユーザ(または非常に悪い人)が提出したパラメータを提供します。
id = 12
今
SELECT * FROM accounts WHERE custID='12'
につながることになる。この場合、ユーザー(悪いものならば何が起こるかイメージ:コードの平和はこのような何かを期待することを書いた通常誰
)はこれを代わりに送信します。
id = 0'; DROP TABLE accounts; --
意図したポイント(';
)
- が意図したクエリがエラーなしで実行していることを確認します(
0
) - :LD
SELECT * FROM accounts WHERE custID='0'; DROP TABLE accounts; --'
ステップ・バイ・ステップとして実行あなたの悪質なコード(
DROP TABLE accounts;
) - 元のクエリの残りの部分がコメントとして扱われていることを確認してください(
--
)
OWASP例の問題は、クエリ自体が、)request.getParameter("id")
(「外部」から来るパラメータは、任意の潜在的な制御文字をエスケープすることなく、クエリを生成するために使用されているという事実はありません。
このスタイルのコードを記述すると、基本的にSQL Server上でコードを実行できます。
request.getParameter("id")
例えば、HTTPリクエストからパラメータ "ID" を取得しますfor:http://test.com/?id=qwertzrequest.getParameter("id")
は "qwertz"を返します。このパラメータの値は、すべてにチェックされなかったし、私には何も
このクエリの問題は、SQLが動的に作成されることです。 Request.getparameterはおそらく、特定のWebリクエストの行のIDを返す関数です。
しかし、Webページでこのパラメータをテキストボックスに入力できる場合や、JavaScriptから関数を直接呼び出す場合は、idに任意の値を設定できます。
これが正しい認証で、でも私はあなたがSQLインジェクションのポイントを逃していると思う「DROPのデータベース」
- 1. Mysql注入クエリ?
- 2. SQLの注入
- 3. 依存性注入のクエリ
- 4. DALにSQLクエリを作成して注入する
- 5. SQL挿入クエリ
- 6. SQLクエリで注文を分割する
- 7. ご注文は、すべてのSQLクエリ
- 8. 例外を含むSQLクエリの注文
- 9. 入力でクエリを注文する
- 10. 自動SQL注入防止PHPライブラリ
- 11. Doctrine queryBuilder:addOrderBy()メソッドのSQL注入リスク?
- 12. 式内のSQL注入保護
- 13. SQL Serverクエリの挿入
- 14. OracleのSQLクエリ入社テーブル
- 15. SQLクエリ入力が必要
- 16. 注釈注入とXML注入
- 17. Sql注入:SQLインジェクションのデモンストレーションを表示したい
- 18. 過去の注文を最も最近の注文で追加するSQLクエリ
- 19. フィールド注入検査VSコンストラクタ注入
- 20. 依存注入をコンティニュインル注入する
- 21. 関連する2つのdatetime列で注文するSQLクエリ
- 22. 複数のSQLクエリを表示し、タイムスタンプで注文する
- 23. 左の結合結果でSQLクエリを注文する方法
- 24. 1か月間の合計注文額を示すSQLクエリ?
- 25. 1行からユーザーフレンドリーにSQLクエリを注文する方法?
- 26. SQLクエリの注文と数量の計算
- 27. 間違った注文を返すSQLクエリ
- 28. 仕事の注文の順序を表示するSQLクエリ
- 29. 最初の文字でSQLクエリを注文する
- 30. 時差を受け入れるSQLクエリ
が含まれている可能性のあるSQL文を、含めることができます:それは、コードについてです*ない*アプリケーションである目で。 Wikipediaのページ(https://en.wikipedia.org/wiki/SQL_injection)から始めてください。 –
あなたに提供されている例は悪い例だと思います。 'OR 1 == 1;'(return * all * records)のようなSQLインジェクションの適切な例を与える代わりに、Javaコードのように見えます。 –