PHP Session更安全还是SetCookie?

时间:2011-11-28 15:56:02

标签: php security session

什么位更安全?

   function login_customer($customer_details) {
    //Set a cookie to login the customer
    setcookie("Str_CUST_LOGIN", 1, time()+3600);
    setcookie("Str_CUST_EMAIL", $customer_details['customers_email']);
    setcookie("Str_CUST_ID", $customer_details['customers_id']);
    //Update the cart
    return true;
}

或者是下面这个。该脚本使用IF ELSE语句。老客户的梦魇应用。

   function login_customer($customer_details) {
    //Set a cookie to login the customer    
    $str_HA_CUST_LOGIN="1";
    // the customer details var gets info from a mysql escape form
    // so mysql /xss is stopped
    $str_HA_CUST_EMAIL=$customer_details['customers_email'];
    $str_HA_CUST_ID=$customer_details['customers_id'];

    $_SESSION["loggedIn"]=$str_HA_CUST_LOGIN;
    $_SESSION["userEmail"]=$str_HA_CUST_EMAIL;
    $_SESSION["userID"]=$str_HA_CUST_ID;

    return true;
}

我正在尝试改进它并锁定会话。没有做任何Salt,基于MD5的会话字符串,因为我正在考虑数据库会话 - 这里唯一的问题是MySQL是如此过载我们必须在云服务器上制作主和集群负载均衡器。在一天中每秒平均订单超过200个。所以我想要会议?

4 个答案:

答案 0 :(得分:5)

Cookie可以很容易地被客户伪造和篡改。因此,如果攻击者知道应用程序所期望的cookie,他/她可以根据自己的意愿伪造cookie或更改cookie值。

在您的情况下,可能只能根据客户ID(和/或电子邮件地址)的知识作为任意客户进行身份验证。

这个问题是你混淆了识别('谁是用户?')和授权('他/她能证明这是他/她吗?')。因为ID和电子邮件地址都用于识别,因为它们既是唯一的又是某种公共的(即,不仅仅是您所知道的)和thus not qualified for authentication。因此,也不要使用标识信息进行身份验证。

现在,如果您认为我只是将密码放在cookie中以满足身份验证方面,那么也不要这样做。因为攻击可以攻击cookie的内容(例如Cross-Site Scripting),因此可以获取身份验证数据。

使用会话容器代替在服务器端存储敏感信息。但是通过会话,您仍然需要了解与会话相关的攻击,例如Session HijackingSession Fixation

答案 1 :(得分:1)

每次请求都会通过网络将Cookie及其数据发送到该页面。如果您在cookie中嵌入了关键数据,那么在页面请求“正在进行中”时,对这些数据进行修改/窃取将是微不足道的。

相比之下,会话将所有数据存储在服务器上。客户端和服务器之间唯一的事情是会话的ID令牌。窃取会话令牌允许攻击者承担受害者的身份,但是他们不会获得比用户已经拥有的更多能力。

e.g。如果您发送了一个Cookie has_super_user_powers=false,那么当有人攻击cookie而不是true时,请不要感到惊讶。在会话中保存该标志使远程用户无法更改该标志,因为该值永远不会离开您的服务器。

答案 2 :(得分:0)

两者都可以被盗,但可以读取cookie的价值。会话可以包含更多信息。

两者同样安全,但要正确使用cookies,您将不得不花费更多时间。

如果您刚开始使用会话管理,只需使用会话。

-edit -

实际上,技术上的cookie比会话更安全。由于会话基于cookie,因此它们只能像cookie一样安全,并且几乎总是不那么安全。但是,除非你有一个非常好的实现,否则会话对你来说会更安全。

答案 3 :(得分:0)

取决于您在这些Cookie中存储的信息类型。但是Sessions一般比cookie更安全。由于cookie驻留在客户端计算机上,而会话在您的服务器上。

如果您的服务器已经过载,最好不要使用基于数据库的会话。使用基于文件的会话(默认为每个PHP)或您要存储的数据无关紧要,请随意使用cookie。