コード例: パブリッククラス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. BIOSを確認するまず、コンピュータの起動モードを確認します。win+R と入力し、msinf...
この記事では、シャトルボックス機能を実現するためのjQueryの具体的なコードを参考までに紹介します...
最近、Vue のソースコードを勉強していて、Vue で親コンポーネントと子コンポーネント間でデータを...
MySQL でレコードを更新すると、構文は正しいのですが、レコードが更新されません...質問文実行前...
開発においては、一覧から詳細ページにジャンプし、また詳細ページに戻る際に一覧ページの状態(スクロール...
現象の説明:プロジェクトでは、Springboot を使用して Web プロジェクトを開始します。起...
目次必要:ドライブ:アイデア:成し遂げる:個人的には、実際の開発ではストアド プロシージャの使用はお...
職業的な観点からも、人生の観点からも、良い再建をすることは本当に簡単ではありません。楽観的で熱心で前...
序文フロントエンドページを書くとき、小さなアイコンなどの画像を使うことが多いです。画像を使うとコード...
2級コンピュータ試験のMySQL知識ポイントの基礎、一般的なMYSQLコマンドは次のとおりです。よく...
GitLabのDocker使用法gitlab ドッカー起動コマンド docker run -d -p...
データベースのパフォーマンスに関する話面接では、「データベースにどのくらい精通していますか?」など、...
方法1: SET PASSWORDコマンドを使用するまずMySQLにログインします。フォーマット: ...
MySQL 5.7.17、現在最新バージョンのようです、ダウンロードアドレスここで、プラットフォーム...
色のコントラストと調和対照的な状況では、色の相互作用は単一の色によって与えられる感覚とは異なります。...