我的代码是否可以安全地从SQL注入?简单会话登录

时间:2013-02-22 03:04:42

标签: php mysql

这是我第一次使用SESSIONS的登录系统。 只是想知道,如果SQL注入安全吗?

<?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>';
}           
?>

我之前在我的highscores脚本上得到了SQL注入,所以我想知道我的简单会话登录脚本是否有任何,我40%有一个.. 什么通常导致SQL注入? 谢谢!

2 个答案:

答案 0 :(得分:1)

虽然你的代码没问题,但你的想法的保护是错误的 mysql_real_escape_string不能防止注入。它确实格式化字符串。 只要你的字符串格式正确,它们就是安全的。

当您尝试使用相同的函数格式化非字符串时,问题就开始了 - 例如数字 它变得完全没用,你的SQL容易受到攻击。

因此,您可以保留当前的代码,但将来,只要您需要使用其他查询部分 - 您将需要以不同的方式格式化它。以下是一套完整规则:In PHP when submitting strings to the database should I take care of illegal characters using htmlspecialchars() or use a regular expression?

当然不要忘记密码!如果我有一个像wef5623'sdf这样的密码 - 它永远不会让我进来!

顺便说一下,我不知道为什么你只使用了很多变量只有一个值 - $ _POST ['username'],$ username,$ uusername,$ ousername - 这是什么?

答案 1 :(得分:-3)

我会改变      $opassword = $password;

 $opassword = mysql_real_escape_string($password);

sql注入也可以通过密码字段完成。