如果对于用户输入的内容做白名单过滤,不允许符号,是不是就没有 SQL 注入的可能性了? - V2EX
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
xieqiqiang00
V2EX    MySQL

如果对于用户输入的内容做白名单过滤,不允许符号,是不是就没有 SQL 注入的可能性了?

  •  1
     
  •   xieqiqiang00 Mar 21, 2021 5309 views
    This topic created in 1894 days ago, the information mentioned may be changed or developed.

    比如只允许英文中文数字和少量符号,其他所有符号都替换成[code_xxx]。这种不管怎么拼接 SQL 语句都没法注入了吧。

    21 replies    2021-03-23 08:45:37 +08:00
    oott123
        1
    oott123  
       Mar 21, 2021 via Android   2
    注入往往发生在你意料不到的地方,所以正确的做法永远是 prepare 再传参数

    举个例子:宽字节注入
    singerll
        2
    singerll  
       Mar 21, 2021 via Android
    sql 注入不一定发生在用户输入,任何会连接数据库查数的地方,都可能发生注入。
    zhuawadao
        3
    zhuawadao  
       Mar 21, 2021
    曾记得有个网址,输入账户密码,密码输入 1=1 就能验证通过
    340244120w
        4
    340244120w  
       Mar 21, 2021 via iPhone
    直接说结论,当然可以。
    而且 order by 也都是用白名单,想用 prepare 也用不了啊
    FucUrFrd
        5
    FucUrFrd  
       Mar 21, 2021 via Android
    Prepare, 什么鬼问题,SQL 注入在 Facebook Google Amazon 早就被解决了
    weirdo
        6
    weirdo  
       Mar 21, 2021
    用 prepare 不就好了么,只要用字符串拼接 sql,那就有被注入的风险
    des
        7
    des  
       Mar 21, 2021
    尽量不要弄这种,老老实实用 prepare 。
    另外讲个笑话,icloud 不允许有人叫“true”
    zhuweiyou
        8
    zhuweiyou  
       Mar 21, 2021
    你这做法不对, 直接 prepare 就行了, 不需要去手动过滤
    FucUrFrd
        9
    FucUrFrd  
       Mar 21, 2021 via Android
    @des 90 年代的代码,没人记得去改
    des
        10
    des  
       Mar 21, 2021
    @FucUrFrd 那祝你好运
    abcbuzhiming
        11
    abcbuzhiming  
       Mar 21, 2021
    你要是能保证过滤百分之百那当然没有注入,问题就在于你保证不了的,楼上已经有人说了,注入都来自意外的地方
    clf
        12
    clf  
       Mar 21, 2021
    不用 SQL 就没有 SQL 注入了 /doge

    prepare 是最好的做法,绑定变量使用预编译语句是预防 SQL 注入的最佳方式。
    BeautifulSoap
        13
    BeautifulSoap  
       Mar 21, 2021
    t/761752

    我前几天的帖子正好应景

    不用 prepare statement 的话,在你想象不到的地方永远都会存在 sql 注入
    cest
        14
    cest  
       Mar 21, 2021
    prepare 防 SQL 注入
    非常严的白名单防 unicode 控制字符对你的肉眼注入
    CRVV
        15
    CRVV  
       Mar 21, 2021   2
    如果你用的是符合 SQL 标准的数据库,比如 PostgreSQL,只要字符串里没有单引号,就不会有 SQL 注入。

    如果你要用 MySQL,那请认真阅读 https://dev.mysql.com/doc/refman/8.0/en/string-literals.html
    注意 MySQL 的文档里面还有一句是
    In certain client environments, it may also be necessary to escape NUL or Control+Z.
    escape 的结果还取决于 client environment 的。

    如果有自信把这些奇怪的 escape 规则都搞对,那当然就可以 “不管怎么拼接 SQL 语句都没法注入了”
    如果没有这个自信,就别这么玩了。
    xieqiqiang00
        16
    xieqiqiang00  
    OP
       Mar 22, 2021 via Android
    @oott123 搞白名单的话,这类字符直接会被抛弃吧
    DanielYao
        17
    DanielYao  
       Mar 22, 2021
    参数化 sql,一般都能防住
    Chenamy2017
        18
    Chenamy2017  
       Mar 22, 2021
    @zhuawadao 赶紧去检查了我们的产品,果然通过登陆界面可以注入 SQL !
    ERRASYNCTYPE
        19
    ERRASYNCTYPE  
       Mar 22, 2021
    你这人肉穷举
    zhuawadao
        20
    zhuawadao  
       Mar 22, 2021
    @Chenamy2017 上报公司拿奖金
    meepo3927
        21
    meepo3927  
       Mar 23, 2021
    可以防注入了, 但是这样更麻烦了吧
    About     Help     Advertise     Blog     API     FAQ     Solana     2630 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 66ms UTC 15:47 PVG 23:47 LAX 08:47 JFK 11:47
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86