【发布时间】:2014-03-24 20:03:29
【问题描述】:
如果我引用一个变量来防止 SQL 注入:
$safe_email = $db->quote($_POST['email']);
如果$_POST['email'] = abc@example.com
然后我会执行以下操作:
echo $safe_email;
我明白了:
"abc@example.com"
PHP Documentation 表示stripslashes 函数“取消引用带引号的字符串”。
但是,当我在引用的字符串上使用它时:
echo stripslashes($safe_email);
我仍然得到用引号打印出来的字符串
这里似乎有什么问题?它仍然用引号打印出来
【问题讨论】:
-
参数化查询:
$stmt = $dbh->prepare("INSERT INTO emails (email) VALUES (?)"); $stmt->execute(array($_POST['email']));Done. -
斜杠和引号不是一回事,为什么一个叫做“strip slashes”的函数会去掉引号?
-
这似乎是一个不幸的选择。这肯定不是你的
quote函数的反面。 -
如果使用 PDO 之类的东西来传递绑定参数,为什么还要担心呢?如果您愿意,您可以在装订前进行消毒。
-
不,这就是问题所在