Web Security 漏洞学习

XSS(跨站脚本攻击 cross-site scripting)

XSS的攻击方式就是想办法“教唆”用户的浏览器去执行一些这个网页中原本不存在的前端代码。
攻:获取当前域名下Cookie信息
防:Cookie增加Http-Only属性,只能用在网络请求中

CSRF(跨站请求伪造 cross-site request forgery)

浏览器目前都有同源策略

所谓浏览器同源策略,即:不允许浏览器访问跨域的Cookie,ajax请求跨域接口等。
也就是说,凡是访问与自己不在相同域的数据或接口时,浏览器都是不允许的。
另外,除了DOM,Cookie,XMLHttpRequest(AJAX本质上就是XMLHttpRequest)会受到同源策略的限制外,存储在浏览器中的数据,如LocalStorage和IndexedDB,以源进行分割。每个源都拥有自己单独的存储空间,一个源中的Javascript脚本不能对属于其它源的数据进行读写操作。

最常见的例子:对于前后端完全分离的Web项目,前端页面通过rest接口访问数据时,会出现如下问题:

  • 不允许发送POST请求:在发送POST请求之前会发送OPTIONS请求,HTTP响应状态码为403(Forbidden)。
  • 允许发送GET请求:HTTP响应状态码为200,但是不能读取服务器返回的数据。
那么如何做到CSRF呢?
  • <script>,<img>,<iframe>,<link>等标签都可以跨域加载资源,而不受同源策略的限制。
    这些带src属性的标签每次加载时,实际上是由浏览器发起了一次GET请求。

  • CORS(Cross-Origin Resource Sharing),Response Header中加入Access-Control-Allow-Origin

如何防护
  • 阻止不明外域的访问,进行同源检测,检测Request Header中的Referer或者Origin
  • 利用CSRF攻击只能使用Cookie而不能得到Cookie中内容的特点,在请求的参数中添加token。例如把Token中的一部分放到请求中,后端只需要进行对比,减少性能消耗。缺点是每一个请求包括能绕开跨域限制的请求需要都携带这个Token,增加前端服务工作量。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容