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での位置計算を徹底的に理解するのに役立つ記事

推薦する

CentOS7 上で KVM 仮想化プラットフォームを構築する (3 つの方法)

KVM はカーネルベースの仮想マシンの略で、Linux をハイパーバイザーに変換する Linux ...

MySQLクエリの文字セットの不一致の問題を解決する方法

問題を見つける最近、仕事で問題が発生しました。MySQL データベースにテーブルを作成するときに、ラ...

Vue codemirrorはオンラインコードコンパイラの効果を実現します

序文Web 上でオンライン コード コンパイルの効果を実現したい場合は、 CodeMirrorを再度...

図を使ってWeb2.0とは何かを説明する

最近はWeb2.0という言葉をよく耳にしますが、Web2.0とは何でしょうか? Web 1.0 とど...

Dockerはクロスプラットフォーム機能を実現するためにnet5プログラムを導入

展開環境: ここでは docker コンテナ、Linux システム、VmWare 仮想マシンが使用さ...

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

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

JavaScriptのプロトタイプオブジェクトを徹底的に理解しましょう

目次1. プロトタイプとは何ですか? 1.1 関数プロトタイプオブジェクト1.2 コンストラクタを使...

GTK ツリービューの原理と使用法の分析

GtkTreeView コンポーネントは、美しい通常のリストやツリーのようなリストを作成できる高度な...

QTとJavaScript間のインタラクティブデータの実装

1. QTからJSへのデータフロー1. QTはJS関数を呼び出し、JSはパラメータを通じてQTの値を...

MySQLのトランザクション管理操作の詳細な説明

この記事では、MySQL のトランザクション管理操作について説明します。ご参考までに、詳細は以下の通...

Ubuntu16.04にCUDA9.0をインストールするための詳細なチュートリアル

序文:この記事は、CUDA 9.0 をインストールした経験に基づいています。CUDA 9.0 は現在...

Windows での MySQL 5.7.10 のインストールと設定のチュートリアル

MySQL は、ユーザーごとに 2 つの異なるバージョンを提供します。 MySQL コミュニティ サ...

Navicatは機能ソリューション共有を作成できません

初めて MySQL FUNCTION を書いたとき、エラーが何度も発生しました。 Err] 1064...

docker デプロイメントの実装手順 lnmp-wordpress

目次1. 実験環境2. Dockerソースをインストールする3. Dockerをインストールする4....

ウェブデザインで注意すべき検索最適化の知識

1. 新サイトホームページのリンクレイアウト1. リンク配置の位置:リンク配置の位置によって、リンク...