MySQL における ${param} と #{param} の違い

MySQL における ${param} と #{param} の違い

${param}によって渡されるパラメータは、テーブル名やフィールド名を渡すなど、SQL文の一部として扱われます。

例: (渡される値は id です)

${param} で並べ替え

解析された SQL は次のとおりです。

IDで並べ替え

#{parm} 渡されたデータは文字列として扱われ、自動的に渡されたデータに二重引用符が追加されます

例: (渡される値は id です)

name = #{param} のテーブルから * を選択します

解析された SQL は次のとおりです。

name = "id" のテーブルから * を選択します

セキュリティ上の理由から、可能な限り # を使用してパラメータを渡すと、SQL インジェクション攻撃を効果的に防ぐことができます。

SQLインジェクション入門

私は直接 Baidu の例を見に行きましたが、一目で分かりました。

特定の Web サイトのログイン検証用の SQL クエリ コードは次のとおりです。

strSQL = "SELECT * FROM users WHERE (name = '" + userName + "') and (pw = '"+ passWord + "');"

悪意のある侵入
userName = "1' OR '1'='1";與passWord = "1' OR '1'='1";の場合、元のSQL文字列は次のように入力されます。
strSQL = "SELECT * FROM users WHERE (name = '1' OR '1'='1') and (pw = '1' OR '1'='1');
つまり、実際に実行される SQL コマンドは次のようになりますstrSQL = "SELECT * FROM users; "

これにより、バックグラウンド アカウント認証中の検証が巧妙にバイパスされ、ユーザーはアカウントやパスワードなしで Web サイトにログインできるようになります。そのため、SQL インジェクション攻撃は一般にハッカーの空欄補充ゲームとして知られています。

これで、MySQL の ${param} と #{param} の違いに関するこの記事は終了です。MySQL の ${param} と #{param} の違いについての詳細は、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Mybatis での動的 SQL における ## と $$ の違い
  • Mybatis の # と $ の違いと SQL インジェクションを防ぐ方法について簡単に説明します。

<<:  VMware仮想マシンの起動時に黒い画面が表示される問題を解決する

>>:  jsでの位置計算を徹底的に理解するのに役立つ記事

推薦する

MySQL複合インデックスの詳細な研究

複合インデックス (結合インデックスとも呼ばれます) は、複数の列に対して作成されるインデックスです...

MySQL で CURRENT_TIMESTAMP を使用する方法

目次CURRENT_TIMESTAMPの使用CURRENT_TIMESTAMPを使用したタイムスタン...

MySQL 8.0.21 無料インストール版 設定方法 グラフィックチュートリアル

MySQLをインストールする6つの手順(インストールパッケージのみがインストール場所を選択できます)...

純粋な CSS で「テキストオーバーフローの切り捨てと省略」を実装するいくつかの方法

私たちの日常的な開発作業では、テキストのオーバーフロー、切り捨て、省略は、考慮する必要がある非常に一...

Linux環境変数ファイルの簡単な紹介

Linux システムでは、環境変数は適用範囲に応じて、システムレベルの環境変数とユーザーレベルの環境...

CSS で 2 列レイアウトを実現する N 通りの方法

1. 2 列レイアウトとは何ですか? 2 列レイアウトには、左側が固定幅で右側が適応幅のレイアウトと...

Dockerデータを完全にクリーンアップする方法

目次定期的に剪定するミラーエビクションコンテナのクリーンアップネットワークソート体積の蒸発完全にクリ...

Docker で Node プロジェクトをビルドしてデプロイする方法

目次DockerとはクライアントサイドDocker基本的なDocker操作画像名画像をプルするその他...

MySQLのさまざまなロックに関する詳細な理解

目次ロックの概要ロックの分類データベース操作の粒度データ操作の種類MySQL ロックさまざまなストレ...

CSS 表示テーブルの適応的な高さと幅の問題の解決策

定義と使用法display プロパティは、要素が生成するボックスのタイプを指定します。例示するこの属...

Nginx 1つのドメイン名で複数のプロジェクトにアクセスする方法の例

背景最近、複数のプロジェクトを展開する際に、1 つのドメイン名で複数のプロジェクトにアクセスする方法...

JavaScriptの信頼性の低い未定義

undefined JavaScript では、値が undefined かどうかを判断したい場合は...

Linux で PHP を 5.6 にアップグレードする実用的な方法

1: ターミナルに入ったらPHPのバージョンを確認する php -v出力は次のようになります。 PH...

Dockerfileを使用してApacheイメージを作成する方法

目次1. Dockerイメージ2. 既存のイメージに基づいてインスタンスを作成する3. ローカルテン...

HTML における iFrame タグの 2 つの使用法

最近、私は「ぶどうコレクション」というプロジェクトに取り組んでいます。簡単に言うと、Budou ペー...