rails安全,CSRF和注入攻击(XSS,SQL注入)

Web安全在web开发中占有相当重要的地位,今天介绍下关于web安全方面的问题(CSRF,和注入攻击),以及rails是如何实现来防止这些攻击的。

首先介绍下什么是CSRF?中文名称:跨站请求伪造

  • 简介:

    跨站请求伪造的工作原理是,通过在页面中包含恶意代码或链接,访问已验证用户才能访问的 Web 应用。如果该 Web 应用的会话未超时,攻击者就能执行未经授权的操作。

  • 原理:

    大多数应用都使用基于 cookie 的会话。它们或者把会话 ID 储存在 cookie 中并在服务器端储存会话散列,或者把整个会话散列储存在客户端。不管是哪种情况,只要浏览器能够找到某个域名对应的 cookie,就会自动在发送请求时包含该 cookie。有争议的是,即便请求来源于另一个域名上的网站,浏览器在发送请求时也会包含客户端的 cookie。

  • 举例:

我们在本地分别起两个服务(修改/etc/hosts 将两个域名指向本地,然后通过nginx反向代理),来演示1. www.mubiao.com 为我们要攻击的网站,2. www.hacker.com 为我们自己的网站。假设我们已经猜测出目标网站的某些可用的url,比如:

1
2
http://www.mubiao.com/orders.html
http://www.mubiao.com/ancient/articles

然后我们在自己的网站上做一些陷阱,在某个页面加入

1
2
3
4
5
6
7
8
9
<img src='http://www.mubiao.com/orders.html' >
<a href="#" onclick="
var f = document.createElement('form');
f.style.display = 'none';
this.parentNode.appendChild(f);
f.method = 'post';
f.action = 'http://www.mubiao.com/ancient/articles';
f.submit();
return false;">点我啊</a>