【发布时间】:2014-03-24 15:29:23
【问题描述】:
这个问题已经被问过很多次了。我只是好奇是否相信以下代码提供了相当重要的安全级别。还有其他我应该考虑的吗?
一些假设:
- 如果用户在 5 秒内什么都不做,则将其注销。
- 如果用户不是来自 somePage.php,则将其注销。
- 如果用户的 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,这样您就不必为此担心太多。