Php 我的代码不受SQL注入的影响吗?简单会话登录
这是我第一次使用会话登录系统。 只是想知道,SQL注入是否安全Php 我的代码不受SQL注入的影响吗?简单会话登录,php,mysql,Php,Mysql,这是我第一次使用会话登录系统。 只是想知道,SQL注入是否安全 <?php $username = $_POST['username']; $password = $_POST['password']; if(isset($username, $password)) { if(get_magic_quotes_gpc()) { $ousername = stripslashes($username); $uusername = mysql_real
<?php
$username = $_POST['username'];
$password = $_POST['password'];
if(isset($username, $password)) {
if(get_magic_quotes_gpc()) {
$ousername = stripslashes($username);
$uusername = mysql_real_escape_string(stripslashes($username));
$opassword = stripslashes($_POST['password']);
} else {
$uusername = mysql_real_escape_string($username);
$opassword = $password;
}
$req = mysql_query('select password,id from users where username="'.$uusername.'"');
$dn = mysql_fetch_array($req);
if($dn['password']==$opassword and mysql_num_rows($req)>0)
{
$form = false;
$_SESSION['username'] = $_POST['username'];
$_SESSION['userid'] = $dn['id'];
echo 'Logged in m8';
} else {
$form = true;
$message = 'The username or password is incorrect.';
}
} else {
$form = true;
}
if($form)
{
if(isset($message)) {
echo '<div class="message">'.$message.'</div>';
}
?>
我会改变
$opassword=$password代码>
到
sql注入也可以通过密码字段完成。虽然您的代码还可以,但您的保护想法是错误的
mysql\u real\u escape\u字符串不能防止注入。它对字符串进行格式化。
只要字符串的格式正确,它们就是安全的
当您试图使用相同的函数格式化非字符串(例如数字)时,问题就开始了。
它将变得完全无用,并且SQL易受攻击
因此,您可以保留当前代码,但在将来,一旦需要使用另一个查询部分,您将需要以不同的格式对其进行格式化。以下是一套完整的规则:
当然,不要转义密码!如果我有一个像wef5623'sdf
这样的密码,它永远不会让我进去
顺便说一句,我不知道为什么你只对一个值使用这么多变量-$\u POST['username']、$username、$uusername、$uusername、$uusername-这是什么?你在哪里调用mysql\u connect
?神奇的引号、mysql\u*函数。。。。请使用PDO。现在是2013年。让我们拥抱新改进的更安全的API。mysql\uquot.
已被弃用,将被删除。为什么要坚持使用不推荐的函数?这段代码中隐含的意思是,您以明文形式存储密码;你不应该那样做。至少,你应该用盐来散列你的密码。我会试试这个,谢谢!他们在SQL中不使用密码。所以,没有通过密码字段进行SQL注入。-1当然..同意(@YourCommonSense)我认为没有人在密码中使用计划文本,不是吗?我不知道如何通过+1使用sql注入这个答案是有信息的,有意义的。。。
$opassword = mysql_real_escape_string($password);