コード例: パブリッククラス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はファイルのアップロードとダウンロードを実装します
目次序文クエリの使用シナリオ例時間間隔クエリクエリ日付と今日の時間の比較データ一般的なサイクルタイム...
具体的なコードは次のとおりです。 <a href="#"> <...
スロークエリログ関連のパラメータMySQL スロー クエリ関連のパラメータの説明: slow_que...
目次1. 関数パラメータのデフォルト値1.1 関数パラメータのデフォルト値の指定1.2 分離割り当て...
MQTT プロトコルMQTT (Message Queuing Telemetry Transpo...
導入アニメーションを使用すると、JavaScript や jQuery に依存せずに、純粋な CSS...
目次Linux MySQL 5.5 が MySQL 5.7 にアップグレードされました1. mysq...
注意すべき点は、イベントバブリング自体の特性上、メリットだけでなくデメリットも生じるということです。...
最近、WeChatはAppleによってダークモードの開発を強制されました。ますます多くのウェブサイト...
1. ソフトウェアをダウンロードする1. MySQL の公式サイトにアクセスし、Oracle アカウ...
コードをコピーコードは次のとおりです。 <div class="content&qu...
前の章では、高性能な MySQL に不可欠な、最適化されたデータ型の選択方法とインデックスの効率的な...
目次通常のページングクエリ最適化する方法大きなオフセット使用ID制限大量データ問題の最適化通常のペー...
トレーニングのための一連のプロジェクト反応+ts内容は少ないですが、フックのカプセル化、ts ジェネ...
1. nginxソースディレクトリに新しいrtmpディレクトリを作成し、git clone http...