这是从SQL注入安全吗?
我一直在阅读并询问一个关于SQL注入安全查询的问题,每个人都说我应该使用PDO,所以我只启用了我的MYSQL PDO扩展并做了一个简单的查询。
所以这是我的代码:
public static function Add($catName, $catDescr = "", $catImgURL = "", $catSubLevel = 0, $catSubID = 0)
{
try
{
include_once "db_config.php";
$DBH = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass);
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
$STH = $DBH->prepare("INSERT INTO cat (catName, catDescr, catImg, catSubLevel, catSubID)
VALUES ('$catName', '$catDescr', '$catImgURL', $catSubLevel, $catSubID)");
$STH->execute();
}
catch (PDOException $e)
{
echo $e->getMessage();
}
}
所以一切正常,似乎安全,但是当我做这样的事情时:
Cat::Add("Test Cat", "' OR 1==1 --");
它给了我
警告:PDOStatement :: execute()[pdostatement.execute]:SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法中有错误; 检查第25行的www mCat.php中第2行第1行附近'== 1 - ','',0,0')使用的正确语法对应的MySQL服务器版本的手册
我想这是因为我添加了$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
以便了解何时出现错误。
无论如何,主要问题是 - 这种方法是否安全的SQL注入?
不,它不是 - 否则你的实验不会出现错误信息。 PDO不会奇迹般地知道哪些字符来自变量以及哪些形成查询。 相反,你应该这样做:
$STH = $DBH->prepare('INSERT INTO cat ' .
'(catName, catDescr, catImg, catSubLevel, catSubID) ' .
'VALUES (?, ?, ?, ?, ?)');
$values = array($catName, $catDescr, $catImgURL, $catSubLevel, $catSubID);
$STH->execute($values);
链接地址: http://www.djcxy.com/p/93697.html
上一篇: Is this safe from SQL Injection?
下一篇: How to write update query using some {$variable} with example