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の分離レベルとロックメカニズムの詳細な説明

目次簡単な説明: 1. 取引の4つの特徴2. 複数の同時トランザクションによって発生する問題3. ト...

個人ブログシステムを構築するためのDockerの超シンプルな実装

Dockerをインストールするyumパッケージを最新バージョンに更新します: sudo yum up...

JavaScript WebAPI、DOM、イベント、操作要素例の詳しい説明

目次ウェブAPI DOM DOMツリーDOM要素取得方法ドキュメントオブジェクトのプロパティイベント...

MySQL交換パーティションの詳細な例

MySQL交換パーティションの詳細な例序文exchange パーティションを紹介する前に、まず my...

ウェブページのカラーマッチングにおけるオーバーラップとソフトカラーマッチングの手法を詳しく説明

この記事には、細かい点は一切なく、カラーマッチングのテクニックをシェアするだけです。とてもシンプルで...

ネイティブ js はカスタム スクロール バー コンポーネントを実装します

この記事の例では、カスタムスクロールバーコンポーネントを実装するためのjsの具体的なコードを参考まで...

CentOS 7 で RPM を使用して mysql5.7.13 をインストールする

0. 環境この記事のオペレーティング システム: CentOS 7.2.1511 x86_64 My...

インターフェーステストプラットフォームを構築するためのDjango+Vue+Dockerの詳細な説明

1. 冒頭の2つの単語みなさんこんにちは。私の名前はLin Zonglinです。私はテストエンジニア...

CSS で TikTok テキスト揺れエフェクトを実装する例

日々の開発において、フロントエンドの学生はアニメーションやデザインについてよく議論します。デザイナー...

MySQL ページングの制限パラメータの簡単な例

Mysqlページングの2つのパラメータ ユーザー制限 1,2 から * を選択 1 は検索する最初の...

MySQL テーブルと列のコメントの概要

コードと同様に、テーブルや列にコメントを追加して、他のユーザーがその機能を理解できるようにすることが...

docker ベースの mariadb のインストール構成プロセスの分析

1. インストール dockerhub を通じてインストールする mariadb のバージョンを検索...

vue3 のさまざまな構文形式を比較したサンプルコード

デフォルトのテンプレートメソッドはvue2に似ており、コンポーネント内のセットアップ関数を使用します...

CSS3 フィルター属性の使い方の紹介

1. はじめにフロントエンドページのアニメーション効果を記述する場合、filter 属性は多かれ少な...

kubernetes1.5.2 から kubernetes1.10 にアップグレードする際の主要な設定変更記録

この記事では、kubernetes1.5.2 から kubernetes1.10 にアップグレードす...