用PHP中的$ _SESSION保护用户登录系统安全

时间:2014-12-24 21:26:51

标签: php mysql security session

我希望有人可以帮助我,我正在创建一个PHP Web应用程序,需要用户登录才能在mysql数据库中查看数据。

我只是想知道这是一个好方法,它是否足够安全?我知道PHP脚本中没有什么是安全的,但我需要这个相当安全。

所以这就是我一步一步做的事情,如果你能指出我正确的方向并告诉我哪些错误会很棒!

  • 用户使用用户和密码登录。
  • PHP会根据数据库检查用户和密码。
  • 如果确定,我会存储$ SESSION ["用户名"]; (有用户名)到会话。

  • 在每个请求/页面加载时,我都有一个函数(如下)来检查会话。

    function check_session_valid(){ if(!isset($ _ SESSION ['用户名'])|| $ _SESSION ['用户名'] ==""){ 标题("位置:/login.php"); } }

现在这样安全还是我完全错了?

以下是我认为用户可以做的事情" hack"应用程序:

在注册页面上,当用户输入用户名时,它会告诉他们用户名是否可用。

"黑客"不只是找到一个不可用的用户名,然后写一个PHP脚本来设置浏览器中的$ _SESSION ["用户名"]。然后导航到.index.php页面并登录其他用户帐户?

我也在使用" session_start();"在我" check_session_valid();"对每一个要求,都是错的?

希望你们中的一些PHP专家可以帮助我在这里!

由于

2 个答案:

答案 0 :(得分:6)

  

"黑客"不只是找到一个不可用的用户名,然后写一个PHP脚本来设置浏览器中的$ _SESSION ["用户名"]。然后导航到.index.php页面并登录其他用户帐户?

如果黑客可以编写将在您的服务器上运行的代码,那么是的,这是完全可能的。

但是,如果他们可以将代码放到您的服务器上,他们就可以做任何事情。那时你完全被冲洗了。 (会话安全性是您最不担心的事情)。

所以问题来了,没有代码注入攻击,它是否安全?

好吧,让我们看一下可能的攻击媒介:

  1. 会话劫持

    如果攻击者观察到HTTP请求,他们可以从流量中挑选有效用户的cookie,并将其用于"劫持"他们的会议。

    如果使用HTTPS,则无法进行此攻击。

    所以使用HTTPS。

  2. 会话固定

    如果您允许基于URL的会话标识符,攻击者可以伪造ID并将其发送给受害者。然后受害者登录并繁荣,攻击者拥有权利。

    您可以通过两种方式阻止这种情况:首先,不要在网址中允许会话标识符:session.use_only_cookies

    其次,您应该在登录时调用会话标识符(session_regenerate_id())...

答案 1 :(得分:2)

我看过你的帖子。你曾经说过“PHP脚本中没有什么是安全的”让我很震惊。让我试着回答你的问题。

你说过,如果黑客在浏览器中创建一个cookie,他们会破解我的会话吗?我的回答是否定的。 让我们了解会话的实际工作方式。

首先,当您启动会话时,它将在您的服务器中创建一个文件,其中包含一个随机文件名和一个随机序列号(session_id),它将存储在您的浏览器中。

其次,当您使用$ _SESSON向会话中添加/编辑值时,然后根据您在文件中从浏览器cookie获取的session_id,它将会更改。你可以说会话ID作为浏览器和你之间的参考。你的服务器会话文件。

因此,如果您不向黑客提供仍为cookie的session_id,则不可能发生黑客攻击。