RickyC
V2EX  ›  PHP

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

  •  
  •   RickyC · Dec 21, 2020 · 2778 views
    This topic created in 1971 days ago, the information mentioned may be changed or developed.

    这样可以防止注入吗?

    5 replies    2020-12-21 15:40:10 +08:00
    jswh
        1
    jswh  
       Dec 21, 2020   ❤️ 1
    传参呢?要写裸 sql,防注入的基本的方法是不要自己拼接 sql 字符串,用 mysql_escape_string 处理传入的参数,和你具体用什么方法没什么太大关系。
    6jiayoung
        2
    6jiayoung  
       Dec 21, 2020
    // 错误的
    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
       Dec 21, 2020
    @6jiayoung 就是还需要自己预处理, 是吧
    ben1024
        4
    ben1024  
       Dec 21, 2020   ❤️ 1
    不太安全,参数实体转义能规避一些,
    直接执行 SQL 一般用来执行一些复杂且固定的 SQL
    dyllen
        5
    dyllen  
       Dec 21, 2020
    防止注入要用参数绑定的形式去查询。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2598 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 00:48 · PVG 08:48 · LAX 17:48 · JFK 20:48
    ♥ Do have faith in what you're doing.