コード例: パブリッククラス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はファイルのアップロードとダウンロードを実装します
公式ドキュメント: https://nginx.org/en/linux_packages.html...
序文私は less/sass を書くことに慣れていますが、小さなプログラムを開発するときには、まだ ...
01. VMware Workstation Pro 15 のダウンロードダウンロード: VMwa...
必要なファイルをインストールする Yum インストール openssl-* -yデータベースインデッ...
ライフサイクル分類vue の各コンポーネントは独立しており、各コンポーネントには独自のライフサイクル...
目次TOKEN タイマーリフレッシュ2. access_tokenの内部設計2.1 access_t...
典型的なレイアウト例上の写真のように、正方形の真ん中に一定の隙間があり、その隙間は固定されています。...
app.js: スタートアップファイル、またはエントリファイルpackage.json: プロジェク...
まずmysqlを削除します: sudo apt-get remove mysql-*残ったデータをク...
システムバージョン [root@ ~]# cat /etc/redhat-release CentO...
display:flex、justify-content: space-betweend を設定する...
この記事では、Windows プラットフォームで ogg プログラムを監視する方法を紹介します。 (...
目次1. はじめに1. 基本レイアウト2. 写真を自動的に切り替える3. コンテンツを追加する4. ...
環境: 1 CentOS Linux リリース 7.5.1804 (コア)ファイアウォールと sel...
目次序文問題: 大きなファイルのコピーNodeJS のストリームとバッファバッファストリーム解決策 ...