SQL 盲注、SQL 注入、跨站点脚本编制可能解决方案

SQL 盲注、SQL 注入、跨站点脚本编制可能解决方案_第1张图片跨站       3.点脚本编制

详细信息

有多种减轻威胁的技巧:

[1] 策略:库或框架

使用不允许此弱点出现的经过审核的库或框架,或提供更容易避免此弱点的构造。

可用于更轻松生成正确编码的输出的库和框架示例包括 Microsoft 的 Anti-XSS 库、OWASP ESAPI 编码模块和 Apache Wicket。

[2] 了解将在其中使用数据的上下文,以及预期的编码。在不同组件之间传输数据时,或在生成可同时包含多个编码的输出(如 Web 页面或多部分邮件消息)时,这尤为重要。研究所有预期的通信协议和数据表示法以确定所需的编码策略。对于将输出到另一个 Web 页面的任何数据(尤其是从外部输入接收到的任何数据),请对所有非字母数字字符使用恰当的编码。

相同输出文档的某些部分可能需要不同的编码,具体取决于输出是在以下哪一项中:

[-] HTML 主体

[-] 元素属性(如 src="XYZ")

[-] URI

[-] JavaScript 段

[-] 级联样式表和样式属性

请注意,“HTML 实体编码”仅适用于 HTML 主体。

请咨询 XSS Prevention Cheat Sheet

http://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

以获取有关所需编码和转义类型的更多详细信息。

[3] 策略:识别和减少攻击出现的机会

了解您的软件中可能出现不可信输入的所有潜在区域:参数或自变量、cookie、从网络读取的任何内容、环境变量、反向 DNS 查找、查询结果、请求头、URL 组成部分、电子邮件、文件、文件名、数据库以及向应用程序提供数据的任何外部系统。请记住,此类输入可通过 API 调用间接获取。

[4] 策略:输出编码

对于生成的每个 Web 页面,请使用并指定 ISO-8859-1 或 UTF-8 之类的字符编码。如果未指定编码,Web 浏览器可能通过猜测 Web 页面实际使用的编码来选择不同的编码。这可能导致 Web 浏览器将特定序列视为特殊序列,从而使客户机暴露在不易察觉的 XSS 攻击之下。请参阅 CWE-116 以获取与编码/转义相关的更多减轻威胁的方法。

[5] 策略:识别和减少攻击出现的机会

要帮助减轻针对用户会话 cookie 的 XSS 攻击带来的威胁,请将会话 cookie 设置为 HttpOnly。在支持 HttpOnly 功能的浏览器(如 Internet Explorer 和 Firefox 的较新版本)中,此属性可防止使用 document.cookie 的恶意客户机端脚本访问用户的会话 cookie。这不是完整的解决方案,因为 HttpOnly 并不受所有浏览器支持。更重要的是,XMLHTTPRequest 和其他功能强大的浏览器技术提供了对 HTTP 头的读访问权,包括在其中设置 HttpOnly 标志的 Set-Cookie 头。

[6] 策略:输入验证假定所有输入都是恶意的。使用“接受已知善意”输入验证策略:严格遵守规范的可接受输入的白名单。拒绝任何没有严格遵守规范的输入,或者将其转换为遵守规范的内容。不要完全依赖于将恶意或格式错误的输入加入黑名单。但是,黑名单可帮助检测潜在攻击,或者确定哪些输入格式不正确,以致应当将其彻底拒绝。

执行输入验证时,请考虑所有潜在相关属性,包括长度、输入类型、可接受值的完整范围、缺失或多余输入、语法、跨相关字段的一致性以及业务规则一致性。以业务规则逻辑为例,“boat”可能在语法上有效,因为它仅包含字母数字字符,但如果预期为颜色(如“red”或“blue”),那么它无效。

动态构造 Web 页面时,请使用严格的白名单以根据请求中参数的预期值来限制字符集。所有输入都应进行验证和清理,不仅限于用户应指定的参数,而是涉及请求中的所有数据,包括隐藏字段、cookie、头、URL 本身,等等。导致 XSS 脆弱性持续存在的一个常见错误是仅验证预期会由站点重新显示的字段。常见的情况是,在请求中出现由应用程序服务器或应用程序反射的其他数据,而开发团队却未能预料到此情况。另外,将来的开发者可能会使用当前未反映的字段。因此,建议验证 HTTP 请求的所有部分。请注意,适当的输出编码、转义和引用是防止 XSS 的最有效解决方案,虽然输入验证可能会提供一定的深度防御。输入验证会有效限制将在输出中出现的内容。它并不总是能够防止 XSS,尤其是在您需要支持可包含任意字符的自由格式文本字段的情况下。例如,在聊天应用程序中,心型表情图标(“<3”)可能会通过验证步骤,因为它的使用频率很高。但是,不能将其直接插入到 Web 页面中,因为它包含“<”字符,该字符需要转义或以其他方式进行处理。在此情况下,消除“<”可能会降低 XSS 的风险,但是这会产生不正确的行为,因为这样就不会记录表情图标。

这可能看起来只是略有不便,但在需要表示不等式的数学论坛中,这种情况就更为重要。即使在验证中出错(例如,在 100 个输入字段中忘记一个字段),相应的编码仍有可能针对基于注入的攻击为您提供防护。只要输入验证不是孤立完成的,便仍是有用的技巧,因为它可以大大减少攻击出现的机会,使您能够检测某些攻击,并提供正确编码所无法解决的其他安全性优势。请确保在应用程序内定义良好的界面中执行输入验证。即使某个组件进行了复用或移动到其他位置,这也将有助于保护应用程序。



你可能感兴趣的:(SQL 盲注、SQL 注入、跨站点脚本编制可能解决方案)