-1

所以我在玩我的简单登录系统,我似乎无法弄清楚的一件事是为什么登录允许我创建一个只有用户名的帐户并将这些数据发送到我的数据库事件,尽管我指定

 if($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string(md5($_POST['password']));

    if(empty($username)) {
      echo("Du ma fylle inn et brukernavn!");
} {
 if(empty($password)) {
      echo("Du ma fylle inn et passord!");
      } else {

当我删除转义字符串中的 (md5 时,它可以工作,但是没有加密,并且密码在数据库中可见。所以反之亦然.. 有人知道我的错误或误解在哪里吗?

QUICK SUM:它应该给出“您需要填写密码”,但是当我在字符串中解密 md5 时它不会,但是当我删除它时,它允许我。

4

4 回答 4

2

md5将产生一个字符串,即使输入为空。您需要检查原始输入,直接来自$_POST. 如果要验证输入,请始终在处理之前进行检查,因为后续处理(如您在本例中所见)可能导致非空变量,即使原始输入为空。

于 2013-03-30T20:38:12.577 回答
2

md5 将编码任何内容,甚至是空字符串。无论如何,这将使变量“非空”。

含义:先检查空,然后对密码进行编码。

于 2013-03-30T20:38:35.050 回答
1

一个空字符串仍然有一个 MD5 散列,因此您可以正确检查密码是否等于某个值。

于 2013-03-30T20:38:32.457 回答
0

您可以在分配 md5- 之前检查该字段是否为空

if($_SERVER['REQUEST_METHOD'] == 'POST') 
{
    if (mysql_real_escape_string(empty($_POST['password']))) {
        // do nothing
    } 
    else 
    {
   `    $username = mysql_real_escape_string($_POST['username']);
        $password = mysql_real_escape_string(md5($_POST['password']));

        if(empty($username)) {
             echo("Du ma fylle inn et brukernavn!");
        } {
        if(empty($password)) {
             echo("Du ma fylle inn et passord!");
        } else {
        }
   }

}

于 2013-03-30T20:48:43.137 回答