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はファイルのアップロードとダウンロードを実装します

推薦する

MAC で MySQL の初期パスワードを変更する方法

問題の説明: Macを購入し、初めてMySQLをインストールしました。初期パスワードが分かりません。...

Linux の netstat コマンドの詳細な紹介

目次1. はじめに2. 出力情報の説明3. netstatの共通パラメータ4. netstatネット...

フロントエンドとバックエンド分離プロジェクトのDockerデプロイメントの実装例

目次1. 環境整備2. イメージを実行する問題を解決するRedis のインストールNginx のイン...

MyISAMとInnoDBの違いについてお話しましょう

主な違いは次のとおりです。 1. MySQL はデフォルトで MyISAM を使用します。 2. M...

MySQL Workbenchのダウンロードと使用方法のチュートリアルの詳細な説明

1. MySQL WorkbenchをダウンロードするWorkbench は、MySQL のグラフィ...

Nginx を使用してクロスドメイン Vue 開発環境を処理する方法

1. 需要正しい Cookie 配信と SSO テストを確実に実行できるように、ローカル テスト ド...

MySQLデータベースについて学びましょう

目次1. データベースとは何ですか? 2. データベースの分類は? 3. データベースとデータ構造の...

MYSQLの主キー制約とユニーク制約の違いについて簡単に説明します。

目次主キー制約ユニーク制約主キー制約PRIMARY KRY 主キーは一意です。テーブルには主キーを ...

Linux システム Docker への ASP.NET Core アプリケーションのデプロイのプロセス分析

目次1. システム環境2. 運用プロセスと途中で遭遇した問題1. システム環境1. Tencent ...

CentOS 6.5 の設定 ssh キーフリーログインで pssh コマンドを実行する方法の説明

1. psshを確認してインストールします。yum list pssh 2. キーレスログインが設定...

Vue+echart で 2 列チャートを実現

この記事では、vue+echart を使って二重列チャートを実現するための具体的なコードを参考までに...

JavaScript クロージャの説明

目次1. クロージャとは何ですか? 1.2 クロージャのメモ化: 関数は定義された環境を記憶する1....

Vue における v-for のキーの一意性の詳細な説明

目次1. DOM の違い2. 同じレイヤーの同じタイプの要素にキー属性を追加する3. キーはインデッ...

React Nativeのカスタムルーティング管理に関する深い理解

目次1. カスタムルーティング2. タブナビゲーション3. データの返却要約する1. カスタムルーテ...