为了防止 XSS,每当您输出回用户输入时(就像您在显示输入错误或使用先前提交的值重新绘制表单时所做的那样),您确实需要转义 html。这是肯定的...
所以,做类似的事情
echo "the name which was supplied as {$_GET['company_name']} is not accepted"
是不对的。
相反,我们会这样做。
echo "the name which was supplied as " . htmlspecialchars($_GET['company_name']) . " is not accepted"
考虑到这一点,我的问题来了;当 $_GET['company_name'] 需要显示在它开始的文本框中时,你会怎么做?也许您希望您的用户更正该 company_name 只是因为它太长了?
如果您要使用 htmlspecialchars,并且如果 company_name 是 AT&T,则 & 将转义并显示为 & amp; 不是吗?
那么我们该如何应对这种情况呢?当然,有人可能会说,那就不要htmlspecialchar了,直接返回就行了?
但随后有人可能会向我们发送一个精心设计的 company_name,以阻止文本框启动 javascript onclick 并从那里执行 XSS。
在这些情况下,您如何处理 htmlescape?只需使用 history.go(-1)?