ホームページ  >  記事  >  データベース  >  SQLインジェクションとは何ですか? SQL インジェクションをゼロから理解できるようにします

SQLインジェクションとは何ですか? SQL インジェクションをゼロから理解できるようにします

php是最好的语言
php是最好的语言オリジナル
2018-07-26 17:52:572787ブラウズ

SQL インジェクションをゼロから理解します。SQL インジェクションとは何ですか? SQLインジェクションとは、データベースを操作できるのは私だけですが、あなたがコマンドを入力することで、私の知らないうちにデータベースが操作されるという意味です

SQLインジェクション

1.

  • 通常のログイン シナリオである次のケース シナリオを見てください:

SQLインジェクションとは何ですか? SQL インジェクションをゼロから理解できるようにします

  • そして、ユーザー名 ': – を使用すると、次のように入力しても正常にログインできます。パスワードをさりげなく↓

SQLインジェクションとは何ですか? SQL インジェクションをゼロから理解できるようにします

  • このとき、実際にはユーザー名にSQL記号を書いて内部SQLを早めに終了させ、検索をコメントアウトしたことが2つのSQLを比較すると分かります。文の後半にある条件を変更して、パスワード不要のログイン効果を実現します。

SQLインジェクションは、私がデータベースを操作できるのは私だけであることを意味しますが、あなたはコマンドを入力することで、私の知らないうちにデータベースを操作します

2.脆弱性

  • 誤って表示される理由は、上記の SQL が動的スプライシングを使用しているため、SQL が渡される方法によって SQL のセマンティクスが変更される可能性があるためです。

動的スプライシングは、Java変数とJavaのSQLステートメントを混合して使用することです: select * from user where userName='"+userName+"' およびpassword = '"+password"'

  • したがって、preparedStatementを使用してくださいパラメータ化された SQL では、最初にセマンティクスを決定してからパラメータを渡すことにより、渡されたパラメータによって SQL のセマンティクスが変更されることはありません。 (パラメーターは setInt、setString、setBoolean を通じて渡されます)

3. パラメーター化された SQL の使用例

            //建立数据连接
            conn=ds.getConnection();
            //1.设置prepareStatement带占位符的sql语句
            PreparedStatement ptmt = conn.prepareStatement("select * from user where userName = ? and password = ?");
            ptmt.setString(1, "张三");      //2.设置参数
            ptmt.setString(2, "123456");
            rs=ptmt.executeQuery();     

            while(rs.next()){
                System.out.println("登陆成功");
                return;
            }
            System.out.println("登陆失败");

パラメーター化された機能:

1. プレースホルダーを使用した PreparedStatement SQL ステートメントの設定

実行するSQL ステートメント:

stmt=conn.createStatement();
rs=stmt.executeQuery("select userName from user");

2. パラメーターの設定

PerparedStatement は Statement を継承しており、ここではパラメーター化された SQL にする機能が主に使用されます。

再投稿: https://blog.csdn.net/qq_30258957/article/details/78145885

追加: 1. PreparedStatement は SQL の実行に使用される Statement を拡張します。

2.Statement は静的 (無条件) SQL PreparedStatement は動的 (条件付き) SQL の実行に適しています。

3. PreparedStatement はインジェクション攻撃を回避できます。

SQLインジェクションの深い理解と予防策

関連動画:

SQLインジェクションに対する防御 - PHP実践モール開発ビデオチュートリアル

以上がSQLインジェクションとは何ですか? SQL インジェクションをゼロから理解できるようにしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。