-1

这个登录代码有什么问题?相同的代码在我编写的不同网站中工作

这是登录表单:

<html>
<head>
<meta http-equiv="content-type" content-type="text/html; charset=windows-1255">
<title>היכנס!</title>
</head>
<body dir="rtl">
<center>
<form action="loginaction.php" method="post">
שם משתמש:<input type="text" name="username" value=""><br>
סיסמה:<input type="password" name="password" value=""><br>
<input type="submit" value="היכנס!"><br>
</form>
<br>
<?php
$error=$_GET['error'];
if ($error==1) {
    echo "שם המשתמש או הסיסמה לא נכונים!";
}
;
?>
</center>
</body>
</html>

这是登录操作代码:

<?php

include('config.php');

$username=$_GET['username'];
$password=$_GET['password'];
$userpassword=md5($password);

$checkquery=mysql_query("SELECT * FROM `users` WHERE `username`='$username' AND `password`='$userpassword'");
if (mysql_num_rows($checkquery)>0) {
    $row=mysql_query("SELECT `userid` FROM `users` WHERE `username`='$username' AND `password`='$userpassword'");
    $data=mysql_fetch_array($row);
    $userid=$data['userid'];
    setcookie("userid", $userid);
    setcookie("username", $username);
    setcookie("userpassword", $userpassword);
    echo "<script type=\"text/javascript\">window.location='index.php';</script>";
} else {
    echo "<script type=\"text/javascript\">window.location='login.php?error=1';</script>";
}
?>

这是config.php:

<?php

$link=mysql_connect("mysql9.000webhost.com", "a2803040_dbase", "I won't publish the password here"); 
mysql_select_db("a2803040_dbase", $link);
mysql_set_charset("utf8", $link);

?>

请尽快帮助我!正如我所说,我在我编写的另一个网站上尝试了相同的代码并且它有效

4

3 回答 3

6

你的意思是,“它为什么不让我登录”,或者“为什么这是一个 2 岁的孩子可以破解的可怕的不安全代码,而且我很幸运我的客户没有起诉我”?

为初学者阅读有关“SQL注入”的内容,然后是PDO,然后使用由在此类事情上有多年经验的人制作的身份验证库

于 2013-10-25T12:09:41.140 回答
2

你发布了你的 for viaPOST方法,但你正在尝试GET它,改变

$_GET['username'];

$_POST['username']; or $_REQUEST['username'];
于 2013-10-25T12:06:23.393 回答
0

看在上帝的份上!!!

正如其他人所说,SQL 注入是问题之一。甚至不要试图将这些废话投入生产。

如果用户输入用户名会发生什么' = '' or '' = '???

向服务器发出的选择查询将是:

SELECT * FROM usersWHERE username='' or '' = '' AND password='whatever you want'

因此返回true,因此允许用户进入应用程序。

必须使用mysql_escape_string来制作代码中的所有句子,但特别是登录和与安全相关的句子(检查权限等)。

$safe_username = mysql_escape_string( $username ) 
$safe_password = mysql_escape_string( $userpassword )
$checkquery=mysql_query("SELECT * FROM `users` WHERE `username`='$safe_username' AND `password`='$safe_password'");

这将解决您的问题,因为在这种情况下,发送给服务器的选择将是:

SELECT * FROM usersWHERE username='\' or \'\' = \'' AND password='whatever you want'

它会在数据库中正确查找用户名 ' 或 '' = '。

其他问题是:

1) 密码必须加密保存。md5 哈希可以提供帮助。2) 建议在加密密码时添加一些盐:而不是 md5( 密码 ) -> md5( 密码 + 用户名 + 创建日期 ),这样即使有人用密码 3) 公开表格,密码也不容易被猜到当然,这必须放在安全连接中(即 https://),否则您应该在客户端中加密密码

于 2013-10-25T12:21:04.823 回答