以下哪种方式可以更好地防止 XSS 攻击?
Which of the following ways works better to prevent XSS attacks?
我正在实施输入编码以防止 XSS 攻击,我有几个问题。
对输入进行编码并将编码后的数据存储在数据库中是否更好?如果是这样,你如何处理整个项目中的字符串比较?您是否也对要比较的字符串进行编码?这似乎是一种 "not so good" 方法,因为我必须调整整个项目,并且未来的程序员每次比较两个字符串时都必须记住这一点。
我是否应该将输入直接放入数据库并对其进行编码以作为响应?这似乎是一种更好的方法,但我不太确定。这就是为什么我 post 在这里。另外,如果这是首选方式,是否有任何数据库管理应用程序(如 phpMyAdmin 等)直接从数据库执行 JavaScript?
这是我第一次这样做,所以我希望从更有经验的开发人员那里得到一些见解。
这个我已经回答过很多次了,但是2肯定是正确的做法,但是让我们稍微调整一下。
在进入的路上,您想要验证您的数据以确保数据根据域是有效的。例如,您可能想要禁止某些字符(或者更好的是,使用允许字符的白名单)。例如,没有理由允许一个人的名字包含“<”。如果包含无效输入,我们将拒绝该请求。
这可能会阻止一些攻击,但绝对不是所有攻击。
当我们将数据从一个上下文传输到另一个上下文时,我们应用输出转义。我们要确保数据保持数据不变。因此,当我们将数据插入 SQL 时,我们使用准备语句,当我们想将数据放入 XML 或 HTML 时,我们对它们进行编码。有不同的上下文,我们需要针对正确的上下文进行编码。请参阅 OWASP XSS 预防作弊 sheet.
编码并将编码值存储在数据库中的麻烦是:
- 您不知道正确的编码。数据是否应该显示在 HTML 属性中,标签之间等?不同的上下文需要不同的编码。
- 如果编码函数有误,你漏掉了什么怎么办。如果你存储编码数据,你必须返回并修复所有错误编码的数据,而不是仅仅更新编码函数
- 如果您想在不需要编码的环境(例如移动应用程序)中显示数据,该怎么办?那就难看了
这些天我的首选方法是使用可靠的模板框架,例如 React(它还可以为您正确编码数据)。
我正在实施输入编码以防止 XSS 攻击,我有几个问题。
对输入进行编码并将编码后的数据存储在数据库中是否更好?如果是这样,你如何处理整个项目中的字符串比较?您是否也对要比较的字符串进行编码?这似乎是一种 "not so good" 方法,因为我必须调整整个项目,并且未来的程序员每次比较两个字符串时都必须记住这一点。
我是否应该将输入直接放入数据库并对其进行编码以作为响应?这似乎是一种更好的方法,但我不太确定。这就是为什么我 post 在这里。另外,如果这是首选方式,是否有任何数据库管理应用程序(如 phpMyAdmin 等)直接从数据库执行 JavaScript?
这是我第一次这样做,所以我希望从更有经验的开发人员那里得到一些见解。
这个我已经回答过很多次了,但是2肯定是正确的做法,但是让我们稍微调整一下。
在进入的路上,您想要验证您的数据以确保数据根据域是有效的。例如,您可能想要禁止某些字符(或者更好的是,使用允许字符的白名单)。例如,没有理由允许一个人的名字包含“<”。如果包含无效输入,我们将拒绝该请求。 这可能会阻止一些攻击,但绝对不是所有攻击。
当我们将数据从一个上下文传输到另一个上下文时,我们应用输出转义。我们要确保数据保持数据不变。因此,当我们将数据插入 SQL 时,我们使用准备语句,当我们想将数据放入 XML 或 HTML 时,我们对它们进行编码。有不同的上下文,我们需要针对正确的上下文进行编码。请参阅 OWASP XSS 预防作弊 sheet.
编码并将编码值存储在数据库中的麻烦是:
- 您不知道正确的编码。数据是否应该显示在 HTML 属性中,标签之间等?不同的上下文需要不同的编码。
- 如果编码函数有误,你漏掉了什么怎么办。如果你存储编码数据,你必须返回并修复所有错误编码的数据,而不是仅仅更新编码函数
- 如果您想在不需要编码的环境(例如移动应用程序)中显示数据,该怎么办?那就难看了
这些天我的首选方法是使用可靠的模板框架,例如 React(它还可以为您正确编码数据)。