Back to Browse

WebGoat - A3 SQL Injection (mitigation)

47 views
Oct 9, 2024
0:56

(p2) 防御 XSS 的基本原则是对任何不受信任的输入进行输出编码。將來这种方法可能会有所改变,但目前它仍然是我们最好的防御手段。而且……上下文很重要。 关于“不受信任的输入”,如果不能确认是可信任的,就将一切(即使是你在数据库中填充的数据)都视为不受信任的。有时数据在多个系统之间共享,而你认为是自己/团队创建的数据可能并非如此。 什么时候/在哪里? 在数据发送到浏览器时进行编码(而不是在你的持久化数据中)。对于单页应用程序(SPA),你需要在客户端进行编码 怎么做? * 在 HTML 正文中编码为 HTML 实体 * 在 HTML 属性中编码为 HTML 实体 * 如果将用户输入输出到 JavaScript 中,为 JavaScript 进行编码 不要试图通过黑名单过滤字符串(例如 script 等)来防御。 (P3) 什么是编码? 不信任用户输入意味着在数据通过信任边界时,例如从网页表单到应用脚本时,需要对数据的类型、长度、格式和范围进行验证,然后在重新显示到动态页面之前对其进行编码。 在实践中,这意味着你需要审查网站上每一个需要处理的用户输入,并确保在将任何从客户端接受的值返回给用户之前,对其进行检查、过滤和编码。 客户端验证不可靠,但可以通过服务器端把用户输入限制在最小的字母数字集范围内,然后再由 web 应用程序以任何方式使用这些数据。 转义 转义意味着你将数据的关键字符转换(或标记),以防止它们在危险的上下文中被解释。对于 HTML 输出,你需要转换 尖括号(以及其他字符),以防止恶意代码被渲染。转义这些字符涉及将它们转换为实体等价物 < 和 >,这样浏览器就不会将它们解释为 HTML 标签。 特殊字符 需要在重新显示之前对其进行编码。例如,对尖括号进行编码可以确保浏览器显示 script 而不执行它。编码的同时,你的网页还必须始终定义其字符集,这样浏览器就不会将来自其他字符集的特殊字符编码误解释为其他内容。通过设置 meta 标签中的 charset 属性来定义字符集。通常,这个标签放在 HTML 文档的 head 部分 跨站脚本攻击通常发生在你成功地将脚本(通常是 JavaScript)偷偷放到别人的网站上,并在该网站上恶意运行时。 相关的 XML/HTML 特殊字符 (p4) XSS 防护资源Java OWASP Encoder,如果你正在开发 Java Web 应用程序并且需要防御 XSS 攻击,可以使用它。通用 XSS 防护备忘单。DOM XSS 防护备忘单。XSS 过滤器规避。JavaScript 框架特定细节 如果你使用类似于以下内容的代码,请注意:$selector.html(userInputHere),你就有危险了。如果你想使用这种方式,确保你做的是类似于以下的操作:$selector.html(someEncodeHtmlMethod(userInputHere)),要先对userInputHere进行编码。Angular 默认情况下会尝试进行转义,但其表达语言已被证明存在 "沙盒" 绕过问题。最好检查你所使用版本的详细信息。

Download

0 formats

No download links available.

WebGoat - A3 SQL Injection (mitigation) | NatokHD