因此,我使用Cookie来识别用户并阻止未登录访问权限的用户。 这是页面的检查代码
if (!isset($_COOKIE['username']) && !isset($_COOKIE['password']))
{
header("location:clientlogin.php");
}
然而,这只是支票的一半。这是我的问题。我的网址就像这样格式化了
site.com/?Client=$Client&Product=$Product
现在,在我做任何事情之前,我想确保cookie用户名与链接中的信息相匹配。我想首先从数据库中获取信息,因为$ Client是姓,而用户名是电子邮件列。我尝试过比较饼干,我只是失败了。
其次,我想防止网址被篡改,因为当前设置允许任何人更改$ Client和$ Product并获取不属于他们的信息。但是,每当我插入这样的支票时:
if($Client != $LastName)
{
header("location:clientlogin.php");
}
我已经拥有$ Client(页面以GET开头),它创建了一个重定向循环,我无法登录。每次我登录并重定向到该页面,我都会回到clienlogin.php 我猜测我是否可以将cookie用户名(顺便说一年持续一年)与实际数据进行比较,我或许可以解决这两个问题?
我希望我提供了足够的信息,如果你对我这么容易就会很酷,这是我正在学习的第一个项目。
谢谢!
答案 0 :(得分:1)
首先不要存储 Cookie中的人员密码。
抓住这些信息非常容易。改为使用会话。见here
答案 1 :(得分:1)
@DaveChen:我没有遇到任何一个框架(使用任何脚本语言),也没有一个我登录过的知名网站,它将用户的密码存储在未加密的cookie中。到目前为止,这是您可以对用户执行的最危险的操作。即使在cookie上设置了SSL和httponly选项(以缓解JavaScript XSS攻击),这只是一个非常非常糟糕的主意。
完成您尝试做的最接近的“正确”方法是加密cookie内容。最好的方法,几乎每个理智的网站使用的方法,是根本不存储客户端的任何会话数据。客户端的cookie只包含一个随机生成的(难以暴力)会话ID - 所有数据本身都存储在服务器上,无论是在数据库,会话文件还是缓存服务器中。
最好建议使用php的内置会话。首先阅读整个reference for php sessions。默认情况下,php将会话存储在服务器上的临时文件中 - 客户端只获取会话ID。
要提供有关从其他用户眼中保护单个用户数据的问题的部分答案,您根本不会将“客户端”放入查询字符串(网址)中。相反,您在数据库中查找来自URL的“产品”以及从会话中检索的“客户端”值。因此,您的网址将变为site.com/?Product=$Product
并使用会话中的“客户端”值,并运行数据库查询,同时检查这两个值(以确保产品属于登录的客户端) ) - 类似于SELECT * FROM products where client_id = ? AND product_id = ?
。