跨站点脚本攻击的危害

<!-- /* 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;} -->

 

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

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

peterwanghao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值