V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
RickyC
V2EX  ›  PHP

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

  •  
  •   RickyC · 2020-12-21 10:50:33 +08:00 · 2232 次点击
    这是一个创建于 1435 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这样可以防止注入吗?

    5 条回复    2020-12-21 15:40:10 +08:00
    jswh
        1
    jswh  
       2020-12-21 11:00:31 +08:00   ❤️ 1
    传参呢?要写裸 sql,防注入的基本的方法是不要自己拼接 sql 字符串,用 mysql_escape_string 处理传入的参数,和你具体用什么方法没什么太大关系。
    6jiayoung
        2
    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
        3
    RickyC  
    OP
       2020-12-21 11:14:34 +08:00
    @6jiayoung 就是还需要自己预处理, 是吧
    ben1024
        4
    ben1024  
       2020-12-21 11:16:54 +08:00   ❤️ 1
    不太安全,参数实体转义能规避一些,
    直接执行 SQL 一般用来执行一些复杂且固定的 SQL
    dyllen
        5
    dyllen  
       2020-12-21 15:40:10 +08:00
    防止注入要用参数绑定的形式去查询。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5587 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 07:01 · PVG 15:01 · LAX 23:01 · JFK 02:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.