哪位更安全?
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多个订单。所以我需要治疗??
cookie很容易被客户端伪造和篡改。因此,如果攻击者知道应用程序期望的cookie,他/她可以伪造cookie或随意更改cookie值。
在您的情况下,可能仅根据客户ID(和/或电子邮件地址)的知识就可以作为任意客户进行身份验证。
这样做的问题是你混淆了身份("谁是用户?")和授权("他/她能证明这真的是他/她吗?")。因为ID和电子邮件地址都用于标识,因为它们都是唯一的,并且是某种公开的(即不只是您知道),因此不具备身份验证的资格。因此,不要将身份信息也用于身份验证。
如果你认为我只需要把密码放在cookie中就可以完成身份验证,那也不要这样做。因为在某些攻击中,攻击者可以读取cookie的内容(例如跨站脚本),从而能够获得身份验证数据。
使用会话容器在服务器端存储合理的信息。但是对于会话,您仍然需要注意会话相关的攻击,如会话劫持或会话固定。
每次对页面的请求都通过网络发送cookie和它们的数据。如果你在cookie中嵌入了对网站至关重要的数据,当页面请求"在飞行中"时,破坏/窃取这些数据将是微不足道的。
相比之下,会话将所有数据存储在服务器上。客户机和服务器之间唯一的通信是会话的ID令牌。窃取会话令牌允许攻击者冒充受害者的身份,但他们不会获得比用户已经拥有的更多的能力。。如果您发送的cookie是has_super_user_powers=false
,那么当有人将cookie更改为true
时,请不要感到惊讶。将该标志保存在会话中使远程用户无法更改它,因为该值从一开始就不会离开您的服务器。
两者都可以被窃取,但cookie的值可以被读取。会话可以包含更多信息。
两者都同样安全,但要正确使用cookie,您需要多花一点时间。
如果你刚开始使用会话管理,就使用会话。
编辑——
实际上,从技术上讲,cookie比会话更安全。由于会话是基于cookie的,所以它们只能和cookie一样安全,而且几乎总是比cookie更不安全。然而,除非你有一个非常好的实现,否则会话对你来说会更安全。
取决于您在这些cookie中存储的信息类型。但总的来说,会话比cookie更安全。因为cookie驻留在客户端机器上,而会话在您的服务器上。
如果您的服务器已经过载,最好不要使用基于数据库的会话。要么使用基于文件的会话(PHP的默认值),要么您想要存储的数据无关紧要,请放心使用cookie。