我让用户使用此代码更新他们的姓名。
$dbh = connect();
$q = $dbh->prepare('UPDATE Users SET username=:name WHERE User_ID=:id LIMIT 1');
$q->bindParam(":id", $loggedInUser->user_id, PDO::PARAM_INT);
$q->bindParam(":name", $_GET['name'], PDO::PARAM_STR);
$q->execute();
A)这足以净化信息吗?
b) 当我把 HTML 标签放在那里时<b>name</b>
它实际上在我的网站上以粗体显示!是否有一个选项可以让 PDO 删除所有 HTML?
看起来相当合理。不过,我建议使用 POST 而不是 GET 来进行破坏性/操纵操作。如果您坚持使用 POST 数据,那么您遭受 CSRF 攻击的可能性就会小得多,尽管这并不能让您完全免疫。
如果您实际上并不希望用户在名称字段中输入 HTML,则不必担心在进入数据库的过程中过滤数据。在出去的路上逃脱它htmlspecialchars()
or htmlentities()
.
我一直坚持这样的观点:数据应该尽可能原始地存入数据库。
Edit:差点忘了,确保预期值$_GET
/ $_POST
在尝试使用它们之前实际上已经存在,例如
if (isset($_POST['name'])) {
// now use it
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)