V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
RickyC
V2EX  ›  PHP

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

  •  
  •   RickyC · Dec 21, 2020 · 2744 views
    This topic created in 1956 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   ·   2351 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 01:00 · PVG 09:00 · LAX 18:00 · JFK 21:00
    ♥ Do have faith in what you're doing.