我的网站上有一个带注释字段的表单。如果有人进入,例如:
"What" is 'up'?>
进入注释字段,它使用PDO预处理语句插入到mysql中,随后出现在数据库中,如下所示:
\"what\" is \'up\'?>
然后,当我从数据库中取出数据时,我使用:
$comment=htmlspecialchars($row['comment']);
但是当我使用“echo $ comment”将其输出到页面时,它会输出到页面:
\"what\" is \'up\'?>
htmlspecialchars不应该删除那些斜杠吗?
FWIW,在转换为PDO之前,我曾经在插入之前使用mysqli_real_escape_string()
,然后在显示之前使用htmlspecialchars()
。
插入代码:
$comment=$_POST['comment'];
$stmt = $pdo->prepare("INSERT into details (firstname, lastname, comment) values (:firstname, :lastname, :comment)");
$stmt->execute([':firstname' => $firstname, ':lastname' => $lastname, ':comment' => $comment]);
答案 0 :(得分:0)
您的数据库应包含正确的数据:
"what" is 'up'?>
如果它包含垃圾:
\"what\" is \'up\'?>
然后很多事情都会破裂,比如全文搜索,排序,基本上任何操纵文本的东西。你甚至不能使用LENGTH()或SUBSTRING()!所以这必须尽快修复。
插入/更新值的代码部分出了问题。
好狩猎。这很难解决。
此外,当你在它时,检查你的编码。谁知道,当有人输入“é”时,可能会插入“é”! (这也打破了SQL UPPER(),LOWER(),SQL排序,LIKE搜索,基本上没什么用。)
我的地址包含'和'é。有时当我收到在线订单时...是的,我收到的信封上印有“\”和“é”。这就是你知道网店使用php的方式!
现在,一旦您的数据库包含正确的数据,您的用户就无法阻止他们在论坛帖子中输入此内容:
<script type="text/javascript"> StealAllYourCookies(); </script>
因此,这就是为什么在将内容输出到html时使用htmlspecialchars()的原因。