SQL 在 PHP Phalcon 中注入
SQL injection in PHP Phalcon
我刚刚学习 SQL 注入并尝试注入我的基于 PHP 的代码(使用 PHP Phalcon 框架)。我尝试在我的登录中进行 SQL 注入。但是,当我尝试进行注入时,我无法做到,我不知道这是由于我的代码已经从 SQL 注入中变得健壮还是我以错误的方式进行了注入。
我的登录部分包含电子邮件和密码。对于电子邮件部分,我插入 test@test.com' or 1=1
并插入一些随机密码。
但是,有一条错误消息显示如下:
Scanning error before ' LIMIT :APL0:' when parsing: SELECT [Test\Models\Login].* FROM [TEST\Models\Login] WHERE email='test@test.com' or 1=1 --' LIMIT :APL0: (119)
这是验证登录码:
public function verifyLogin ($email, $password) {
$records = $this->findFirst("email='$email'");
if ($records && sha1($password)==$records->password) {
return ($records->id);
}
return (false);
}
如何知道是我的注入错误还是代码已经健壮了?如果注入仍然错误,如何解决?
无论是否是 Phalcon,您编写代码的方式都容易 SQL 注入。我不确定您是否真的想要在上面的脚本中执行SQL注入,或者您正在尝试找出防止它的方法。
如果是后者,你可以随时绑定你的参数:
public function verifyLogin ($email, $password) {
$record = $this->findFirst(
'conditions' => 'email = :email:',
'bind' => [
'email' => $email,
],
);
if ($record && sha1($password) == $records->password) {
return ($records->id);
}
return false;
}
以上代码使用了绑定参数,这是 PDO 的一个特性,可以更好地防止 SQL 注入。
我刚刚学习 SQL 注入并尝试注入我的基于 PHP 的代码(使用 PHP Phalcon 框架)。我尝试在我的登录中进行 SQL 注入。但是,当我尝试进行注入时,我无法做到,我不知道这是由于我的代码已经从 SQL 注入中变得健壮还是我以错误的方式进行了注入。
我的登录部分包含电子邮件和密码。对于电子邮件部分,我插入 test@test.com' or 1=1
并插入一些随机密码。
但是,有一条错误消息显示如下:
Scanning error before ' LIMIT :APL0:' when parsing: SELECT [Test\Models\Login].* FROM [TEST\Models\Login] WHERE email='test@test.com' or 1=1 --' LIMIT :APL0: (119)
这是验证登录码:
public function verifyLogin ($email, $password) {
$records = $this->findFirst("email='$email'");
if ($records && sha1($password)==$records->password) {
return ($records->id);
}
return (false);
}
如何知道是我的注入错误还是代码已经健壮了?如果注入仍然错误,如何解决?
无论是否是 Phalcon,您编写代码的方式都容易 SQL 注入。我不确定您是否真的想要在上面的脚本中执行SQL注入,或者您正在尝试找出防止它的方法。
如果是后者,你可以随时绑定你的参数:
public function verifyLogin ($email, $password) {
$record = $this->findFirst(
'conditions' => 'email = :email:',
'bind' => [
'email' => $email,
],
);
if ($record && sha1($password) == $records->password) {
return ($records->id);
}
return false;
}
以上代码使用了绑定参数,这是 PDO 的一个特性,可以更好地防止 SQL 注入。