我正在实施输入编码以防止XSS攻击,我几乎没有问题。
编码输入并将编码数据存储在数据库中是否更好?如果是这样,你如何处理整个项目中的字符串比较?你是否对字符串进行编码以进行比较?这似乎是一个不太好的"方法,因为我必须调整整个项目,未来的程序员每次比较两个字符串时都必须记住这一点。
我应该将输入直接输入数据库并对其进行编码以作出响应吗?这似乎是一种更好的方式,但我并不确定。这就是我在这里发帖的原因。另外,如果这是首选方式,是否有直接从数据库执行JavaScript的数据库管理应用程序(如phpMyAdmin等)?
这是我第一次这样做,所以我喜欢来自更有经验的开发者的一些见解。
答案 0 :(得分:1)
我之前已经回答了很多次,但是2肯定是正确的做法,但让我们稍微调整一下。
在进入的过程中,您需要验证数据以确保数据根据域有效。例如,您可能想要禁止某些字符(或者更好的是,使用允许字符的白名单)。例如,没有理由允许某个人的姓名包括"<"。如果包含无效输入,我们拒绝该请求。 这可能会阻止一些攻击,但绝对不是全部攻击。
当我们将数据从一个上下文传输到另一个上下文时,我们会应用输出转义。我们希望确保数据保持数据。因此,当我们将数据插入SQL时,我们使用预准备语句,当我们想要将数据放入XML或HTML时,我们会编码。有不同的上下文,我们需要编码正确的上下文。参见OWASP XSS预防备忘单。
编码并将编码值存储在数据库中的麻烦是:
这些天我最喜欢的方法是使用像react这样的固定模板框架(也可以为你正确编码数据)。