[解決済み] 文字列をエスケープするとはどういう意味ですか?
質問
を読んでいました。 SQLクエリに入る前に$_SESSION['username']をエスケープする必要がありますか? と書いてあり、「SQLクエリに渡す文字列は、その出所にかかわらず、すべてエスケープする必要があります"」と書いてありました。このようなことは、本当に基本的なことだとわかっています。Googleで検索すると、20,000件以上ヒットしました。Stackoverflowだけでも20ページはありましたが、文字列のエスケープとは何か、どうすればいいのかを実際に説明している人はいません。ただ、思い込んでいるだけなのです。あなたは私を助けることができますか?私はいつものようにPHPでWebアプリを作っているので、学びたいのです。
見てきました。 エスケープ文字を挿入する , Java のエスケープ文字にはどんなものがありますか? , addcslashes()で文字列をエスケープすることができない , エスケープ文字 , mysql_real_escape_string() は実際に何をするのですか? , php で文字列からダブルクォートをエスケープするにはどうすればよいですか? , MySQL_real_escape_string がスラッシュを追加しない? , php で文字列からエスケープシーケンスを除去する まだまだ続きますが、要点はご理解いただけたと思います。これは怠慢ではありません。
解決するには?
文字列のエスケープとは、その文字列で使用される引用符(およびその他の文字)の曖昧さを減らすことを意味します。例えば、文字列を定義する場合、通常は二重引用符か一重引用符のどちらかで囲みます。
"Hello World."
しかし、文字列の中に二重引用符があった場合はどうでしょうか?
"Hello "World.""
文字列がどこで終わるのか、インタプリタにはわからないのです。もし二重引用符を維持したければ、いくつかの選択肢があります。文字列をシングルクォートで囲むこともできます。
'Hello "World."'
または、引用符をエスケープすることもできますね。
"Hello \"World.\""
スラッシュが先行する引用文は エスケープ 文字列の値の一部であると理解される。
クエリに関して言えば、MySQL は特定のキーワードを監視しており、クエリで使用すると混乱を引き起こす可能性があります。例えば、値のテーブルがあり、カラムが "Select"という名前で、これを選択したいとします。
SELECT select FROM myTable
ここで、クエリに曖昧さが出てきました。このクエリでは、バックチックを使って曖昧さを減らすことができます。
SELECT `select` FROM myTable
これで、フィールド名の選択で誤った判断をしたために生じた混乱を解消することができます。
この多くは、単に値を
mysql_real_escape_string()
. 以下の例では、ユーザーが投稿したデータをこの関数に渡して、クエリに問題が生じないようにしていることがわかります。
// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
文字列をエスケープする方法は他にもあり、例えば
add_slashes
,
addcslashes
,
quotemeta
などがありますが、安全なクエリを実行することが目的である場合、開発者は全般的に
mysql_real_escape_string
または
pg_escape_string
(PostgreSQLの文脈で。
関連
-
[解決済み】Phpのincludeが機能しない? 関数がincludeされない
-
[解決済み】 libapache2-mod-php7 パッケージが見つからない。
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] ある文字列が特定の単語を含んでいるかどうかを確認するにはどうすればよいですか?
-
[解決済み] XML文書でエスケープする必要がある文字は何ですか?
-
[解決済み] razor viewエンジンでの@文字のエスケープ
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
-
[解決済み】XKCDコミック「Bobby Tables」のSQLインジェクションはどのように動作するのでしょうか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Weird PHP error: 'Can't use function return value in write context'.
-
[解決済み】mysqli_result クラスのオブジェクトを文字列に変換できない
-
[解決済み】「セッションキャッシュリミッターを送信できません - ヘッダーはすでに送信されています」【重複】。
-
[解決済み】 PHP 未定義関数の呼び出し
-
[解決済み】XAMPPのphpMyAdminで「設定にあるcontroluserの接続に失敗しました。
-
[解決済み】未定義のメソッド mysqli_stmt::get_result を呼び出す。
-
[解決済み】子テーマのCSSが親テーマをオーバーライドしない
-
[解決済み】phpMyAdmin: シークレットパスフレーズ?
-
[解決済み】chromeの「net : Failed to load resource: net::ERR_SPDY_PROTOCOL_ERROR" は何がおかしいのか?
-
[解決済み】警告: file_get_contents(): https:// ラッパーがサーバー構成ですべて無効になっています。