Php 我的代码易受SQL注入攻击吗
我只是想知道我的代码在SQL注入中是否有漏洞 我有这个登录代码,我知道使用它是否安全,是否可以防止任何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
<?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脚本不能被截获,没有人能看到服务器上运行的是什么,所以,同样,不用担心你的代码是完美的。是的。这就是为什么我对评论有点困惑的原因