データベースにアポストロフィを含む可能性のあるユーザー入力を挿入する業界標準とは何ですか?そのような入力はウェブページ上のユーザに表示される。たとえば、ユーザーは「I'm cool」というフィールドを更新します。私はこの機能を自分のデータベースに挿入:データベースにアポストロフィを使用して値を格納する
public function updateDatabase($value) {
$value = mysql_real_escape_string($value);
Database::instance()->query(
'UPDATE myTable
SET myColumn = ' . $value . '
WHERE foo = "bar"'
);
}
データベースは現在、「私は\ 'クールメートル」を格納します。適切かつ安全に戻ってすべてのユーザーに、この値を表示するには、私はこの機能でそれをきれいにする必要があります:
public function toSafeDisplay($userGeneratedValue) {
return stripslashes(
htmlentities(
$userGeneratedValue
)
);
}
私の関心は、私は、Webページに表示したいすべてのものの上にstripslashesとhtmlentitiesをやって非常にプロセッサになるということですインテンシブ。 StackOverflowの一般的なコンセンサスは、データを可能な限り生のままにするために、データベースに挿入する前にhtmlentities
を実行しないことです。これにより、後でウェブサイトだけでなく、どの媒体にでも表示することができます。だから我々は表示時にhtmlentities
をすることを余儀なくされている。これはstripslashes
でも当てはまりますか?または、SQLインジェクション攻撃を導入せずにデータベースを更新する前に、アポストロフィの前にあるすべてのスラッシュを削除することは可能ですか?
いえば、SQLでバインド変数を使用してください。 – Thilo
「バインド変数」が何を意味するのか分かりません。 Googleの結果は、文章の問題ではなく、変数を特定のスコープにバインドするというバインディングを表しています。あなたは例を挙げることができますか? – JoJo
このような参照:http://docs.php.net/pdo.prepared-statements –