程序员需要掌握的web安全知识
2014-03-23 00:00
423 查看
关于最近网站安全状况,看下乌云上某大厂的漏洞列表就知道了.
![](http://static.oschina.net/uploads/img/201403/23012026_IxMF.jpg)
触目惊心吧,这仅仅是被曝光的,未被曝光的就更不好说了... 作为一名程序员,掌握的一些基本web安全知识,是很有必要的,下面列举一些常见的安全漏洞和对应的防御措施。文笔有限,见笑了。
Cross Site Request Forgery
我是如何刷新浪微博粉丝的
用户第一次请求网站是生成CSRF Token并保存到session中。
POST请求时,增加Input Field
服务器端验证Token的合法性,并更新token。
Cross-site scripting
百度经验存储型Xss
输出过滤(output encoding),htmlEncode, javascriptEncode
对敏感操作增加验证码
![](http://static.oschina.net/uploads/img/201403/23012026_IxMF.jpg)
触目惊心吧,这仅仅是被曝光的,未被曝光的就更不好说了... 作为一名程序员,掌握的一些基本web安全知识,是很有必要的,下面列举一些常见的安全漏洞和对应的防御措施。文笔有限,见笑了。
CSRF 攻击
CSRF的全称是Cross Site Request Forgery,就是跨站点伪造请求攻击。 简单理解:Bad guy盗用你的身份,做桌下交易。详细原理看Cross Site Request Forgery
经典案例:
看看乌云网友如何通过CSRF漏洞,自动加关注和发微博。我是如何刷新浪微博粉丝的
防御措施:
最有效的措施,对敏感操作增加CSRF Token验证并尽量采用POST请求方式(虽然GET 也可以增加Token验证)。用户第一次请求网站是生成CSRF Token并保存到session中。
POST请求时,增加Input Field
csrf_token, 参数值通过session获得。
服务器端验证Token的合法性,并更新token。
XSS攻击
XSS攻击可以说最常见最严重的漏洞攻击了。 XSS的全称是Cross-site Scripting,就是跨站脚本攻击。主要分为非存储型XSS(反射型)和存储型XSS. 详细介绍看WIKI吧:Cross-site scripting
经典案例:
实在太多了,随便找一个:百度经验存储型Xss
XSS Cheat Sheet:
https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet防御措施:
输入过滤, 即使用Filter 过滤一些敏感字符"<" ">" "#" "script"等.输出过滤(output encoding),htmlEncode, javascriptEncode
对敏感操作增加验证码
过滤工具推荐(java):
https://code.google.com/p/owaspantisamy (比较全面,但有点重) https://code.google.com/p/xssprotect/[/code]SQL注入攻击
SQL注入这种老掉牙的攻击手段,我就不多介绍了。 最简单的防御措施,使用预编译方式绑定变量:
JDBC 使用PreparedStatement.
mybatis/ibatis 使用静态变量#正确地使用Cookie
对于无需JS访问的cookie设置HTTPOnly
不要在cookie存放用户敏感数据。合理设计一个cookie自动登录方案
要保存哪些数据:
cookie保存base64 encode(username|sequence|token)的value。
服务器使用Redis的Hashs结构保存以下这几个值。Key: user::cookie hashKey: userAgent_ip,userAgent_sequence,userAgent_token,userAgent_expireTime如何验证cookie登录:
如果expireTime没到而且username,sequence,token均相同,登录成功。
如果expireTime没到,username和sequence相同,token不同,但IP相同和userAgent不同,登录成功。为什么要这样的设计?因为同一用户可能会使用的不同设备/浏览器登录。
其余情况均登录失败,并清空登录cookie。
成功登录后,服务器update token,同时更新cookie。后续操作:
修改密码/点击退出,更新服务器端的token和sequence。
对于敏感操作(如修改个人私隐信息,Email,password等)需要输入密码。数据安全
相信大家还记得CSDN 明文密码被暴库泄露的事件吧。 最近又有被暴库的,300w用户数据。
住哪网300W+用户明文密码泄露防御措施:
对密码采用MD5/SHA(salt+password)进行HASH,salt是一串字符,为防止Rainbow Table 破解用的, salt应该放在一个隐秘的地方(某处代码或配置文件中)。完善的日志机制
独立安全相关的log,方便追查和事后分析。 ------------下面2项可能偏运维一点,但程序员还是觉得有必要了解--------------服务器运维配置
给大家看看最近的一个案例:
UC运维不当 可导致大量数据泄漏防御措施:
iptables 搞起, 该屏蔽就屏蔽,该开放的IP就开放。DDOS攻击
一般来说,防御DDos的攻击是比较难,常见的DDOS方式较多(网络层DDOS、应用层DDOS等)。一些非物理措施:
增加anti-spam 机制
限制IP请求频率, 结合ip+cookie定位一个client
调小Timeout, KeepAliveTimeOut, 增加MaxClients
增加容灾机器,优化网站性能。
合理配置防火墙。最后
定期了解最新的安全资讯和攻击技术,没事多上上
乌云。推荐书籍:
The Web Application Hacker's Handbook
白帽子讲Web安全
转自:http://kenny7.com/2013/04/web-security-knowledge.html
相关文章推荐
- ssh java web程序员需要掌握的知识
- 要想成为一名优秀的程序员需要重点掌握那些知识
- C++程序员需要掌握的知识(个人总结)
- .Net WEB 程序员需要掌握的技能
- java程序员进化为架构师需要掌握的知识
- WEB程序员需要掌握的十大MySQL优化技巧
- 要想成为一名优秀的程序员需要重点掌握那些知识
- 工作三年的Java程序员需要掌握哪些知识?
- java程序员需要掌握些什么知识
- WEB程序员需要掌握的十大MySQL优化技巧 推荐
- Nodejs进阶:crypto模块中你需要掌握的安全基础知识
- web前端你需要掌握的一些个知识(一)
- web应用开发人员需要掌握的运维知识
- Web前端需要掌握的知识
- Web 开发学习 需要掌握的知识 01
- 初级程序员升中级程序员需要掌握哪些知识
- WEB程序员需要掌握的十大MySQL优化技巧
- WEB程序员需要掌握的十大MySQL优化技巧
- 程序员需要掌握的Web安全知识
- WEB程序员需要掌握的十大MySQL优化技巧