コード例: パブリッククラスJDBCDemo3 { パブリック静的voiddemo3_1(){ boolean flag = login("aaa' OR ' ","1651561"); //ユーザー名がわかっている場合は、このメソッドを使用して、パスワードを知らなくても正常にログインできます。if (flag) { System.out.println("ログインに成功しました"); }それ以外{ System.out.println("ログインに失敗しました"); } } パブリック静的ブールログイン(文字列ユーザー名、文字列パスワード){ 接続 conn=null; ステートメント stat=null; 結果セット rs=null; ブールフラグ=false; 試す { 接続 = JDBCUtils.getConnection(); String sql="SELECT * FROM user WHERE username='"+username+"'AND password='"+password+"'"; //これが SQL インジェクション脆弱性の鍵です。これは文字列連結なので、クエリ ステートメントは SELECT * FROM user WHERE username='aaa' OR '' AND password='1651561' になります。このクエリ ステートメントは結果セットを取得できるため、この脆弱性が発生します。stat=conn.createStatement(); rs = stat.executeQuery(sql); if(rs.next()){ フラグ=true; }それ以外{ フラグ=false; } } キャッチ (SQLException e) { e.printStackTrace(); } フラグを返します。 } 解決策: PrepareStatment を使用します。 パブリック静的voiddemo3_1(){ ブールフラグ=login1("aaa' OR ' ","1651561"); if (フラグ){ System.out.println("ログインに成功しました"); }それ以外{ System.out.println("ログインに失敗しました"); } } パブリック静的ブール値 login1(文字列ユーザー名、文字列パスワード){ 接続 conn=null; PreparedStatement pstat=null; 結果セット rs=null; ブールフラグ=false; 試す { 接続 = JDBCUtils.getConnection(); String sql="SELECT * FROM user WHERE username=? AND password=?"; //パラメータの代わりに?を使用します。事前設定されたSQL形式なので、SQLキーワードを入力してもSQLはそれを認識しません。pstat=conn.prepareStatement(sql); pstat.setString(1,username); //疑問符の値を設定します。pstat.setString(2,password); rs = pstat.executeQuery(); if(rs.next()){ フラグ=true; }それ以外{ フラグ=false; } } キャッチ (SQLException e) { e.printStackTrace(); } フラグを返します。 } } 上記の解決策を使用すると、SQL インジェクションの脆弱性を介してユーザーを正常にログインさせることは不可能になります。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Ubuntu 20.04 に Python 3 仮想環境をインストールする詳細なチュートリアル
>>: Vueはファイルのアップロードとダウンロードを実装します
目次簡単な説明: 1. 取引の4つの特徴2. 複数の同時トランザクションによって発生する問題3. ト...
Dockerをインストールするyumパッケージを最新バージョンに更新します: sudo yum up...
目次ウェブAPI DOM DOMツリーDOM要素取得方法ドキュメントオブジェクトのプロパティイベント...
MySQL交換パーティションの詳細な例序文exchange パーティションを紹介する前に、まず my...
この記事には、細かい点は一切なく、カラーマッチングのテクニックをシェアするだけです。とてもシンプルで...
この記事の例では、カスタムスクロールバーコンポーネントを実装するためのjsの具体的なコードを参考まで...
0. 環境この記事のオペレーティング システム: CentOS 7.2.1511 x86_64 My...
1. 冒頭の2つの単語みなさんこんにちは。私の名前はLin Zonglinです。私はテストエンジニア...
日々の開発において、フロントエンドの学生はアニメーションやデザインについてよく議論します。デザイナー...
Mysqlページングの2つのパラメータ ユーザー制限 1,2 から * を選択 1 は検索する最初の...
コードと同様に、テーブルや列にコメントを追加して、他のユーザーがその機能を理解できるようにすることが...
1. インストール dockerhub を通じてインストールする mariadb のバージョンを検索...
デフォルトのテンプレートメソッドはvue2に似ており、コンポーネント内のセットアップ関数を使用します...
1. はじめにフロントエンドページのアニメーション効果を記述する場合、filter 属性は多かれ少な...
この記事では、kubernetes1.5.2 から kubernetes1.10 にアップグレードす...