ThinkPHP 里直接 DB::query($sql)直接调用 sql 语句, 安全吗?

2020-12-21 10:50:33 +08:00
 RickyC

这样可以防止注入吗?

2111 次点击
所在节点    PHP
5 条回复
jswh
2020-12-21 11:00:31 +08:00
传参呢?要写裸 sql,防注入的基本的方法是不要自己拼接 sql 字符串,用 mysql_escape_string 处理传入的参数,和你具体用什么方法没什么太大关系。
6jiayoung
2020-12-21 11:01:30 +08:00
// 错误的
Db::query("select * from think_user where id=$id AND status=$statis");
// 正确的
Db::query("select * from think_user where id=? AND status=?", [ $id, $status]);

一定程度上可以,不能保证绝对安全把。
RickyC
2020-12-21 11:14:34 +08:00
@6jiayoung 就是还需要自己预处理, 是吧
ben1024
2020-12-21 11:16:54 +08:00
不太安全,参数实体转义能规避一些,
直接执行 SQL 一般用来执行一些复杂且固定的 SQL
dyllen
2020-12-21 15:40:10 +08:00
防止注入要用参数绑定的形式去查询。

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

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

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

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

© 2021 V2EX