什么位更安全?
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的内容(例如,跨站点脚本)并因此能够获得认证数据的攻击.
使用会话容器代替在服务器端存储敏感信息.但是对于会话,您仍然需要了解与会话相关的攻击,如会话劫持或会话固定.