网络安全检测|网络安全服务|网络安全扫描-香港墨客投资移动版

主页 > 业界资讯 > ddos防御

王文君:XSS检测防范技术与实例研究(2)

  狙击枪与冲锋枪,如果一个一个拦截用狙击枪太慢了,我们迫切需要冲锋枪,OWASP提供了一个工具叫做WebScrab,我们提交任何一个请求都被大家拦截到,你可以选择一个Fuzz Sources脚本,它提供一个默认的脚本,很多字符串可以浏览一下,自己也可以增删改,如果你选择对字段选择文本的话,就意味着对这个字段,如果文本有64个字段,如果手工做的话,就会累死,但是我们是机器,所以是冲锋枪,就可以标记所有的运行,如果有跨站攻击有可能的漏洞,就有一些侯选,我们就可以分享一下。

  半自动检测,谷歌伟大工程师创造了Ratproxy工具,开启并作为浏览器代理,打开网页尽情浏览,可以分析日志。这个图是Ratproxy的分析日志,比如说我这里我们到XSS candidates,这是任何一个工具都不可避免的叫做误报,误报的话,提供candidates,还得用人脑子靠一下,主要看它的代码后四位是不是运行,然后进行维修。

  全自动检测,分两部分:静态检测和动态检测。

  静态检测有两个例子,OWASP开发了Lapse、HP Fortify Sca,程序不需要运行,只需要存储一些代码就可以运行来达到检测的目的。

  动态检测有两个例子:W3af和HP Web Inspect,他们都是这方面的佼佼者。

  这里是OWASP LAPSE的截图,我们开发的时候如果源头可以定义一些很仔细的规范,定这些规范可以去遵循,如果不小心不那么规范怎么办可以利用OWASP LAPSE达到这个目的,然后拉来分析。

  静态动态检测的优缺点,静态检测的有点可以直接分析源代码,通过语义匹配达到目的。可以与每日构建(Daily Build)完美结合,能把Developer可以在IDE上直接使用,但是有很多缺点,许多类型漏洞检测不出,比如权限认证,业务规则,静态检测怎么能检测出来?除非定一些很麻烦的规则,但是你又不一定得不偿失,权限控制。不能发现配置方面的问题,新它们不在代码里。存在着大量的误报(False Positive),我们到医院如果做乙肝检测,最怕是某某阳性,阳性心里不踏实。如果是“假的”就是误报,误报和漏报特别容易混淆,特别是英文。

  动态检测可以快速发现权限认证,权限控制以及配置方面的问题,比如输入名不对了,就让你进不去。每次运行的结果可以作为下次运行的基准线,执行成本比较低。但是也有一些缺点,需要一个学习曲线(如何配置、分析结果)、对于业务逻辑的安全漏洞无能为力,扫描发现的结果通常还是需要人工确认。

  这是我心目中的方案,不知道对不对,每日开发的时候,及早发现问题,每日构建有一些静态检测工具检测,进入稳定阶段。纵深防御一步一步的防御,我起一个好听的名字叫做“纵深测试”。

  我讲了一些类型和方式,我们如何防范它呢?作为开发者来讲所有的输入皆为恶。防范跨站攻击最主要途径有两个,对输入进行验证或者对输出进行编码。

  对输入验证

  验证一定要在服务器端,客户端验证是没用的。我们采用白名单而非黑名单,白名单比黑名单安全性高一点。采用OWASP AntiSamy进行输入过滤,它主要是采用了白名单,允许输入属性。

  对输出进行编码

  处处编码主要有五种,Html Content java script Attribute CSS URL

  有这么多编码,

  一个字符串:<img>

  在URL中的编码:%3Cimg%3E

  在Javascript中的编码:\x3Cimg\x3E

  同一个东西,同一个字符串在不同的表现形式有不同的编码。

  We have ESAPI提供了另外一种方式,它有很多不同目前方式,我这里主要推荐的是encode javascript,所以它是海纳百川,它可以提供自己的一些方式。

  我引用一句话作为本次演讲的结尾,美国著名的黑人领袖马丁路德金的话,我改写的是“我有一个梦想,股票永远不跌,房价永远不涨,我有一个梦想所有的肇事司机有错就要认,不管你的爸爸是李逵还是李刚,我有一个梦想,经过在座的搞安全的努力,所有的跨站攻击以后都无路可走,无处可藏。”

(责任编辑:admin)