Php 我的代码易受SQL注入攻击吗

Php 我的代码易受SQL注入攻击吗,php,sql,Php,Sql,我只是想知道我的代码在SQL注入中是否有漏洞 我有这个登录代码,我知道使用它是否安全,是否可以防止任何SQL注入 这是我的密码 <?php class LTID { private $db; function __construct($DB_con) { $this->db = $DB_con; } public function login($username,$password) { try { $st

我只是想知道我的代码在SQL注入中是否有漏洞 我有这个登录代码,我知道使用它是否安全,是否可以防止任何SQL注入

这是我的密码

  <?php
  class LTID
  {
  private $db;

  function __construct($DB_con)
  {
    $this->db = $DB_con;
  }
  public function login($username,$password)
  {
    try
    {
        $stmt = $this->db->prepare("SELECT * FROM users WHERE username=:username LIMIT 1");
        $stmt->execute(array(':username'=>$username));
        $userRow=$stmt->fetch(PDO::FETCH_ASSOC);

            if($stmt->rowCount() > 0)
            {
                if(password_verify($password, $userRow['password']))
                {
                    $_SESSION['user_session'] = $userRow['user_id']
                    return true;
                }
                else
                {
                    return false;
                }
            }       
    }
    catch(PDOException $e)
    {
        echo $e->getMessage();
     }
   }
 }
 ?>


准备好的查询不受SQL注入的影响,因为值没有与SQL代码混合。

您使用的是
PDO
,并且您使用的是准备好的语句,因此您的代码不易受SQL注入的影响

从我所看到的情况来看,密码在数据库中也是散列的,因为您使用
password\u-verify
来验证密码,所以我假设密码是用
password\u-hash
散列的


总的来说,您的代码看起来非常安全

不,因为您使用的是预处理语句,所以不易受攻击。我使用这种代码安全吗?预处理语句可以。我有一个问题,从数据库中取出密码,你不能检查数据库本身的密码吗。我认为这样会更安全,因为你的密码在数据库中始终是安全的。@Sk_u你这么说是什么意思?@Sk-密码\u hash()/password\u verify()的答案是“否”,因为它是一个PHP函数,而不是数据库函数;你也不想改变它:这被认为是当今处理密码散列的最强大的方法,不能轻易地用任何替代方法取代。是的,我的密码是我想象出来的。你的代码绝对没有问题。干得好@迪姆卢卡斯。我有点困惑,因为sk上面的评论让我有点困惑。他说的确实让人困惑,但从数据库中获取密码并对照用户的输入进行检查并没有什么错。PHP脚本不能被截获,没有人能看到服务器上运行的是什么,所以,同样,不用担心你的代码是完美的。是的。这就是为什么我对评论有点困惑的原因