当前位置:  开发笔记 > 编程语言 > 正文

针对XSS的常见防御措施有哪些?

如何解决《针对XSS的常见防御措施有哪些?》经验,为你挑选了2个好方法。

换句话说,现在最常用的消毒输入和/或输出技术是什么?工业(甚至只是个人使用)网站的人们用什么来解决这个问题?



1> PleaseStand..:

您应该参考优秀的OWASP网站,了解攻击(包括XSS)和防御攻击的摘要.这是我可以提出的最简单的解释,实际上可能比他们的网页更具可读性(但可能几乎没有完整).

    指定一个字符集.首先,确保您的网页在标题中或head元素的最开头指定UTF-8字符集HTML编码所有输入以防止在Internet Explorer(以及旧版本的Firefox)中进行UTF-7攻击,尽管有其他努力防止XSS.

    HTML转义.请记住,您需要HTML转义所有用户输入.这包括替换<<,>具有>,&具有&"".如果你将永远使用单引号的HTML属性,您需要更换''为好.典型的服务器端脚本语言(如PHP)提供了执行此操作的功能,我建议您通过创建标准函数来插入HTML元素,而不是以临时方式插入HTML元素.

    其他类型的逃逸.但是,您仍然需要小心,不要将用户输入作为不带引号的属性或解释为JavaScript的属性(例如onloadonmouseover)插入.显然,这也适用于script元素,除非输入是正确的JavaScript转义,这与HTML转义不同.另一种特殊类型的转义是URL参数的URL转义(在HTML转义之前执行此操作以在链接中正确包含参数).

    验证URL和CSS值.由于javascript:URL方案以及CSS样式表URL和style属性中的数据,链接和图像的URL(未经基于批准的前缀验证)也是如此.(Internet Explorer允许将JavaScript表达式作为CSS值插入,并且Firefox在XBL支持方面同样存在问题.)如果必须包含来自不受信任来源的CSS值,则应安全且严格地验证或CSS转义它.

    不允许用户提供的HTML.如果您有选项,请不要允许用户提供的HTML.这是一种最终导致XSS问题的简单方法,因此基于简单的正则表达式替换为您自己的标记语言编写"解析器".如果HTML输出是由一个真正的解析器以明显安全的方式生成的,将只允许使用格式化文本,该解析器使用标准转义函数从输入中转义任何文本并单独构建HTML元素.如果您对此无法选择,请使用AntiSamy等验证器/消毒剂.

    防止基于DOM的XSS.不要在JavaScript生成的HTML代码中包含用户输入并将其插入到文档中.相反,使用适当的DOM方法来确保将其作为文本处理,而不是HTML.

显然,我无法涵盖攻击者可以插入JavaScript代码的每一个案例.通常,使用HTTP的 cookie可能会使XSS攻击变得更加困难(但绝不会阻止它),并且为程序员提供安全培训至关重要.


我不明白这个答案是如何被选为最高的.它实际上没有提到最重要的部分:使用正确的跨站点请求防伪安全令牌,而不是响应GET进行任何修改.您可以在自己的网站上尽可能多地引用和逃脱; 这不会阻止某些其他网站包含重新使用您网站上用户现有登录Cookie的表单或恶意脚本.我认为重要的是指出这一点,因为问题本身是混淆的(主题是XSS;问题是引用.)
@JonWatte事情可以阻止CRSF,而不是XSS.这个问题是关于XSS的,请求伪造与XSS无关.

2> Jon Watte..:

XSS攻击有两种.一个是您的网站允许以某种方式注入HTML的地方.这并不难以防范:要么逃避所有用户输入数据,要么剥离所有<>标签并支持类似UBB代码的东西.注意:URL可能仍然会让您受到滚动式攻击.

更为阴险的是某些第三方网站包含点击您网站上的网址的IFRAME,SCRIPT或IMG标记等,此网址将使用用户当前对您网站的任何身份验证.因此,您永远不应该采取任何直接行动来回应GET请求.如果您收到尝试执行任何操作的GET请求(更新个人资料,查看购物车等),那么您应该回复一个表单,而该表单又需要接受POST.此表单还应包含跨站点请求伪造令牌,以便没有人可以在设置为使用隐藏字段提交到您的站点的第三方站点上放置表单(同样,以避免伪装攻击).

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有