【发布时间】:2011-07-27 15:51:17
【问题描述】:
大家好,非常感谢您在回答这个相当复杂的问题时提供的帮助。请不要嫌弃我,我保证它很容易理解!
您应该何时以及如何在上下文中对以下基于会员的网站的 login.php 和 login_validation.php 进行混淆(如果有的话)$_SESSION 和 $_COOKIE 变量?
这个基于会员的网站是用 php 编写的,并使用 mysql 作为它的关系数据库。
login.php
<?php
//Connect to database
$email = $_POST['email']; //from a text field
$password = $_POST['password']; //from a password field
$password= md5($password);
$stayLoggedIn= $_POST['stayLoggedIn']; //from a checkbox, value="yes" for checked, value="no" for unchecked
$sql = "SELECT id
FROM users
WHERE email='$email' AND password='$password'";
$query=mysql_query($sql);
if(mysql_num_rows($query)==1){
$row = mysql_fetch_array($query);
$id = $row["id"];
$encodedID_session= base64_encode("iofj4983rn9dh83$id");
$_SESSION['id'] =$encodedID_session;
if($stayLoggedIn== 'yes'){
$encodedID_cookie=base64_encode("dj02359t5ng842$id");
setcookie("idCookie", $encodedID_cookie, time()+60*60*24*7, "/");
setcookie("passwordCookie", $password, time()+60*60*24*7, "/");
}
}
?>
他有一个名为 login_validation.php 的文件,位于网站每个页面的顶部(除了 login.php)。
login_validation.php
如果设置了会话和 cookie 变量,首先它会对其进行解码(下面是解码会话变量的示例)
$decodedID = base64_decode($_SESSION['id']);
$array = explode("iofj4983rn9dh83", $decodedID);
$id = $array[1];
然后它只执行以下操作之一:
- 如果未设置会话和 cookie,则会显示标题“您尚未登录”
- 如果设置了会话,它会查询 mysql 以查找与同一行中的人的姓名 他或她的 id 并显示个性化标题“您已登录, 欢迎 Bonzo!”
- 如果未设置会话但设置了 cookie(例如用户选择 在LoggedIn,关闭他的电脑,并打开一个新的浏览器)它查询mysql找到 与他或她的 id 位于同一行的人的姓名并显示 个性化标题“您已登录,欢迎 Bonzo!”
开发人员做了一些让我有点困惑的事情,比如混淆会话变量,或者混淆两个(而不是一个)cookie。此外,如果有人掌握了他附加的无意义字符串,他使用 base64 进行混淆的方法似乎很容易受到威胁。
您应该何时以及如何在上下文中混淆(如果有的话)$_SESSION 和 $_COOKIE 变量,以将此基于会员的网站的 login.php 和 login_validation.php 混淆?
谢谢,谢谢!
编辑:只是为了澄清我没有为这段代码付钱给任何人,相反,我正在尝试学习 php,并从一个看起来可以改进的 php 教程中获得了这段代码。
编辑 2:密码现在在验证之前经过哈希处理
【问题讨论】:
-
你为什么要混淆
$_SESSION值?除非您认为您的服务器已被入侵,否则它们只有您的应用程序知道;它们存储在您的服务器上,而不是客户端上。 -
不要将密码的 MD5 哈希值保存在 cookie 中。
-
另外,你见过Little Bobby Tables吗?你们会是好朋友。你说的是“开发商”,如果你付钱给他,就拿回你的钱。
-
密码在cookie中经过哈希处理,但在数据库中以明文形式存储?它应该在数据库中散列(最好使用比 md5 更好的东西,加上盐),而不是存储在 cookie 中。
-
啊,又是一个弊大于利的无用 PHP 教程 :(
标签: php mysql session cookies obfuscation