oym*_*oym 3 php security codeigniter
我有一个需要用户名和密码的登录系统.我想在一定数量的失败登录尝试后显示验证码.实现这个的正确方法是什么?我已经阅读了这个网站,一些解决方案建议在users表中添加'failed-attempts-count'.但是,我需要失败的尝试不与某个用户绑定 - 即我想要显示验证码,而不管输入的用户名是否存在于系统中.将它存储在会话变量中是否可以(我正在使用PHP)?如果是这样,将数据根据需要投入会话变量是否没有缺点?我已经为网站上的每个访问者提供了任何会话ID(无论是否已登录),因此我可以创建一个表,将登录尝试与此会话ID相关联...有关最佳/最安全方法的任何想法?谢谢.
更新:从目前为止的答案来看,似乎会话ID不是最好的主意,因为黑客可以简单地清除他/她的缓存(但这真的是一个问题,因为这不会使暴力攻击减慢到足以使它变得无用吗? ).另一种选择是通过IP ...但我对内网或代理下的用户犹豫不决,因为失败的尝试将被共享....我真的不能想到任何其他方法......你呢?
使用会话ID的危险在于,撰写暴力攻击的人可以在每次尝试时清除他的cookie,从而给他一个新的会话.
请记住,可以使用浏览器之外的脚本语言编写自动暴力攻击,该语言可以操纵为每个请求发送的cookie.
另一种方法是创建一个包含用户源IP的表,并在那里添加计数器.这会给使用代理服务器的用户带来不便.但至少你会抓住那些试图反复猜测来自同一位置的密码的人.
更新:在连续暴力尝试期间必须清除cookie不会减慢攻击速度,因为此过程将自动化并几乎立即发生.这些类型的攻击中的Cookie操作非常常见.修改cookie与清除浏览器的缓存不同(这通常需要一段时间,因为它需要删除一堆文件).攻击者需要做的就是阻止cookie的发送.