唯一の方法は、ユーザーが送信したデータを適切にエスケープすることです。他の人はそうするいくつかの方法を指摘しました。
別の方法があります:準備されたステートメント およびプレースホルダー。プリペアドステートメントは、すべての modern でサポートされています mysqli
を含むPHPデータベースインターフェース および
PDOをデモンストレーションとして使用してみましょう。テーブルfoo
のデータを少し更新したいとします。 ユーザーによって送信されました。
$sql = 'UPDATE foo SET bar = ? WHERE user_id = ?';
$sh = $db->prepare($sql);
$sh->execute(array( $_POST['bar'], $_SESSION['user_id'] ));
execute
に渡される配列内の変数 クエリ内の疑問符のプレースホルダーを置き換えます。これが発生すると、自動的にエスケープされて引用されます 。データベースに安全に配置するために、手動でエスケープする必要はありません!
一方、HTML、Javascript、数字が必要な文字など、予期しないコンテンツをフィルタリングする必要があります。データベースにデータを安全に挿入できるようにすることは、戦いの半分だけ 。