浅谈SQL注入

SQL注入是什么概念?为什么要防止SQL注入

         sql注入,是hacker利用程序漏洞,在交互的时候,如,url地址栏,搜索的文本框,填入sql关键字,如果程序没有做替换关键字等措施,直接拼接sql语句。那么,执行的就是,客户恶意提交的sql语句,后果不堪设想。

                    1.可以查看没有权限查看的数据

                       如:根据关键字搜索用户,在文本框末尾输入 or 1=1,要执行的语句select * from birthdayWish where id=-1 and birth_userId=-1 or 1=1, 获取了所有的数据。sql语句where  xxx and xxx是取交集,但是or 是取并集,也就是说,虽然你前面有n个条件,但是只要符合or后面的条件,都会搜索出来。1=1就是所有数据了.(如果or 后面又有个and,要同时符合and 后面的条件 相当于先获得or(1=1 and xxx)括号内交集的条件.)

 

         2.如果服务器没有设置隐藏详细错误信息,可以分析SQL服务器系统信息,web服务器配置信息

 报: 在将 nvarchar 值 'dbo' 转换成数据类型 int 时失败。sa用户显示'dbo',其他显示今天sql登录名,如:'myloginname'

把user换成db_name(),

在将 nvarchar 值 'test-erp' 转换成数据类型 int 时失败。

 

人家马上知道,你数据库用的SQLServer,而且是sa系统管理员的身份。数据库名是'test-erp' 。

文本框输入 and (select count(*) from msysobjects)>0 不报错,就知道是Access数据库,输入and (select count(*) from sysobjects)>0
不报错,就知道是Sqlserver数据库。

 

行 26: else if (Request.QueryString["id"] != null)行 27: sql += " and Corp_ID=" + Convert.ToInt32(Request.QueryString["id"]) + "";行 28: SqlCommand cmd = new SqlCommand(sql, cn);

 e:\Test\amandag\SqlZhuru.aspx.cs    行: 27


版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.1
 

别人注入后,马上能看出你服务器配置信息文件:.net 4.0的环境,连服务器路径都出来了,为黑客其他漏洞攻击提供了信息。他知道的越多,越容易攻破。

 

如何检查是否可以SQL注入:

       如果localhosts/showdetail.asp?key=xxx能查到结果,xxx后面加上 and 1=1有结果,改为and 1=2没结果,那么这么网站没写防止SQL注入的程序   

 

常用解决方案:

1.使用存储过程+参数化查询,SqlPameter.(参数话,net机制把输入的所有内容都当作参数条件,你输入 zhangsan or 1=1),查找的是名字叫zhangsan or 1=1的,当然找不到
2.使用HtmlEncode方法,转译

3.写一个Replace方法,在提交前,过滤关键字.

实践中,1+3合用的比较多。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值