SQL インジェクション脆弱性プロセスの例と解決策

SQL インジェクション脆弱性プロセスの例と解決策

コード例:

パブリッククラス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 を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • PHP で SQL インジェクションを防ぐための最善のソリューション
  • PHP 開発における一般的なセキュリティ問題 (SQL インジェクション、CSRF、Xss、CC など) の詳細な説明と解決策。
  • T-SQL: SQLインジェクションを防ぐ方法
  • ASP+MSSQL2000 データベースのバッチインジェクションのソリューション
  • MySQL プロキシ (インジェクションを解決する別の方法)
  • MySQL での SQL インジェクションを解決するための代替方法の詳細な説明
  • SQL インジェクションの原則とソリューションコードの例
  • ibatis で SQL インジェクション問題を解決する
  • SQL Server データベース インジェクション ソリューション
  • SQL インジェクションとその解決方法

<<:  Ubuntu 20.04 に Python 3 仮想環境をインストールする詳細なチュートリアル

>>:  Vueはファイルのアップロードとダウンロードを実装します

推薦する

MySQL の日付フォーマットと複雑な日付範囲クエリ

目次序文クエリの使用シナリオ例時間間隔クエリクエリ日付と今日の時間の比較データ一般的なサイクルタイム...

CSSアニメーションに基づくSVGボタンのサンプルコード

具体的なコードは次のとおりです。 <a href="#"> <...

MySQL スロークエリログの基本的な使い方チュートリアル

スロークエリログ関連のパラメータMySQL スロー クエリ関連のパラメータの説明: slow_que...

ECMAscript の新機能の紹介

目次1. 関数パラメータのデフォルト値1.1 関数パラメータのデフォルト値の指定1.2 分離割り当て...

10分で始めるCSS3アニメーション

導入アニメーションを使用すると、JavaScript や jQuery に依存せずに、純粋な CSS...

Linux mysql5.5 を mysql5.7 にアップグレードする手順と落とし穴

目次Linux MySQL 5.5 が MySQL 5.7 にアップグレードされました1. mysq...

JavaScript でイベントのバブリングを防ぐ方法

注意すべき点は、イベントバブリング自体の特性上、メリットだけでなくデメリットも生じるということです。...

CSS変数を使用してダークモードを実装するためのサンプルコード

最近、WeChatはAppleによってダークモードの開発を強制されました。ますます多くのウェブサイト...

MySql 5.7.17 winx64 のインストールと設定に関する詳細なチュートリアル

1. ソフトウェアをダウンロードする1. MySQL の公式サイトにアクセスし、Oracle アカウ...

IE環境では、divの高さはフォントの高さよりも大きくなければならないと規定されています。

コードをコピーコードは次のとおりです。 <div class="content&qu...

MySQLクエリ速度を最適化する方法

前の章では、高性能な MySQL に不可欠な、最適化されたデータ型の選択方法とインデックスの効率的な...

MySQL で 1000 万件のレコードをすばやくクエリする方法

目次通常のページングクエリ最適化する方法大きなオフセット使用ID制限大量データ問題の最適化通常のペー...

React+TS を使用したシンプルな Jira プロジェクトを実装するためのベスト プラクティス

トレーニングのための一連のプロジェクト反応+ts内容は少ないですが、フックのカプセル化、ts ジェネ...

Nginx は rtmp ライブ サーバーの実装コードを構築します

1. nginxソースディレクトリに新しいrtmpディレクトリを作成し、git clone http...