在php和站点安全性中设置cookie

时间:2011-10-24 11:46:11

标签: php security cookies

我正在建立一个论坛,我不确定设置cookie的最佳做法。

以下是我在用户注册网站时构建的cookie:

       setCookie($name,$ip,time()+300000,"/");

而不是:time()+ 300000。我希望cookie永远存在,但我不知道该怎么做。

另外,我对安全性有疑问。如何检查cookie是否被黑客篡改或设置?

另一个问题是,如何检查用户是否允许在浏览器上使用Cookie?

更新:

一旦登录验证有效,我就把它放进去: setCookie方法($名称,$ IP,时间()+ 60 * 60 * 24 * 365, “/”);

更新:

        if(!isset($_COOKIE['$name'])
        {
            $salt="androidprogrammer26@yahoo.com";
            $hash = SHA2(salt + $_POST['pass']);
            setCookie($name,$hash,time()+60*60*24*365*50,"/");
        }

4 个答案:

答案 0 :(得分:2)

持续时间,只需使用足够大的数字而不是300000

time() + 60 * 60 * 24 * 366 * 15给你15年。

为防止篡改,请使用安全散列函数(如SHA-2),在服务器上存储机密salt(例如256位随机字符串),计算hash = SHA2(salt + data)并设置一个包含hash的Cookie。

现在,当您阅读Cookie时,您所要做的就是验证hash是否具有正确的值。

答案 1 :(得分:1)

您可以永久设置Cookie,但您可以将其设置很长时间,并在用户访问您的网站时随时刷新它。

到第二部分:在数据库中另外保存cookie值,如果它们匹配则设置它,如果没有人试图操纵某些东西。

另一种选择是您只在cookie中存储标识符并在数据库中存储值。但要小心,确保没有人可以猜出这些标识符。

Btw:我不认为用户的IP必须永远存储在他的cookie中,因为大多数人每天都需要一个新的永久性cookie :-D

更新:

使用用户ip进行识别并不好,它每天都在变化。 像这样做: 为数据库中的每个用户保存一个salt。像"jfdklsjfdsohfdsughfdjkhg"一样随机生成。如果用户使用值"LoggedIn"保存cookie md5($username.$salt),则保存用户ID。如果您阅读了cookie,您只需要将哈希与md5(databaseName.databaseHash).进行比较。如果它相等,那么cookie就是好的。你必须确保盐在这个系统中得到很好的保护(只有你的系统应该知道它)。

if(isset($_COOKIE["LoggedIn"))
{
    $userid = $_COOKIE["UserId"] // Second cookie, not hashed to know the user's id
    //get Values from Database here => $database_name, $database_salt
    if(md5($database_name.$database_salt) == $_COOKIE["LoggedIn"])
    {
         //OK
    }
}

答案 2 :(得分:1)

Cookies是这样的。他们可以被任何人改变。您可以使用Sessions更安全,或在每次使用时检查Cookie值,以确保它们不会更改。

你也可以加密它们,但是cookie有字符限制,加密会使它变大,所以它不是一个很好的解决方案。

关于“永久性的cookies”,您可以设置50年到期。

答案 3 :(得分:0)

您无法永久设置Cookie。您可以为cookie设置一个长期到期日。 请将数据保存在数据库或会话中并尝试匹配它们。建议使用会话而不是使用cookie,不能修改会话数据。