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

推薦する

Linux で pip 操作中にタイムアウトが発生する問題を解決する方法

Linuxインスタンスでpipを使用する際のタイムアウト問題を解決する方法pip は最も人気のある ...

MySQL の Like の概念と使用法の説明

Like は中国語で「好き」を意味しますが、MySQL データベースに適用される場合、Like は、...

ウェブサイトのユーザビリティとコンバージョン率を向上させる 25 のツール

ウェブサイトの場合、ユーザビリティとは、ユーザーが必要な情報を効果的に見つけたり、タスクを完了したり...

HTML+CSS3+JSで実装されたドロップダウンメニュー

成果を達成する html <div class="コンテナ"> &l...

dockerでPostgreSQLを実行する方法

1. Dockerをインストールします。参考URL: Docker 入門インストールチュートリアル ...

Windows SSHサーバーを簡単に構築するためのいくつかの手順

ここで言及されている SSH は Security Shell と呼ばれます。Linux をよく使用...

Linuxコマンドとファイル検索の詳しい説明

1. ファイル名検索を実行するwhich ('実行可能ファイル' を検索) //PA...

DockerでRedashの中国語版をデプロイしてインストールする方法の詳細な説明

1. インストール手順 Linux 環境でのローカル インストールと比較すると、Docker のイン...

CSS と JavaScript を使用して管理ダッシュボードのレイアウトを構築するためのサンプル コード

あなたが作成するものこの新しいチュートリアルでは、CSS と JavaScript を使用して、レス...

Viteは仮想ファイルの実装を導入します

目次背景仮想ファイルのインポート例書類タイプスクリプトのサポート要約する背景新しいプロジェクトで v...

Maven で tomcat8-maven-plugin プラグインを使用する詳細なチュートリアル

オンラインで多くの記事を検索しましたが、解決策は見つかりませんでした。次のように、tomcat7-m...

Vmvare 仮想マシンを使用して Ubuntu のルート ディレクトリをパーティション分割する方法の紹介

目次序文根拠手順1. CDから仮想マシンを起動する2. GPartedツールを使用してパーティション...

Dockerで同じIDを持つ2つのイメージを削除する

今日 Docker コンテナを作成したとき、誤ってイメージの名前を間違って入力しました。その結果、コ...

Docker Compose ワンクリック ELK デプロイ方式の実装

インストールFilebeat は、より軽量でより安全なため、Logstash-Forwarder に...

mysql の not equal to null と equal to null の書き方の詳細説明

1. テーブル構造 2. 表データ 3. クエリのteacher_nameフィールドは空にすることは...