【问题标题】:session security in php and things to look out forphp 中的会话安全性和需要注意的事项
【发布时间】:2014-03-24 15:29:23
【问题描述】:

这个问题已经被问过很多次了。我只是好奇是否相信以下代码提供了相当重要的安全级别。还有其他我应该考虑的吗?

一些假设:

  1. 如果用户在 5 秒内什么都不做,则将其注销。
  2. 如果用户不是来自 somePage.php,则将其注销。
  3. 如果用户的 IP 地址发生变化,请退出。

代码如下:

<?php
session_start();
$time = time();
$ip = $_SERVER['REMOTE_ADDR'];

if ($time - $_SESSION['time'] > 5)
{
    //function to log out user...//echo "logged Out,Time";
}
elseif ($ip !== $_SESSION['ip'])
{
    //function to log out user...//echo "logged out,IP";
}
elseif ($_SERVER['HTTP_REFERER'] !== "http://server.com/somePage.php")
{
    //function to log out user...//echo "logged out,Refer";
}
else
{
   //do sensitive stuff
}
$_SESSION['time'] = $time;
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
?>

编辑:

这只是“敏感”领域的一些基本内容。也许在 Facebook 级别。我不希望任何人进入不应该进入的人。但如果他们这样做了,就会有一些问题,但不会发射核导弹。

5 秒是我的测试示例,显然它会更长。

布莱恩,

如果$_SERVER可以被欺骗,有没有更好的方法来确定用户的源ip?

【问题讨论】:

  • 安全要求因上下文而异,具体取决于应用程序类型、应用程序收集的信息类型以及与之相关的任何法律等因素。因此,如果没有您提供的一些背景信息,几乎不可能告诉您您的安全措施对于您的应用程序是必要的还是充分的。
  • 另外,仅供参考,几乎任何 $_SERVER 变量都可能被攻击者欺骗。
  • 是的,“敏感的东西”没有任何意义——记录访客信息和发射核导弹都属于这一类。您必须更具体地说明您将要做什么,这样我们才能告诉您适合的安全级别。
  • “如果用户在 5 秒内什么都不做,则将他注销” – 是的,那些可能实际上试图阅读更多内容的讨厌鬼超过五秒……那些在我们现代多动症社会中没有地位,所以踢他们! (抱歉,如果此评论值得 TL;从您的角度来看是 DR。)
  • 不管怎样,即使是 Google 也允许您切换 IP 并保持会话处于活动状态。考虑在每个请求中轮换会话 ID,这样您就不必为此担心太多。

标签: php security session


【解决方案1】:

一些假设:

  1. 如果用户在 5 秒内什么都不做,则将其注销。
  2. 如果用户不是来自 somePage.php,则将其注销。
  3. 如果用户的 IP 地址发生变化,请退出。

你会让你的用户(可能不仅仅是男性)发疯。尤其是 Tor 用户。

实现secure PHP sessions 所需要做的事情很少:

  1. 使用 CSPRNG 生成会话 ID。
  2. 使用 HTTPS。
  3. 使用 HttpOnly cookie(因此它们对 JavaScript 不可见)。
  4. 使用安全 cookie(因此它们仅在 HTTPS 中可用)。
  5. 在分配新会话变量值之前,只要用户登录或注销,就使用session_regenerate_id(true);

【讨论】:

    猜你喜欢
    • 2014-08-19
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多