一、常见会话攻击类型
截了几张图,大致了解会话攻击:
图片及文章:http://www.acros.si/papers/session_fixation.pdf
二、INI配置管理会话安全
1、session.cookie_lifetime=0。
设置关闭浏览器时即删除cookie,从而删除通过cookie存储的会话ID ,防止被他人利用。大部分应用应将此项设置为0,如需实现自动登录,最好不使用设置会话ID 的长期保留的方式。
2、session.use_cookies=On 并且 session.use_only_cookies=On。
优选方案,尽可能只使用cookie来管理会话ID ,而不是url。而事实上大多数应用也确实只应用cookie管理会话ID 。
3、session.use_strict_mode=On。php 5.5.2开始。
此设置防止会话模块使用未初始化的会话ID 。即PHP 会话模块只接受自己创建的会话ID ,而不能接受用户提供的会话ID ,从而防止JavaScript等注入会话ID 进行攻击的情况发生。
4、session.cookie_httponly=On。
禁止JavaScript访问会话cookie。
5、session.cookie_secure=On。
仅允许在HTTPS 协议下访问会话ID cookie。
6、session.gc_maxlifetime=[尽可能的小]。
gc(Garbage Clear),调整 session.gc_probability 和 session.gc_divisor 设置项 可以使得过期的会话数据在适当的周期内被删除。但会话ID 的安全不能仅依赖于此设置。
7、session.use_trans_sid=Off。
禁用透明会话ID 管理。可规避会话ID 注入和泄露的风险。此选项的INI说明为:
Use of trans sid may risk your users security.
Use this option with caution.
- User may send URL contains active session ID to other person via. email/irc/etc.
- URL that contains active session ID may be stored in publicly accessible computer.
- User may access your site with the same session ID always using URL stored in browser's history or bookmarks.
(究竟透明会话ID 管理开启与否的区别自己还不清楚)
8、session.referer_check=[你的源 URL] 。
当启用 session.use_trans_sid 设置项时, 建议尽可能的联合使用此设置项来降低会话 ID 注入的风险。 假设你的站点是 http://example.com/, 请将此设置项置为 http://example.com/。 需要注意的,如果使用 HTTPS , 浏览器将不会发送 referrer 请求头, 因此,从安全角度考虑,此设置项并不总是可信赖的。
9、session.cache_limiter=nocache。
确保对于已经认证的会话, 其 HTTP 内容不被缓存。 你应仅允许缓存公开的内容, 否则将面临内容暴露的风险。 如果 HTTP 内容中不包含安全信息或敏感数据,可以使用“private”。 注意,“private”可能会导致客户端缓存私有数据。 仅在 HTTP 内容中不包含任何私有数据的时候,可以使用“public”。
10、session.hash_function="sha256"。
高强度的散列函数可以产生高强度的会话 ID。 虽然即使是使用 MD5 散列算法,要找到相同的散列值也是非常不易的, 但是开发人员还是应该选择 SHA-2 或者更高的散列算法, 例如可以使用 sha384 或者 sha512。
更多具体内容后面慢慢完善。
参考图片及文章地址:
1、http://www.acros.si/papers/session_fixation.pdf:图片来源,文章详细讲解了常见会话攻击。
2、http://php.net/manual/zh/session.security.php