以下哪种方法可以更好地防止XSS攻击?

时间:2017-06-30 11:38:57

标签: c# encoding xss

我正在实施输入编码以防止XSS攻击,我几乎没有问题。

  1. 编码输入并将编码数据存储在数据库中是否更好?如果是这样,你如何处理整个项目中的字符串比较?你是否对字符串进行编码以进行比较?这似乎是一个不太好的"方法,因为我必须调整整个项目,未来的程序员每次比较两个字符串时都必须记住这一点。

  2. 我应该将输入直接输入数据库并对其进行编码以作出响应吗?这似乎是一种更好的方式,但我并不确定。这就是我在这里发帖的原因。另外,如果这是首选方式,是否有直接从数据库执行JavaScript的数据库管理应用程序(如phpMyAdmin等)?

  3. 这是我第一次这样做,所以我喜欢来自更有经验的开发者的一些见解。

1 个答案:

答案 0 :(得分:1)

我之前已经回答了很多次,但是2肯定是正确的做法,但让我们稍微调整一下。

在进入的过程中,您需要验证数据以确保数据根据域有效。例如,您可能想要禁止某些字符(或者更好的是,使用允许字符的白名单)。例如,没有理由允许某个人的姓名包括"<"。如果包含无效输入,我们拒绝该请求。 这可能会阻止一些攻击,但绝对不是全部攻击。

当我们将数据从一个上下文传输到另一个上下文时,我们会应用输出转义。我们希望确保数据保持数据。因此,当我们将数据插入SQL时,我们使用预准备语句,当我们想要将数据放入XML或HTML时,我们会编码。有不同的上下文,我们需要编码正确的上下文。参见OWASP XSS预防备忘单。

编码并将编码值存储在数据库中的麻烦是:

  1. 您不知道正确的编码。数据应该显示在HTML属性中,标记之间等吗?不同的上下文需要不同的编码。
  2. 如果编码功能错误怎么办,你错过了什么。如果您存储编码数据,则必须返回并修复所有错误编码的数据,而不是仅仅更新编码功能
  3. 如果您想在不需要编码的环境中显示数据(例如移动应用),该怎么办?然后它看起来很难看。
  4. 这些天我最喜欢的方法是使用像react这样的固定模板框架(也可以为你正确编码数据)。

相关问题