zoukankan      html  css  js  c++  java
  • 基于约束的SQL攻击

    基于约束的SQL攻击

    学习了一个新的基于SQL的攻击方式,应该也是大多数不断堆积【空格】的攻击方式的原理

    原理

    在SQL中执行字符串处理时,字符串末尾的空格符将会被删除

    数据库User表为:

    ID Username Password
    1 V1ce0ye 123456

    User表中字段详细数据为:

    类型 长度
    ID int 11
    Username varchar 20
    Password varchar 255

    其中Username字段限定字符长度为20,此时如果我们注册一个用户,Username为V1ce0ye[30*空格]1,Password为654321,语句为

    INSERT User (Username,Password) VALUES('V1ce0ye             1','654321')
    

    此时数据表中

    ID Username Password
    1 V1ce0ye 123456
    2 V1ce0ye 654321

    此时存在两个Username为V1ce0ye的列,而此时以V1ce0ye与654321这个密码登录时,会登录查询到的第一个用户数据也就是原始用户,造成登录。

    思考

    像这种漏洞危害还是较小,大部分后端都会以最先查到的username的password进行匹配,以最新的几率很小

    而且一般管理员用户与普通用户存储在不同的表,不太可能去越权登录到管理员用户,危害大多为普通用户进行登录。

    修复

    • 后端代码检测输入数据长度
    • 将需要防护字段设置为UNIQUE
  • 相关阅读:
    指针类型
    集合类型
    VMware打开虚拟机没反应的解决方案(全面汇总)
    redis主从|哨兵|集群模式
    MYSQL一次千万级连表查询优化
    StackExchange.Redis通用封装类分享
    Redis-五种数据类型解析
    Redis并发问题
    C#委托和事件
    Invoke 和 BeginInvoke 的区别
  • 原文地址:https://www.cnblogs.com/vincebye/p/12730692.html
Copyright © 2011-2022 走看看