Php 我的代码不受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

这是我第一次使用会话登录系统。 只是想知道,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>';
}           
?>
我会改变
$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);