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 | 同じ値を持つフィールドを更新すると、binlog に記録されます

1. はじめに数日前、開発仲間から、フィールドを同じ値に更新すると binlog が記録されるかどう...

JavaScriptの基礎を学ぶ

目次1. JavaScriptを記述する場所2. JavaScriptでよく使われる入力文と出力文1...

LNMP を展開して HTTPS サービスを有効にする方法に関するチュートリアル

LNMP とは: Linux+Nginx+Mysql+(php-fpm、php-mysql)つまり、...

JavaScript で簡単なモグラ叩きゲームを実装する

この記事では、モグラ叩きゲームを実装するためのJavaScriptの具体的なコードを参考までに紹介し...

MySQL シーケンス AUTO_INCREMENT の詳細な説明とサンプルコード

MySQL シーケンス AUTO_INCREMENT の詳細な説明とサンプルコードMySQL シーケ...

Docker で最初のアプリケーションをデプロイする方法

前回の記事では、Docker Desktop をインストールし、Kubernetes を有効にしまし...

mysql ビュー関数の分析と使用例

この記事では、例を使用して MySQL ビューの機能と使用方法を説明します。ご参考までに、詳細は以下...

Nginx http を https にアップグレードする手順を完了する

httpとhttpsの違いは一部のウェブサイトでは、http を開くと、安全ではないというメッセージ...

Dockerの高可用性構成の詳細な説明

Docker の作成Docker Compose は、管理対象コンテナをプロジェクト、サービス、コン...

MySQL の WriteSet 並列レプリケーションの簡単な分析

【歴史的背景】私は 3 年間 MySQL-DBA として働いてきましたが、MySQL が「基本的に利...

Vue での ElementUI の使用に関する詳細な説明

ログイン + セッションストレージエフェクト表示ログインに成功すると、ユーザー ID がフロントエン...

HTML で入力テキスト入力キャッシュのクリアを禁止する 2 つの方法

ほとんどのブラウザはデフォルトで入力値をキャッシュし、ctl+F5 を使用して強制的に更新することに...

MYSQL8.0.13 無料インストール版 設定チュートリアル例 詳細説明

1. ダウンロード、例として8.0を取り上げますダウンロードアドレス: https://dev.my...

Docker イメージ管理の一般的な操作コード例

ミラーリングも Docker のコアコンポーネントの 1 つです。ミラーリングはコンテナ操作の基盤で...

MySQL における Decimal 型と Float Double 型の違い (詳細説明)

MySQL には、10 進数などの標準データ型だけでなく、float や double などの非標...