2013-10-25 30 views
-1

此登录代码有什么问题? 相同的代码工作在不同的网站,我编程此登录代码有什么问题? SQL和PHP

这是登录表单:

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

?> 

请尽快帮我! 正如我所说的,我想在一个不同的网站,我编程相同的代码和它的工作

+1

ok SIR我们可以帮你尽快。 –

+0

补充评论:请开始使用PDO。 http://stackoverflow.com/questions/601300/what-is-sql-injection – Duikboot

+1

这里有很多问题,使用'md5','mysql_ *'函数已被弃用,使用cookie来存储登录信息,SQL注入漏洞... – naththedeveloper

回答

2

你张贴通过POST方法你,但你想GET它, 变化

$_GET['username']; 

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

我试过了,它没有工作 – Hagaymosko

+0

什么是你得到的错误/? – user2092317

+0

没有错误。这只是需要我login.php?error = 1 – Hagaymosko

6

您的意思是“为什么不登录我”,或者“为什么这是一个2岁孩子可能破解的可怕代码,我很幸运,我的客户没有'起诉我'?

去阅读一些有关“SQL注入”对于初学者,那么PDO,那么在这样的事情

+0

或者你会告诉我为什么它不安全,并告诉我如何改变它,所以它会工作,并将获得保障? – Hagaymosko

+0

@ user2918521您似乎没有对用户输入进行清理(不要信任来自用户的输入,因为它可能有害)。如果有人能够访问服务器的数据库(这很可能),就像你甚至不信任的管理员那样,你可以将密码存储为“纯文本”(md5散列与纯文本存储相似)获取所有用户的密码。该名单继续...:p –

+0

不 - 请亲自学习如何成为程序员,然后提出问题。我告诉你什么主题开始阅读 – jmadsen

0

在上帝的份使用由有人做认证库多年的经验!

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

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

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

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 * FROM users WHERE username = '\' 或\ '\'= \ '' AND password ='任何你想要的'

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

其他问题是:

1)密码必须保存加密。 MD5散列可以帮助。 2)建议在加密密码时添加一些盐:而不是md5(密码) - > md5(密码+用户名+创建日期),因此即使有人使用密码泄露密码,也不容易猜出密码。 )当然,这必须放在一个安全的连接(即https://),否则你应该密码密码在客户端

+0

真的,不要提出即将被弃用的方法和没有查询绑定的解决方案 – jmadsen