コード例: パブリッククラス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はファイルのアップロードとダウンロードを実装します
問題の説明: Macを購入し、初めてMySQLをインストールしました。初期パスワードが分かりません。...
目次1. はじめに2. 出力情報の説明3. netstatの共通パラメータ4. netstatネット...
目次1. 環境整備2. イメージを実行する問題を解決するRedis のインストールNginx のイン...
主な違いは次のとおりです。 1. MySQL はデフォルトで MyISAM を使用します。 2. M...
1. MySQL WorkbenchをダウンロードするWorkbench は、MySQL のグラフィ...
1. 需要正しい Cookie 配信と SSO テストを確実に実行できるように、ローカル テスト ド...
<br />原文: http://jorux.com/archives/what-is-...
目次1. データベースとは何ですか? 2. データベースの分類は? 3. データベースとデータ構造の...
目次主キー制約ユニーク制約主キー制約PRIMARY KRY 主キーは一意です。テーブルには主キーを ...
目次1. システム環境2. 運用プロセスと途中で遭遇した問題1. システム環境1. Tencent ...
1. psshを確認してインストールします。yum list pssh 2. キーレスログインが設定...
この記事では、vue+echart を使って二重列チャートを実現するための具体的なコードを参考までに...
目次1. クロージャとは何ですか? 1.2 クロージャのメモ化: 関数は定義された環境を記憶する1....
目次1. DOM の違い2. 同じレイヤーの同じタイプの要素にキー属性を追加する3. キーはインデッ...
目次1. カスタムルーティング2. タブナビゲーション3. データの返却要約する1. カスタムルーテ...