内部変数をエスケープする必要があるのでしょうか。データベース自体から来て、ユーザー入力です。それは単にパフォーマンスの浪費ですか、より安全ですか?MySQL - 変数をエスケープする必要があるときとそうでないときは?
ありがとうございます!
内部変数をエスケープする必要があるのでしょうか。データベース自体から来て、ユーザー入力です。それは単にパフォーマンスの浪費ですか、より安全ですか?MySQL - 変数をエスケープする必要があるときとそうでないときは?
ありがとうございます!
すべてのユーザー入力をエスケープする必要があります。これにはサーバー変数なども含まれます。値がデータベースから引き出され、ユーザー入力によって決して触られない場合、文字列連結によって渡されたときにその照会を中断する文字が含まれていない限り、照会で再使用するときにエスケープする必要はありません。
例えば、私はPHPの変数$name
に、データベースから名前O'Brien
を引き出した後、このように戻ってそれを置くために別の文の試行で:私が持っているよう
$query = "INSERT INTO table (id, name) VALUES (123, '$name');";
これは、クエリを中断しますO'Brienの'
を逃れられませんでした。
あなたはそれを心配する必要はありません。データベース内の値に予約されている名前があれば、解釈されないので重要ではありません。
SQLインジェクションについて心配する必要があります。実行するステートメントは、ユーザー入力エスケープシングルクォートやその他の文字からデータを挿入、削除、選択、または更新する必要があります。通常のユーザーであっても、悪意を持っていなくても、一重引用符を使用するとエラーが発生します。
ユーザーは次のようにユーザー名を使用している場合:
joe'; drop table users; --
あなたはトラブルにあってもよいです。
希望すると便利です。
必須の参照:http://xkcd.com/327/ –
もちろん..これは標準的な回答でなければなりません! –
あなたはユーザー入力であるかどうかを意味しますか? –