XSS 和 CSRF

感谢《码农翻身》的文章让我深刻记住这两种攻击方式。

1、《浏览器家族的安全反击战

2、 《黑客三兄弟

3、  《黑客三兄弟续

 下面是我的整理内容:

目录

矛与盾教量:

矛:利用js获取其他网站的cookie 

盾:JS 同源策略 {protocol, host, port}

矛:JS 注入

盾:cookie 添加 HttpOnly 属性 禁止js 读取

矛:JS 假造登录框  获取账号密码(登录页面咋注入js呢?)

盾:过滤,转义

矛:跨站请求伪造CSRF

 盾: from 请求加入随机数(token)


矛与盾教量:

矛:利用js获取其他网站的cookie 

盾:JS 同源策略 {protocol, host, port}

      所谓的 同源 是指域名、协议、端口号 相同。不同的客户端脚本(javascript,ActionScript)在没有授权的情况下,不能读取对方资源。简单来说,浏览器允许包含在页面A的脚本访问第二个页面B的数据资源,这一切是建立在A和B页面是同源的基础上。

  •        html 嵌入式也是同源(<img>   <script>)
  •        一级域名相同(www.shanjun.wang与code.shanjun.wang 同源)

  不过cookie的domain一定要设置为那个一级域名才可以,例如:”

document.cookie = 'test=true;path=/;domain=store.com'

  •       AJAX 白名单  跨域请求  需要服务端配合

      

XSS 和 CSRF
码农翻身
// 指定允许其他域名访问
response.setHeader("Access-Control-Allow-Origin", "*");

矛:JS 注入

    例如: 在文本输入框中注入js (存储型XSS

XSS 和 CSRF
码农翻身​​​​​

盾:cookie 添加 HttpOnly 属性 禁止js 读取

response.setHeader("Set-Cookie", "cookiename=value;

Path=/;Domain=domainvalue;Max-Age=seconds;HTTPOnly");

XSS 和 CSRF

矛:JS 假造登录框  获取账号密码(登录页面咋注入js呢?

盾:过滤,转义

  •      对输入内容过滤 将特定字符去掉 :给Servlet加Filter。
  •       对输出内容编码转义
XSS 和 CSRF
码农翻身

矛:跨站请求伪造CSRF

   假网站伪造一个真网站的请求。在假网站做一个图片链接,不用用户点击自动请求转账链接

XSS 和 CSRF
码农翻身

  盾: from 请求加入随机数(token)

        (现在Gmail支持多个tab同时持有多个SessionID) 后台对参数进行校验,实际操作看这个:SpringMVC如何防御CSRF

        HTTP Referer字段验证: 验证referer和当前网站(request.getScheme())+”://”+request.getServerName())是不是一个网站。

        有时间我会做一个模拟实验。有时间。。。。。。