首页  ·  知识 ·  数据库
SQL注入攻击及防范
网友    MS-SQL  编辑:dezai   图片来源:网络
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.程序所使用的数据库帐户最少的权限

本文作者:网友 来源:网络
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读