`
peterwanghao
  • 浏览: 124091 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

跨站点脚本攻击的危害

 
阅读更多

<!-- [if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:PunctuationKerning/> <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:SpaceForUL/> <w:BalanceSingleByteDoubleByteWidth/> <w:DoNotLeaveBackslashAlone/> <w:ULTrailSpace/> <w:DoNotExpandShiftReturn/> <w:AdjustLineHeightInTable/> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:UseFELayout/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!-- [if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--> <!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} --> <!-- [if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]-->

跨站点脚本攻击的原理很简单。应用程序会从一些不可信的来源获取数据(比如 HTTP 请求),并且对这些数据没有审查或者编码就整合到 web 页面中。这样攻击者就会利用这些漏洞向应用发送一些小的脚本片断,这些脚本可以在 HTML 网页里插入一些危险代码并且运行在受害者的浏览器里。最终,它允许攻击者在受害者的浏览器中运行一些脚本。 JavaScript 是一种功能强大的编程语言,使用 JavaScript 你可以写出很多复杂的应用程序,比如说窃取数据,窃取 Session Cookies ,窃取账号,窃取所有下载到浏览器中的资料。

跨站点脚本攻击的危害性是相当普遍的,大概 60% 70% 的网站都会有这样的问题。有些是很隐蔽的,有些是很容易发现的。但是它们有时可能不是最严重的问题。我的意思是,它们肯定很重要,但在影响力方面它们可能不是最严重的。比如访问控制问题、认证问题等也许在影响力方面比它更高,但无需置疑的,跨站点脚本攻击是应用安全中最普遍的问题。

当你在一个 web 应用上进行认证时,输入你的用户名和密码。应用程序会对你进行身份认证,认证通过后会为你颁发一个 Session Cookie ——它就象一个临时的邮戳,你可以使用它进入系统。而这时假设攻击者能够发动跨站点脚本攻击并且实际控制了你的浏览器,攻击者就能窃取到这个临时的邮戳,他就变成了你,他可以做你能做的任何事情。而另一方面更为严重的情况是他们可以注入所谓的 跨站脚本代理 到您的浏览器,代替你去访问应用。攻击者实际上将你的浏览器作为代理去访问互联网。通过你的浏览器发送请求去访问那些信任你的站点。他们代替你作为可信的访问者去访问那些站点而你可能却一无所知。

跨站点脚本攻击的根本原因是在数据输入到页面之前没有进行验证和做适当的输出编码。在实际应用中在任何时候从 HTTP 请求中得到任何的东西,像一个参数,或者一个标题或者一个 Cookie ,你都需要自动地去验证它。可以把这样的操作定义为白名单验证法。它并不是仅仅验证几个有问题的字符,而是如果你假定这是一个邮政编码的话就去检查是否真的是一个邮政编码。这种方法类似于在这里放一个正则表达式或者是一个事先定义好的正确清单,然后进行比对。同时可以使用一个翻译器做你认为适当的输出编码,对于 HTML 语言来说意味着要使用类似所谓的 “HTML 编码实体 ,对一些特定的符号进行编码转换。

你应该对一切你不能确定安全的特殊字符进行编码,对于不是数字和字母的字符在进入浏览器之前都需要编码。不要只定义三个或四个黑名单字符,这样做是很危险的,因为攻击者知道如何绕过这些东西。

白名单验证法意味着在你的网站或应用程序中指定能出现哪些内容,而不是去寻找已知的那些攻击方式,看起来更像是用一种战略方式去建立你的应用程序。黑名单方法意味着你需要不断地更新黑名单,不断地增加新的字符去防范新的攻击技术。而使用白名单方法你可以一劳永逸。例如你定义这是一个区号——它只有 6 位数字。那你就永远不用去改变这一定义,它可以更长期有效的做好安全模型验证。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics