V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zarte
V2EX  ›  问与答

关于 sql 防注入问题

  •  
  •   zarte · 2020-09-10 17:59:19 +08:00 · 985 次点击
    这是一个创建于 1561 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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