zarte
V2EX  ›  问与答

关于 sql 防注入问题

  •  
  •   zarte · Sep 10, 2020 · 1432 views
    This topic created in 2118 days ago, the information mentioned may be changed or developed.

    为啥不用参数?老项目改起来麻烦。
    查询语句原本拼接前后都有单引号的前提下。全局过滤单引号,可行不?

    6 replies    2020-09-11 09:39:46 +08:00
    opengps
        1
    opengps  
       Sep 10, 2020
    直接替换不大行,因为损害了用户输入字符(如果用户输入单引号,你给他清空吗?)
    你可以在入参部分,进行全局替换单引号为两个单引号(第一个标识注释,第二个表示用户字符)。其实这么做挺麻烦,因为程序涉及到输入的地方,每一步都得替换
    eviladan0s
        2
    eviladan0s  
       Sep 10, 2020
    替换或者过滤清除其实都有风险,安全上太多类似案例了,如果你要搞可以把过滤函数发出来大家帮你审审
    greatbody
        3
    greatbody  
       Sep 10, 2020
    老项目考虑下渐进式的重构。
    UT 覆盖上,然后重构。
    zarte
        4
    zarte  
    OP
       Sep 11, 2020
    @greatbody 重构是不可能重构的
    zarte
        5
    zarte  
    OP
       Sep 11, 2020
    @opengps 只考虑防注入效果,其他的小问题。
    zarte
        6
    zarte  
    OP
       Sep 11, 2020
    @eviladan0s
    ```
    foreach (string sqlKey in patten2)
    {
    if (_sWord.IndexOf(sqlKey) >= 0)
    {
    //只要存在一个可能出现 Sql 注入的参数,则直接退出
    result = true;
    break;
    }
    }
    ```
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   927 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 21:00 · PVG 05:00 · LAX 14:00 · JFK 17:00
    ♥ Do have faith in what you're doing.