博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
防范Sql注入式攻击
阅读量:6815 次
发布时间:2019-06-26

本文共 1483 字,大约阅读时间需要 4 分钟。

hot3.png

       Sql注入式攻击是指利用设计上的漏洞,在目标服务器上运行Sql 命令以及进行其他方式的攻击

动态生成Sql命令时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要原因

比如一个在线书店,可以根据用户的输入关键字搜索相关的图书。

string name = GetUserInput("BookName");string script = "select table_book where book_name like '%" + name + RunSql(script)RunSql(script);

如果

name= "'; select @@servername where ''='";

这样就可以得到DB Server的名字.

还以在线书店为例,用户只有登陆后才能察看自己的帐户信息,这样做是无可置疑的,然而用户验证的代码如下

//id和password直接来自用户的输入。未做处理

string id = GetUserInput("UserID");string password = GetUserInput("UserPassword");tring script = "select * from table_user where User_ID = '" + id + "' and User_Password? = '" + password + "' ";RunSql(script);

如果用户输入的password为“' or ''=' ”,那么生成的script就为:

select * from table_user where User_ID = 'UserID' and User_Password = '' or ''=''

这样一来,即使不知道用户的密码也可以察看该用户的帐户信息了

再比如,入侵者会把一些巧妙伪装的代码嵌入到你动态生成的Sql命令中,比如:

Delete table_Book where 1 = 1use master--

上面的例子都是一些简单的示例,攻击者还可能通过sql的漏洞对操作系统进行攻击,比如运行

[xp_cmdshell],[xp_regread]

当然实际上的攻击没有这么简单,攻击者还会利用系统设计的其他漏洞。比如程序把数据库返回的出错信息没有进行转换就直接输出给用户看,那么攻击者就设计一些sql语句诱导系统返回需要的信息

从上面的这些例子可以看出,对数据库访问权限的设计不当,给与每一个数据库连接太多的权限,甚至dbo或sa的权限,也是sql注入式攻击利用的主要漏洞之一。

 

防范sql注入式攻击

 

最小权限原则。特别是不要用dbo或者sa账户,为不同的类型的动作或者组建使用不同的账户,最小权限原则适用于所有与安全有关的场合

对用户输入进行检查。对一些特殊字符,比如单引号,双引号,分号,逗号,冒号,连接号等进行转换或者过滤;使用强数据类型,比如你需要用户输入一个整数,就要把用户输入的数据转换成整数形式;限制用户输入的长度等等。这些检查要放在server运行,client提交的任何东西都是不可信的

使用存储过程。如果一定要使用sq语句,那么用标准的方式组建sql语句,比如可以利用parameters对象,避免用字符串直接拼sq命令。

当sql运行出错时,不要把数据库返回的错误信息全部显示给用户,错误信息经常会透露一些数据库设计的细节

针对常用的sql注入式攻击方式对症下药

转载于:https://my.oschina.net/u/2260184/blog/518408

你可能感兴趣的文章
【翻译】地形教程-简介
查看>>
什么是Docker
查看>>
生产CPU使用率180%问题排查
查看>>
一些 gem
查看>>
qt creator 添加调试工具
查看>>
springmvc拦截器
查看>>
三篇文章了解 TiDB 技术内幕 —— 谈调度
查看>>
JsonSort 对json排序
查看>>
MySQL常识篇
查看>>
一起学Java7新功能扩展——深入历险分享(一)
查看>>
关于parentNode和firstChild的一些坑
查看>>
JSP六种标准动作
查看>>
HTML DOM 节点
查看>>
hadoop两大核心之一:MapReduce总结
查看>>
JDBC & MySql - datetime类型字段的NULL值处理
查看>>
Redis 集群常用命令
查看>>
sql 更新数据
查看>>
java LinkedList简单运用
查看>>
Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)
查看>>
常用正则表达式列表
查看>>