Dropbox的Web安全防护战略之一:根据内容安全战略(CSP)的陈述和过滤机制
Dropbox的Web安全防护办法之一是运用依据内容的安全策略(CSP)。Dropbox的安全工程师Devdatta Akhawe通过四篇文章,介绍了CSP在Dropbox中推广的细节和经历。Dropbox的CSP准则大大减少了XSS和内容注入进犯。不过,大规模运用比较苛刻的CSP规矩将面对许多应战。咱们期望通过这四篇CSP系列文章,将Dropbox在实践CSP过程中的收成共享给广阔开发社区朋友。榜首篇文章首要介绍如安在规矩中设置报表挑选管线来符号过错;第二篇介绍Dropbox如安在上述规矩中装备随机数及缓解unsafe-inline带来的安全危险;第三篇介绍怎么下降unsafe-eval形成的危险,以及介绍Dropbox所开发的开源补丁;最终一篇介绍在权限别离机制下,怎么减小第三方软件整合时的危险。本篇是该系列文章的榜首篇,首要评论CSP的陈述和过滤机制。
Dropbox一直坚定地遵循着Content Security Policy(CSP)。假如读者对CSP规矩还不了解,咱们主张先阅览Mike West的《Excellent Introduction to CSP》。简略来说,CSP的中心是一种说明性的机制,它在网页运用中将牢靠的内容源(脚本、目标、图画的源等)增加至白名单中。
运用CSP约束了内容源,然后下降了网页运用中注入进犯的危险。下面的比方展现了在对Dropbox主页宣布恳求时所运用的CSP中的script-src指令。
指令列出了一切可信赖的URI(包括浏览器支撑的完好途径),通过这些URI能够载入所需的脚本代码。当支撑CSP的网页浏览器检测到了脚本标签,它接下来会查看src特点,并和script-src指令供给的白名单进行对照。假如脚根源不在白名单中(比方,HTML注入缝隙的原因),浏览器就会阻挠恳求。
CSP过错陈述过滤器
现在,杂乱的网页运用辨认和履行CSP标头是一个比较困难的问题,不过有一个CSP答应的小技巧能够处理这个问题,这便是report-only形式。report-only形式的要害办法是,答应网页测验规矩在给制定者选定的终端发送过错陈述时的影响。比方说,能够设置一项内容为script-src ‘none’的report-only规矩,用来获取一切脚本来历的方位。
report-only形式大大增强了CSP的可行性:首先在report-only形式下重复迭代设定的规矩,直到没有过错陈述,之后转换为履行形式。这一过程往往是CSP进入履行形式前,主张施行的榜首步准备工作。在笔者最近参与的一次研讨会中,安全机制专家组侧重介绍了CSP的report-only形式怎么能够有用地推广CSP的运用,它能够做到某一项规矩在运用前就能够评价其作用。
为了取得对已施行规矩的有用反应信息,CSP的陈述功用不可或缺。Dropbox在转换到CSP的“堵塞”形式前,从前运用report-only形式长达数月。但在开端大规模运用CSP时,便遇到了榜首个问题:陈述中的噪声(sheer noise)会使得默许陈述机制失效。
咱们发现,最大的噪声源是浏览器扩展东西。扩展东西在网页中刺进了脚本或其他程序或许修正了HTML,由于CSP会阻挠网页上运转的一切不知道内容,因而注入到网页中的内容很或许也会被浏览器阻挠。假如咱们仅仅把一切收到的陈述参加日志中,那么日志也会包括以上过错。又由于咱们无法控制扩展东西,所以也就没有办法做到陈述中不增加扩展东西带来的过错信息。
通过一年的CSP大规模运用实践,Dropbox现已完成了一个准确调整的过滤机制,它能够疏忽一般的误报。咱们的陈述管线挑选掉误报的陈述内容,然后才将有用的陈述参加剖析处理后台。本着推广CSP的精力,Dropbox将这个过滤器技能共享出来,期望其他开发者能够运用。咱们强烈主张读者阅览Neil Matatall这篇介绍精准CSP列表的文章,实际上咱们运用的列表也参阅了文章中触及的技能。
初看起来,挑选过错陈述好像有些古怪,为什么不想知道广告刺进和网页垃圾什么时候修正了网页运用呢?可是在这里,咱们评论的是CSP的预运用阶段,首要关注点是CSP的内容白名单不会使网页运用溃散。滤除陈述中的噪声,确保了CSP履行时对网页运用进行合理的修正。一旦转换到CSP履行形式,浏览器将依据过滤后的陈述进行阻挠操作。
过滤器是两层结构。榜首层过滤依据被阻挠的URI。
_ignored_blockedURI_schemas = [ "http:",# We never use HTTP content so not a legit report "mxaddon-pkg",# maxthon addon packages "jar:",# firefox addons "file:",#we never insert file URIs into the page "tmtbff://",# ticketmaster toolbar? "safari",# safari extensions "chrome",# stuff like chromenull: chrome:// chrome-extension:// "webviewprogressproxy:",# added by browsers in webviews "mbinit:",# MapBuilder "symres:",# Norton "resource", ];假如被阻挠的URI以列表中任何一项最初,则疏忽。第二层过滤依据被阻挠URI的主体部分。
_ignored_blockedURI_hosts=[ "tlscdn", ".superfish.com", "addons.mozilla.org", "v.zilionfast.in", "widgets.amung.us", "xls.searchfun.in", "static.image2play.com", "localhost", "127.0.0.1", "guzzlepraxiscommune", "tfxiq", "akamaihd.net", #Dropbox doesn't use Akamai CDN "apollocdn", "worldssl.net", "shwcdn.net", "cmptch.com", "datafastguru.info", "eshopcomp.com", "hwcdn.net", ][1] [2] 黑客接单网