如标题中所述,我遇到了SQL注入错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 1
我该如何解决?下面提供的是我的PHP代码和HTML代码
PHP:
if($_POST['submit']=='Change')
{
$err = array();
if(!$_POST['password1'] || !$_POST['passwordnew1'])
$err[] = 'All the fields must be filled in!';
if(!count($err))
{
$_POST['password1'] = mysql_real_escape_string($_POST['password1']);
$_POST['passwordnew1'] = mysql_real_escape_string($_POST['passwordnew1']);
$row = mysql_fetch_assoc(mysql_query("SELECT id,username FROM members WHERE username='{$_SESSION['username']}' AND pass='".md5($_POST['password1'])."'"));
if($row['username'])
{
$querynewpass = mysql_query("UPDATE members SET pass='".md5($_POST['passwordnew1'])."' WHERE username='{$_SESSION['username']}'");
$result = mysql_query($querynewpass) or die(mysql_error());
}
else $err[]='Wrong Password To Start With!';
}
if($err)
$_SESSION['msg']['passwordchange-err'] = implode('<br />',$err);
header("Location: members.php?id=" . $_SESSION['username']);
exit;
}
Run Code Online (Sandbox Code Playgroud)
HTML:
<form action="" method="post">
<?php
if($_SESSION['msg']['passwordchange-err'])
{
echo '<div class="err">'.$_SESSION['msg']['passwordchange-err'].'</div>';
unset($_SESSION['msg']['passwordchange-err']);
}
if($_SESSION['msg']['passwordchange-success'])
{
echo '<div class="success">'.$_SESSION['msg']['passwordchange-success'].'</div>';
unset($_SESSION['msg']['passwordchange-success']);
}
?>
<label class="grey" for="password1">Current Password:</label>
<input class="field" type="password" name="password1" id="password1" value="" size="23" />
<label class="grey" for="password">New Password:</label>
<input class="field" type="password" name="passwordnew1" id="passwordnew1" size="23" />
<input type="submit" name="submit" value="Change" class="bt_register" style="margin-left: 382px;" />
</form>
Run Code Online (Sandbox Code Playgroud)
我让它在用户能够更改/更新其密码的地方工作,但是,当他们单击表单上的"更改"按钮时,它们将被定向到我上面发布的错误消息,如果他们单击刷新按钮,则只有这样他们被重定向回他们的个人资料并且已经进行了更改.所以我的主要问题是,如何在没有mysql错误消息的情况下让它完全正常工作?任何帮助将非常感激!
这里有一些问题,不仅可以发表评论.对不起,我无法确切地看到你的错误是什么,但是如果你遵循#1点,它就会消失.
不要使用该mysql库.它已被弃用,并已在PHP 5.5中被删除(最终!).它目前仅适用于您,因为您的PHP版本已过期.您应该使用PDO或MySQLi.有关PDO的信息,请查看此文章:http://net.tutsplus.com/tutorials/php/php-database-access-are-you-doing-it-correctly/
不要将您正在查看的脚本中未生成的任何变量放入查询中,这包括SESSION变量.您只需要在应用程序中存在一个缺陷,用户就可以将数据注入SESSION.将每个变量视为脏.如果你知道它不是 - 100%肯定 - 然后把它当作脏.如果您使用PDO或MySQLi准备好的语句,这不是问题.
您应该按用户ID引用用户,而不是用户名.更快更安全.
永远不会md5()在数据库中存储密码原始或简单加密(如使用plain ).至少,您可以使用以下内容进行加密:crypt($password, '$2a$07$sillystring' . sha1($password) . '$')并通过重新密码验证密码并查看其是否匹配.这是一种非常基本,更安全的方式.有很多关于密码腌制的文章更深入,值得一试.
| 归档时间: |
|
| 查看次数: |
237 次 |
| 最近记录: |