【发布时间】:2018-01-15 23:42:34
【问题描述】:
抱歉,如果之前有人问过这个问题 - 但在这种情况下,我觉得那里的信息过多,而不是太少。我所看到的任何地方似乎也存在相互矛盾的意见。 任何澄清将不胜感激。
我有一个用户注册表单。我已经验证了不同的字段,但我没有对数据使用任何清理功能(例如 htmlspecialchars),因为我读到 here 最好将其保留到输出(例如在用户配置文件中)。我正在使用 PDO 准备好的语句来插入我的数据,所以据我所知,我在那里是安全的。
但是,在通过各种漏洞扫描程序运行我的域后,他们报告说我的注册表单非常不安全 - 并且可能成为 XSS 攻击的受害者。我相信导致这种情况的代码的sn-p如下:
<input type="text" placeholder="Username" name="user" maxlength="32" value="<?php echo test_input($user); ?>" pattern="^[a-zA-Z0-9]*$" required>
我将用户的输入回显到表单中,以防他们在另一个字段中出现错误,以便在更正后重新提交。因此,可能会在页面中回显可能有害的脚本。
但是,这肯定只是来自特定用户的输入吗?他们可能造成的唯一伤害是对自己吗?是扫描仪弄错了还是我基本上没有意识到风险?
我有用于一般字符串、电子邮件地址、URL 的字段。我应该采取哪些措施来确保访问我网站的访问者的安全?
非常感谢您能给我的任何帮助/澄清!
编辑
function test_input($data)
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data, ENT_QUOTES | ENT_HTML5, 'UTF-8');
return $data;
}
【问题讨论】:
-
test_input()是做什么的? -
对不起,这是我现在添加的防止危险脚本运行的功能。我会将它添加到原始帖子中。基本上我的问题是在这个阶段是否有必要,或者如果我只是返回用户输入的内容?感谢您指出这一点。