XSS/XSRF

1、XSSjavascript

1.1 xss的含义php

跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。html

XSS攻击一般指的是经过利用网页开发时留下的漏洞,经过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序一般是JavaScript,但实际上也能够包括JavaVBScriptActiveXFlash或者甚至是普通的HTML。攻击成功后,攻击者可能获得更高的权限(如执行一些操做)、私密网页内容、会话cookie等各类内容。java

为了防止这些攻击,您应该始终检查用户发送到您的服务器的数据(若是须要显示它),请尽可能不显示用户提供的HTML内容。 Intead,您应该处理用户提供的数据,以便不会逐字显示。几乎全部市场上的框架都实现了一个最小的过滤器,从任何用户发送的数据中删除HTML <script>,<iframe>和<object>元素。这有助于减轻风险,但不必定根除它。node

1.2 经常使用的XSS攻击手段和目的有:web

  • 盗用cookie,获取敏感信息。
  • 利用植入Flash,经过crossdomain权限设置进一步获取更高权限;或者利用Java等获得相似的操做。
  • 利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动做,或执行一些通常的如发微博、加好友、发私信等操做。
  • 利用可被攻击的域受到其余域信任的特色,以受信任来源的身份请求一些平时不容许的操做,如进行不当的投票活动。
  • 在访问量极大的一些页面上的XSS能够攻击一些小型网站,实现DDoS攻击的效果。

1.3 漏洞的防护和利用

1.31 过滤特殊字符
避免XSS的方法之一主要是将用户所提供的内容进行过滤,许多语言都有提供对HTML的过滤:
PHP的htmlentities()或是htmlspecialchars()。
Python的cgi.escape()。
ASP的Server.HTMLEncode()。
ASP.NET的Server.HtmlEncode()或功能更强的Microsoft Anti-Cross Site Scripting Library
Java的xssprotect (Open Source Library)。
Node.js的node-validator。浏览器


1.32 使用HTTP头指定类型
不少时候可使用HTTP头指定内容的类型,使得输出的内容避免被做为HTML解析。如在PHP语言中使用如下代码:
<?php
   header('Content-Type: text/javascript; charset=utf-8');
?>
便可强行指定输出内容为文本/JavaScript脚本(顺便指定了内容编码),而非能够引起攻击的HTML。安全


1.33 用户方面
包括Internet Explorer、Mozilla Firefox在内的大多数浏览器皆有关闭JavaScript的选项,但关闭功能并不是是最好的方法,由于许多网站都须要使用JavaScript语言才能正常运做。一般来讲,一个常常有安全更新推出的浏览器,在使用上会比好久都没有更新的浏览器更为安全。服务器

 

2、 XSRFcookie

2.1 XSRF的含义

跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,一般缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登陆的Web应用程序上执行非本意的操做的攻击方法。

跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。

跨站请求攻击,简单地说,是攻击者经过一些技术手段欺骗用户的浏览器去访问一个本身曾经认证过的网站并执行一些操做(如发邮件,发消息,甚至财产操做如转帐和购买商品)。因为浏览器曾经认证过,因此被访问的网站会认为是真正的用户操做而去执行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求自己是用户自愿发出的

2.2 防护措施

2.21 检查Referer字段

HTTP头中有一个Referer字段,这个字段用以标明请求来源于哪一个地址。在处理敏感数据请求时,一般来讲,Referer字段应和请求的地址位于同一域名下。以上文银行操做为例,Referer字段地址一般应该是转帐按钮所在的网页地址,应该也位于www.examplebank.com之下。而若是是CSRF攻击传来的请求,Referer字段会是包含恶意网址的地址,不会位于www.examplebank.com之下,这时候服务器就能识别出恶意的访问。
这种办法简单易行,工做量低,仅须要在关键访问处增长一步校验。但这种办法也有其局限性,因其彻底依赖浏览器发送正确的Referer字段。虽然http协议对此字段的内容有明确的规定,但并没有法保证来访的浏览器的具体实现,亦没法保证浏览器没有安全漏洞影响到此字段。而且也存在攻击者攻击某些浏览器,篡改其Referer字段的可能。
2.22 添加校验token
因为CSRF的本质在于攻击者欺骗用户去访问本身设置的地址,因此若是要求在访问敏感数据请求时,要求用户浏览器提供不保存在cookie中,而且攻击者没法伪造的数据做为校验,那么攻击者就没法再执行CSRF攻击。这种数据一般是表单中的一个数据项。服务器将其生成并附加在表单中,其内容是一个伪乱数。当客户端经过表单提交请求时,这个伪乱数也一并提交上去以供校验。正常的访问时,客户端浏览器可以正确获得并传回这个伪乱数,而经过CSRF传来的欺骗性攻击中,攻击者无从事先得知这个伪乱数的值,服务器端就会由于校验token的值为空或者错误,拒绝这个可疑请求。

参考资料:

https://zh.wikipedia.org/wiki/%E8%B7%A8%E7%B6%B2%E7%AB%99%E6%8C%87%E4%BB%A4%E7%A2%BC

https://zh.wikipedia.org/wiki/%E8%B7%A8%E7%AB%99%E8%AF%B7%E6%B1%82%E4%BC%AA%E9%80%A0

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息