《Web应用安全威胁与防治》 这本书讲的是什么 , 书的名字已经阐述的很清楚, 我就不再赘述了
看了下ITeye提供的试读章节 , 的确有些干货 , 感觉囤一本还是有些必要的 , 也在此向ITeye的朋友们推荐下
试读章节包括了第六章 第十章和第十二章 其中第六章介绍了一些web安全方面的扫描工具 第十章介绍了身份认证和会话管理方面的安全问题 第十二章介绍了CSRF(跨站请求伪造)的相关知识
下面是我阅读第十章和第十二章后的读书笔记:
会话劫持:
截获sessionId 从而劫持该sessionId对应的会话
会话固定:
1 得到A网站的一个sessionID
2 诱导用户B发送含该sessionID的请求 , 用户B通过输入信息的方式登录了A网站
3 通过该sessionID , 可以得到B的权限
*url中写入sessionID 可能导致会话固定
非直接会话攻击 :
原因:
服务器端在用户还没有成功登录/注册/密码重置前 , 就将user信息存入session , 相应操作失败后 虽然提供了302重定向到失败页面 但客户端可以通过一些工具强制不执行302跳转 , 而此时server端session已经存在user信息 , 这样攻击者即使登录验证失败 , 却还能取得user的权限
解决办法 :
不要在 登录/注册/密码重置 前 就在session 中置入user信息 ;
防治会话固定的方法:
一旦用户登录成功,马上invalidate用户的会话
保护sessionID (会话令牌) 的方法 :
会话过期(软会话过期(xx时间没有操作) (硬会话过期(通过web filter 实现)))
保护cookie (设置 secure , HttpOnly) 防止中间人攻击 (Man in the Middle) *servlet 3.0 可以在web.xml 中设置 这两个属性
提供完整的 logout 功能
跨站请求伪造 CSRF ( Corss-site Request Forgery )
其特征为:
用户B登录A网站没有退出 打开的任何页面都可以向A网站发送B可以执行的请求 (如将可执行url 放入 img标签中 , 内嵌可提交表单的不可见iframe等)
主要的预防方法:
在重要操作前(转账/改密) 添加二次验证
添加token , 方法是:
1 在用户刚登录时 产生一个不可预知的Token ,
2 在任何需要保护的表单/URL 中 添加这个Token作为参数
3 提交相应请求时检查这个token
4 退出/session过期时 移除该token并销毁session
注意 , 添加Token并不能确保不会受到CSRF攻击 , 特别是在可能同时存在XSS漏洞的情况下
一个方便添加token的类库 : CSRF Guard
注:本文参加了ITeye1月技术图书有奖试读活动