繁体   English   中英

使用php和sql通过https进行安全的用户身份验证

[英]Secure user authentication over https with php and sql

目前,我的身份验证如下所示:

通过SSL登录:

  • PHP根据数据库检查用户名/密码。
  • 如果它们匹配,则会生成会话cookie,将其发送并存储在Db上
  • (会话cookie看起来像userID:IP:random_characters:timestamp)

通过SSL执行操作:

  • PHP根据会话数据库检查cookie。
  • 如果会话匹配,且存在时间不到一小时,并且用户ID和IP匹配,则认为该会话有效。
  • 如果会话有效,则执行操作并生成新的会话cookie。
  • (如果操作是注销,则会话cookie设置了过期时间)

如果在受害者之前的一个小时内劫持了cookie并欺骗了IP,则将验证攻击者并生成一个新会话。 我还有其他可能忽略的问题吗?

什么是最佳做法? 我想加强安全性。 谢谢!

您不仅可以将会话绑定到IP,还可以绑定到用户代理。 然后,不是那么聪明的攻击者会遇到另一个障碍..虽然不是一个大障碍,但是如果他可以窃取一个会话Cookie,然后尝试各种用户代理,则他可能会窃取更多会话cookie。 但是,要使其不像更改用户代理并使用相同的cookie进行重试那样简单,请删除会话以要求重新登录(使用用户名/密码)。

最后但并非最不重要的一点是CSRF :如果用户登录到外部站点,则可能使他执行操作。 由于用户的cookie有效,因此将执行此操作。 您只能通过通过URL传递随机令牌来避免这种情况。 甚至允许使用多个选项卡浏览的简单方法是使用会话ID的(随机/更改)部分。 仅对单个请求有效的随机令牌会更加安全,但是它们非常烦人,因为它们阻止人们使用多个选项卡(即使该应用程序可以简单地存储多达10个令牌,并且仅在存在多个令牌时才会使旧令牌无效) 10-不仅可以使用最新的令牌,还可以使用打开新标签页之前访问过的页面中的令牌)。 但是很可能在整个会话中有效的令牌就足够了; 假设您使用会话ID或会话ID的一部分,那么如果有人可以获取其他人的会话ID,则您的问题比CSRF更大

关于注销,我不仅会使用过期时间,而且还会使用一个空值-因此,如果出现问题(我已经看到服务器和用户的时钟(天数+)都非常不正确)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM