0

因此,我使用 cookie 来识别用户并阻止未登录的人访问。这是页面的校验码

        if (!isset($_COOKIE['username']) && !isset($_COOKIE['password']))
        { 
        header("location:clientlogin.php");
        }

然而,这只是检查的一半。这是我的问题。我的网址格式如下

site.com/?Client=$Client&Product=$Product

现在,在我做任何事情之前,我想确保 cookie 用户名与链接中的信息相匹配。我认为我必须首先从数据库中获取信息,因为 $Client 是姓氏,而用户名是电子邮件列。我试过比较cookies,我只是失败了。

其次,我想防止 url 被篡改,因为当前设置允许任何人更改 $Client 和 $Product 并获取不属于他们的信息。但是,每当我插入这样的支票时:

    if($Client != $LastName)
    {
    header("location:clientlogin.php");
    }

在我已经有 $Client(页面以 GET 开头)的地方,它会创建一个重定向循环,我无法登录。每次我登录并被重定向到该页面时,我都会返回 clienlogin.php 我猜我是否可以将 cookie 用户名(顺便说一下持续一年)与实际数据进行比较,我也许能够解决两个问题?

我希望我提供了足够的信息,如果你对我轻松一点会很酷,这是我正在学习的第一个项目。

谢谢!

4

2 回答 2

1

首先,不要在 cookie 中存储个人密码。

获取这些信息非常容易。改用会话。看这里

于 2013-07-23T03:48:32.493 回答
1

@DaveChen:我从来没有遇到过一个框架(使用任何脚本语言),也没有一个我曾经登录过的知名网站将用户的密码存储在未加密的 cookie 中。这是迄今为止你可以对你的用户做的最危险的事情。即使在 cookie 上设置了 SSL 和 httponly 选项(以减轻 JavaScript XSS 攻击),这只是一个非常非常糟糕的主意。

完成您尝试做的最接近的“正确”方法是加密 cookie 内容。几乎每个理智的网站都使用的最佳方法是根本不在客户端存储任何会话数据。客户端的 cookie 仅包含一个随机生成的(难以暴力破解)会话 ID——所有数据本身都存储在服务器上,无论是在数据库、会话文件还是缓存服务器中。

最好建议您使用 php 的内置会话。首先阅读php 会话的完整参考。默认情况下,php 将会话存储在服务器上的临时文件中——客户端仅获取会话 ID。

要为您关于保护单个用户的数据不被其他用户看到的问题提供部分答案,您根本不会将“客户端”放在查询字符串 (url) 中。相反,您在数据库中查找来自 url 的“产品”以及从会话中检索的“客户”值。因此,您的 url 将变为site.com/?Product=$Product并且您使用会话中的“客户端”值,并运行一个数据库查询,同时检查这两个值(以确保产品属于已登录的客户端) - 类似于SELECT * FROM products where client_id = ? AND product_id = ?.

于 2013-07-23T04:32:21.183 回答