这个问题在这里已经有答案了:
如何防止php中的sql注入(28个答案)
你能用php安全地存储密码吗[重复](4个答案)
在php变量或php常量中以纯文本形式存储密码可以吗(8个答案)
两年前关门了。
我知道我必须使用pdo,但我现在不能更新它,因为旧版本中有大量php文件。如何使我的代码安全并防止sql注入?
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
$sql="SELECT * FROM user WHERE username='$myusername' AND password='$mypassword'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($count==1)
{
$_SESSION["myusername"]=$myusername;
echo"<script type='text/javascript'>
window.location.href='dashboard.php';
</script>";
}
else
{
$sql="SELECT * FROM user WHERE email='$myusername' AND password='$mypassword'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($count==1)
{
$sql="SELECT username FROM user WHERE email='$myusername'";
$result=mysql_query($sql);
$myusername=mysql_result($result,0);
$_SESSION["myusername"]=$myusername;
echo"<script type='text/javascript'>
window.location.href='dashboard.php';
</script>";
}
else
{
echo"<script type='text/javascript'>
alert('The username or password you entered is incorrect');
window.location.href='login.php';
</script>";
}
}
3条答案
按热度按时间9bfwbjaz1#
安全是个大字,。。。。正如您自己所建议的,您实际上不应该使用这些方法,而是应该升级到这些函数不推荐使用的地方。
但是现在。。这很有帮助
http://php.net/manual/en/function.mysql-real-escape-string.php
http://php.net/manual/en/function.sprintf.php
在任何地方都要这样做,使用变量/输入数据,用于查询。
d4so4syb2#
这是一个非常宽泛的问题,但我还是会尽力帮助你的。
一般信息
mysql_
函数已被弃用并从php7中完全删除,因此不要使用它们。您的代码不受sql注入的保护,请使用准备好的语句和函数bind_param()绑定查询参数。
我已经用准备好的语句和错误处理重写了你的代码。我将张贴在下面的结果,因为它是相当大的。
您不会散列您的密码,并将其作为纯文本存储在数据库中。这是一个重大的安全风险!
创建一个这样散列密码的函数。
一个函数来验证它们。
表单验证
你不做任何形式的验证,这意味着人们可以只注册用户名
; DROP TABLE user
它可以删除你的用户表。通过编写基本函数来检查输入是否包含特殊字符,您可以阻止它。
然后你就可以验证
$_POST
像这样的输入。这是用准备好的语句和错误处理重写的代码。
eit6fx6z3#
使用可以使用
而不是
添加这个小查询后,管理员页面无法绕过。这个页面会给你一个错误信息。但是试着把你的代码更新到最新版本