php – PDO查询 – 从SQL注入是否安全?
发布时间:2020-12-13 18:09:09 所属栏目:PHP教程 来源:网络整理
导读:我一直在阅读并询问有关SQL注入安全查询的问题,每个人都说我应该使用PDO,所以我只启用了我的MYSQL PDO扩展并进行了简单的查询. 所以这是我的代码: public static function Add($catName,$catDescr = "",$catImgURL = "",$catSubLevel = 0,$catSubID = 0){ t
我一直在阅读并询问有关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 --"); 它给了我
我想这是因为我添加了$DBH-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_WARNING);为了看我什么时候有错误. 无论如何,主要的问题是 – 这种方法是否可以安全地从SQL注入?
不,它不是 – 否则你的实验不会出现错误信息. PDO并不神奇地知道哪些字符来自变量,哪些字符来自查询.相反,你应该做这样的事情:
$STH = $DBH->prepare('INSERT INTO cat ' . '(catName,catSubID) ' . 'VALUES (?,?,?)'); $values = array($catName,$catDescr,$catImgURL,$catSubID); $STH->execute($values); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |