这个登录代码有什么问题? SQL和PHP

时间:2013-10-25 12:04:25

标签: php mysql sql

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

这是登录表单:

<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);

?>

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

3 个答案:

答案 0 :(得分:6)

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

阅读有关&#34; SQL注入&#34;对于初学者,然后是PDO,然后使用由具有多年此类经验的人制作的认证库

答案 1 :(得分:2)

您是通过POST方法发布的,但是您正试图GET, 改变

$_GET['username'];

$_POST['username']; or $_REQUEST['username'];

答案 2 :(得分:0)

为了上帝的缘故!!!

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

如果用户输入用户名' = '' or '' = ' ???

会发生什么

发给服务器的select查询将是:

  

SELECT * FROM users WHERE username =''或''=''AND password ='无论你想要什么'

因此返回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将是:

  

SELECT * FROM users WHERE username ='\'或\'\'= \''和password ='无论你想要什么'

它将正确查看数据库中的用户名'或''='。

其他问题是:

1)密码必须保存加密。 md5哈希可以帮助。 2)建议在加密密码时添加一些盐:代替md5(密码) - &gt; md5(密码+用户名+创建日期)所以即使有人用密码披露了表格,密码也不容易被猜到 3)当然,这必须放在一个安全的连接(即https://),否则你应该在客户端密码密码