zoukankan      html  css  js  c++  java
  • SQL注入攻击及防范

    一.什么是SQL注入
    1.SQL注入的定义
         SQL注入(SQL Injection) 利用了程序中的SQL的漏洞,进行攻击的方法。

    2.SQL注入举例
      1)利用SQL语法错误获取数据库表的结构信息:
          攻击者要成功实施一次攻击,需要了解哪个表和列可用。SQL Server默认的行为是,当不正确查询运行时返回错误消息。

          例如攻击者输入用户名:“'having 1=1;--”,数据库将返回包含表名和代码查询中第一列的错误消息;

          而group by语句可以更进一步确定查询中的列:“'group by 表名.列名 having 1=1;--”,

          数据库将返回查询中的下一列;攻击者可以继续附加group by语句,直到不再收到错误消息。
      2)获取数据库内容信息:
          攻击者可以利用变换错误消息,获取数据库中存储的数据,

          例如输入用户名:“'union select min(username),1 from users where username>1;--”,

          数据库将返回表中的第一个用户名。

          攻击者可以使用同样的SQL注入,用password代替username得到用户账户的密码,以此类推,可以获取数据库表中的每条记录。
      3)使用的 '-- 或 ' or 1=1-- 缩短查询条件
           select username from users
           Where username=’admin’--’and password=’123’
      4)修改数据库表的内容:
           攻击者通过“';”来结束一条查询语句,然后附加破坏性的SQL语句,

           例如:“';delete from Accounts”或“';insert into Users (……)”。
           select username from users
           Where username=’admin’;drop table users --’
           and password=’123’
    5)通过SQL访问操作系统
    Select username from users
    Where username=’admin’; EXEC xp_cmdshell 'net user haker 123456 /add’--’ and password=’123’

     
    二.如何防范SQL注入
    1.避免拼接SQL
    2.使用存储过程
    3.使用参数化SQL
         SqlParameter可以提供类型和长度检查,并自动转义用户输入。
         Select username from users where username=@username 
         And password=@password
    4.限制长度
    5.录入验证,类型检查
         Select title from news where id=123; delete from news
    6.过滤或转义危险字符
        inputSQL.Replace("'", "''");
        ’  ;  --   /*  */  xp_
    7.在服务器上处理错误:
        成功的SQL注入攻击不一定导致错误;导致错误的SQL注入通常是攻击者正在收集数据库信息,是攻击的前兆。

        在 try..catch..finally中处理错误;
        <compilation debug="false"/>;
        <customErrors mode="RemoteOnly"/>。
    8.程序所使用的数据库帐户最少的权限

  • 相关阅读:
    Index(4.3)
    第七次会议(4.22)
    第六次会议(4.15)
    第五次会议(4.8)
    第四次会议(4.2)
    第三次会议(3.25)
    第二次扩大会议(3.19)
    第二次会议(3.25)
    第一次会议(3.11)
    牛客练习赛25A求1-x因数和(离散求和)
  • 原文地址:https://www.cnblogs.com/anjou/p/2082489.html
Copyright © 2011-2022 走看看