首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这段代码在PDO中是sql注入安全的吗?

这段代码在PDO中是sql注入安全的吗?
EN

Stack Overflow用户
提问于 2011-05-05 01:01:44
回答 4查看 372关注 0票数 0

代码(新手):

代码语言:javascript
复制
        if(isset($_POST['selection']))
        {
            include_once 'pdo_init.php';
            $params_str = str_repeat('?,',count($_POST['selection']));
            $params_str = substr($params_str,0,-1);
            $res = $pdo->prepare('DELETE FROM funcionario WHERE codigo in ('.$params_str.')');
            if($res->execute($_POST['selection']))
            {
                return json_encode(array(
                    'success' => 1,
                    'msg'     => 'os registros foram deletados com sucesso!'
                ));
            } else {
                return json_encode(array(
                    'success' => 0,
                    'msg'     => 'nao admitimos sql-injection aqui seu safado!'
                ));
            }
        } else {
            # error out
            break;
        }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-05 01:27:15

老生常谈地说,不,它不是100%安全的(这通常是从准备好的语句中获得的)。这是因为在内部使用MySQL,PDO emulates prepared statements。这意味着数据被转义,因此对于PDO (至少使用默认设置),使用预准备语句比转义没有任何好处。

您可以通过在连接上设置PDO::setAttribute(PDO::ATTR_EMULATE_PREPARES, 0)来更改此设置。

MySQLi确实使用了真正的预准备语句,所以我建议您改用它。

票数 4
EN

Stack Overflow用户

发布于 2011-05-05 01:08:29

看起来您是在动态地进行参数化查询。

参数化查询是注入安全的。

但请记住也要注意content itself

票数 3
EN

Stack Overflow用户

发布于 2011-05-05 01:13:40

只要允许用户删除表中的所有行,它似乎是安全的(因为如果用户愿意,她可以发送一个包含表中所有codigo的帖子)。

这是不可能欺骗您的查询触及其他表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5887113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档