Mysqli 和 PDO 能解决数据库注入问题吗

2015-08-10 10:22:20 +08:00
 ivito
看着PDO接口里也有执行SQL语句的函数,如何解决注入问题呢
4091 次点击
所在节点    PHP
23 条回复
realpg
2015-08-10 10:27:25 +08:00
从旧时候过来的人,一个很喜欢注入别人程序的人,写程序时候自带防注入功能。

已经下意识的任何可能传入查询的非可控部分进行假想会被怎么注入,虽然写程序会慢一点,但是质量好。

这种意识养成后,就会逐渐进化到写啥代码想的都很多会不会有问题,写出代码需要调试DEBUG的时候就少。但是代价就是写东西会变慢,而且逐渐有强迫症写啥都追求质量速度就快不了……
realpg
2015-08-10 10:29:53 +08:00
而且跟我合作过的或者我教出来的PHP程序员,都有很好的习惯。外部数值变量进来一律intval、floatval,字符串变量任何时候带入查询不走有过滤功能的querybuilder时候一律严格处理防注

另外,曾经的公司设立过Anti Injection奖金……督促养成这个习惯
anubiskong
2015-08-10 10:35:01 +08:00
mongodb
MrJing1992
2015-08-10 10:45:20 +08:00
使用 PDOStatement 类。
jiangzhuo
2015-08-10 11:04:23 +08:00
@anubiskong 很多用mongodb的不考虑防注入的,往往是被注入的最惨的。
zhugeliang
2015-08-10 11:31:35 +08:00
php的话有很多方法可以过滤啊
incompatible
2015-08-10 11:44:38 +08:00
@realpg 我觉得你说了一大篇都没说到点子上
最好的防注入的习惯就是使用参数绑定而不是自己拼接sql
tabris17
2015-08-10 11:46:59 +08:00
SQL Injection是不经过滤自行拼接SQL语句造成的,和使用什么访问接口无关
msg7086
2015-08-10 11:49:15 +08:00
就是意识问题。
有这个意识的人,就算用最原始的接口也能写出安全的代码来。
500miles
2015-08-10 11:55:39 +08:00
使用PDO 就完全可以对 sql Inject say goodbye了..

前提是 : 一定要使用参数绑定 并且声明 不要在语言层面 帮你进行解析参数,组织sql... 而是发送sql语句 和 参数变量 给mysql去处理...
lijianying10
2015-08-10 11:59:14 +08:00
用stmt可好?目前我就是这么做的。
yakczh
2015-08-10 12:19:28 +08:00
不用参数绑带, $pdo->execute($params); 这样所有参数都当成字符串,会统一加上引号,有引号的会加反斜线
anubiskong
2015-08-10 13:02:07 +08:00
@jiangzhuo 你举个例子
breeswish
2015-08-10 13:30:52 +08:00
@anubiskong MongoDB 的查询是可以注入的,例如利用语言特性传一个 {$ne:xxx} 对象(而不是一个字符串)
breeswish
2015-08-10 13:31:50 +08:00
使用参数化查询就可以解决注入问题,PDO 支持参数化查询,所以,要使用 PDO 解决注入问题请使用 PDO 的参数化查询功能
anubiskong
2015-08-10 13:43:59 +08:00
@breeswish 所以说是php的问题不是mongo的?
minvacai
2015-08-10 13:53:53 +08:00
所以说用python的话只要把用户传来的内容都当字符串处理就没问题了是吧……
breeswish
2015-08-10 14:53:59 +08:00
@anubiskong 我觉得两个都没问题,对于 PHP 来说,允许传入参数转换为对象是一个有用的 feature,对于 MongoDB 来说,用这种方式查询也是个 feature…… 问题在于开发者可能会盲目地认为 MongoDB 不会有注入风险忽视了这些特性和因素——传给 MongoDB 的参数「需要」限制类型。

就像当初 SQL 那样.. 一开始大家怎么会想得到直接拼接字符串会拼出问题来呢……虽然现在看来是很显然的,不过也许当初就是大家都没意识到
jiangzhuo
2015-08-10 17:08:36 +08:00
@anubiskong cnodejs论坛好像就被注入过不止一次,因为是开源项目很快就能把漏洞补上了
jadecoder
2015-08-10 17:29:56 +08:00
我在用PDO,但是一直没明白这个能不能防宽字节注入

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/212035

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX