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

推薦する

Dockerイメージの作成、保存、読み込み方法

イメージを作成する方法は 3 つあります。既存のイメージに基づいてコンテナを作成する、ローカル テン...

Dockerfile テキストファイルの使用例の分析

Dockerfile は、イメージをビルドするために使用されるテキスト ファイルです。テキスト コン...

DevUI で独自の Angular コンポーネント ライブラリを構築する方法

目次序文コンポーネントライブラリの作成主要な構成の変更ディレクトリレイアウトの調整ライブラリ構築のた...

MySQL 結合テーブルと ID 自動増分の例の分析

結合の書き方左結合を使用する場合、左側のテーブルが必ず駆動テーブルになりますか? 2 つのテーブルの...

docker run 起動パラメータ コマンドを表示する方法 (推奨)

runlike を使用してコンテナの docker run 起動パラメータを表示します。 pipを...

Dockerコンテナを使用してホストネットワークにアクセスする方法

最近、nginx をリバース プロキシとして使用し、docker で nginx を実行するシステム...

Nginx 設定場所のマッチング優先順位の簡単な分析

序文Nginx 構成のサーバー ブロック内の場所は、リクエスト URI を一致させるために使用され、...

Nginx ルーティング転送とリバースプロキシロケーション構成の実装

Nginx を設定する 3 つの方法最初の方法は、位置一致部分を直接置き換える。 2 番目の pro...

Vueはページキャッシュ機能を実装する

この記事の例では、ページキャッシュ機能を実装するためのVueの具体的なコードを参考までに共有していま...

CentOS 8にJenkinsをインストールする方法

CentOS 8 に Jenkins をインストールするには、root アカウントまたは sudo ...

NavicatでMySqlスケジュールタスクを作成する方法の詳細な説明

Navicat で MySql スケジュールタスクを作成する詳細な説明イベントは、MySQL が特定...

Mysql の一時テーブルとパーティションテーブルの違いの詳細な説明

一時テーブルとメモリテーブルメモリ テーブルとは、メモリ エンジンを使用するテーブルを指します。テー...

MySQLをインストールして設定し、ルートパスワードを変更する方法

1. インストールapt-get install mysql-server にはアカウントとパスワー...

詳細なハードウェア情報を取得するための Linux のいくつかのコマンドの詳細な説明

Linux システム、特にサーバー システムでは、デバイスのハードウェア情報を表示する必要がよくあり...

docker を使用してコード サーバーをデプロイする方法

画像をプルする # docker pull codercom/code-server # Docke...