Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 混淆(如果有)$\u会话和$\u COOKIE变量?_Php_Mysql_Session_Cookies_Obfuscation - Fatal编程技术网

Php 混淆(如果有)$\u会话和$\u COOKIE变量?

Php 混淆(如果有)$\u会话和$\u COOKIE变量?,php,mysql,session,cookies,obfuscation,Php,Mysql,Session,Cookies,Obfuscation,大家好,非常感谢你们帮我回答这个相当复杂的问题。请不要长篇大论地拒绝我,我保证这本书很容易理解 对于以下基于成员资格的网站,您应该在何时以及如何在login.php和login\u validation.php上下文中混淆$\u会话和$\u COOKIE变量 这个基于成员资格的网站是用php编写的,并使用mysql作为其关系数据库 login.php 然后它只执行以下操作之一: 如果未设置会话和cookie,则会显示标题“您未登录” 如果设置了会话,它将查询mysql,在与会话相同的行中查找该

大家好,非常感谢你们帮我回答这个相当复杂的问题。请不要长篇大论地拒绝我,我保证这本书很容易理解

对于以下基于成员资格的网站,您应该在何时以及如何在login.php和login\u validation.php上下文中混淆$\u会话和$\u COOKIE变量

这个基于成员资格的网站是用php编写的,并使用mysql作为其关系数据库

login.php 然后它只执行以下操作之一:

  • 如果未设置会话和cookie,则会显示标题“您未登录”
  • 如果设置了会话,它将查询mysql,在与会话相同的行中查找该人员的姓名 他或她的id,并显示个性化标题“您已登录, 欢迎邦佐!”
  • 如果未设置会话,但已设置cookies(例如用户选择 stayLoggedIn,关闭了他的电脑,打开了一个新的浏览器)它查询mysql来查找 与他或她的id位于同一行的人员的姓名,并显示 个性化标题“您已登录,欢迎Bonzo!”
开发人员做了一些让我有点困惑的事情,比如混淆一个会话变量,或者混淆两个(而不是一个)cookie。此外,如果有人抓住了他附加的无意义字符串,他使用base64进行模糊处理的方法似乎很容易受到威胁

您应该在何时以及如何混淆(如果有)$\u会话和$\u COOKIE变量上下文中的login.php和login\u validation.php以用于此基于成员资格的网站

谢谢,谢谢!

编辑:我只是想澄清一下,我没有为这段代码付钱给任何人,相反,我正在尝试学习php,并从php教程中获得了这段代码,这段代码看起来可以改进


编辑2:在验证之前,密码现在是散列的

您不需要混淆
\u会话
变量中存储的任何内容。它不会发送给客户端,因此您可以将敏感信息信任它

我建议您为每个登录用户生成并存储一个唯一的身份验证令牌。PHP将在用户注销后维护会话(PHP不知道“登录”和“注销”),因此保留idCookie并将其值与用户id一起存储,例如:

if ($stayLoggedIn) {
    $token = sha256(generateRandomNumber());
    $_SESSION["token"] = $token;
    $_SESSION["userid"] = $id;
    setcookie("authenticationtoken", $token, ...)
}
验证身份验证时,请检查“authenticationtoken”cookie是否与存储的会话变量匹配。身份验证令牌必须是随机的,不得重复使用。当用户注销时,取消设置会话的“令牌”和“用户ID”变量

您现在拥有它的方式意味着攻击者可以通过网络监视Cookie经过,并执行简单的反向md5查找(字母数字字符串的彩虹表非常容易生成)以获取用户密码。攻击者还可以轻松猜测其他用户的会话ID

记住在任何地方使用https以防止cookie被盗。如果您通过http发送身份验证令牌,那么您甚至不必检查密码(想想Firesheep)

同样重要的是,不要在数据库中存储明文密码。您应该使用类似bcrypt的东西(PHP中有一个函数)来存储密码。如果攻击者破坏了您的数据库,则他们已获得您用户的所有密码。这是一件坏事(想想Playstation网络)


同样重要的是:确保清理用户输入。不要只将用户输入直接传递到数据库。您需要正确地转义任何特殊的SQL字符,否则您容易受到SQL注入的攻击。

为什么要混淆
$\u会话的值?除非您认为您的服务器已被破坏,否则它们只为您的应用程序所知;它们存储在您的服务器上,而不是客户端上。不要将密码的MD5哈希保存在cookie中。另外,您见过面吗?你们会成为好朋友的。你说的是“开发者”,如果你为此付钱给他,就把钱拿回来。密码在cookie中被散列,但在数据库中以明文形式存储?它应该在数据库中散列(最好是使用比md5更好的东西,再加上salt),而不是存储在cookie中。啊,另一个无用的PHP教程弊大于利:(等待,同时会洗个澡。顺便说一句,我读了两遍你的答案,已经有了一些很好的见解,所以谢谢你。我会回来看看你在做什么。回答得好。有人在观察“垃圾+用户ID”如果将GUID用于用户ID,则无法开始准确猜测会话ID,但不知何故,我得到的印象是,这不太可能。仍然会存在同一用户始终获得相同会话ID的问题。Cameron,这不会在数据库中存储明文密码。请阅读我在我的帖子下的最新评论,以回应Aether.OK.原始问题(编辑前)正在对提交的密码执行SQL select。但是,存储单个MD5哈希密码是不安全的。您应该真正了解bcrypt,或者至少存储一个salt迭代哈希。有关如何存储密码的详细讨论,请参阅。带回家的消息是,您需要一个随机的、按用户的salt和一个慢速哈希函数。没错,一个缓慢的散列函数。嗨,Cameron,谢谢你修改这个问题并保持联系。今天我花了一些时间阅读了phppass的文档(一个随机的,每个用户的salt,缓慢的has函数)我也将在这个问题上提供一些示例代码,说明我将如何设置cookies和会话,以澄清我的方式是否包含了所有建议的改进,因此请注意。再次感谢。
$decodedID = base64_decode($_SESSION['id']);
$array = explode("iofj4983rn9dh83", $decodedID);
$id = $array[1]; 
if ($stayLoggedIn) {
    $token = sha256(generateRandomNumber());
    $_SESSION["token"] = $token;
    $_SESSION["userid"] = $id;
    setcookie("authenticationtoken", $token, ...)
}