【ASP.NET】——SQL注入

关于SQL注入,师父给验收项目的时候就提过。但一直也没深入去想是怎么回事~~在学ASP.NET,做新闻发布系统的时候,又遇到了,这次不能放过了~~

定义

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。[1] 比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.——百度百科

实验

系统中增加新闻类别SQL语句:

insert intocategoryinfo(name)values (‘" + caName + "‘)

当我们在界面输入:娱乐八卦,点击增加新闻类别时

娱乐八卦将替换" + caName + "而执行。

于是,当我们在文本框中输入:

娱乐新闻‘)delete categoryinfo where id=13--

这段替换了" + caName + "会形成:

insert into categoryinfo(name)values (‘娱乐新闻‘)delete categoryinfo where id=4--‘)";

相当于:

insert into categoryinfo(name)values (‘娱乐新闻‘);

delete categoryinfo where id=4--‘)";

于是执行后前后对比效果为:

前:                            后:

 
  

这就是SQL注入的一种效果。通过这种方法,将我们的数据库进行了破坏。通过SQL注入,是黑客得到数据库内部信息的一种方法,为了咱们系统的安全性,我们需要做好防护。

如何避免:

对于上面的这种SQL注入,有效的方法就是:用传参进行SQL语句,不用拼接字符串。

传字符串语句:

 public int test()        {
            int res;
            using (cmd = new SqlCommand("insert into categoryinfo(name)values (@caName)",GetConn()))
            {
                cmd.Parameters .Add(new SqlParameter ("@caName","SQL注入成功"));

                res = cmd.ExecuteNonQuery();
            }
            return res;
        }

改为传参:

 public int test()        {
            int res;
            using (cmd = new SqlCommand("insert into categoryinfo(name)values (@caName)",GetConn()))
            {
                cmd.Parameters.Add(new SqlParameter("@caName", "'娱乐新闻')delete categoryinfo where id=4--"));//SQL注入失败

                res = cmd.ExecuteNonQuery();
            }
            return res;
        }

这只是一种避免方法。

那平时我们需要做哪些防护呢:

1.限制用户非正确格式输入。

2.对特殊字符进行转换。即“’”在SQL语句运行时,已不再是“‘”,可能是一个数字,这样就不会再对SQL语句造成混乱。

3.报错时,尽可能减少信息量。最好将错误信息进行包装。因为专业人可以根据报的黄页分析出库里有哪些表等信息......

4.将重要信息进行加密。以免轻易泄露。

5.不用拼接字符串...

......

这是我所能想到的一些特别基础的预防方法~肯定还有更高级的手段。这还需要我们继续探索!

时间: 2024-10-20 05:55:46

【ASP.NET】——SQL注入的相关文章

Asp.net SQL注入实例分享

?? Asp.net SQL注入实例分享 1.web.config里加链接字段: <configuration> <connectionStrings > <add name="myConnectionString" connectionString="Server=10.231.248.177;Database=testdb;User ID=sa;Password=pa$$word;Trusted_Connection=False;"

SQL注入专题--整理帖

SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别, 所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉.        随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根据程序返回的结果,获

SQL注入思路与手工猜解大进阶

什么叫SQL注入? 许多网站程序在编写时,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,(一般是在浏览器地址栏进行,通过正常的www端口访问)根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入. SQL注入的思路 思路最重要.其实好多人都不知道SQL到底能做什么呢?这里总结一下SQL注入入侵的总体的思路: 1. SQL注入漏洞的判断,即寻找注入点 2. 判断后台数据库类型 3. 确定XP_CMDSHELL

asp.net利用HttpModule实现防sql注入和加载样式和JS文件

1.新建一个类,实现IHttpModule接口 代码如下: public class SqlHttpModule : IHttpModule { public void Dispose() { } public void Init(HttpApplication context) { context.AcquireRequestState += new EventHandler(context_AcquireRequestState); } } 在实现接口的Init方法时,我们选择了Acquir

网络安全系列之四 手工SQL注入(ASP)

SQL注入是黑客对数据库进行攻击的常用手段之一,其核心思想在于:黑客在正常的需要调用数据库数据的URL后面构造一段数据库查询代码,然后根据返回的结果,从而获得想要的某些数据.下面我们就对之前已经搭建好的渗透平台进行SQL注入,最终目的是获得网站的管理员账号和密码.目标服务器IP地址:192.168.80.129,黑客主机IP地址:192.168.80.128. (1)寻找注入点 随便打开一个网页,注意观察URL. 注入点必定是类似"http://192.168.80.129/shownews.a

防SQL注入代码(ASP版)

<% Dim Fy_Url,Fy_a,Fy_x,Fy_Cs(),Fy_Cl,Fy_Ts,Fy_Zx '---定义部份 头------ Fy_Cl = 1 '处理方式:1=提示信息,2=转向页面,3=先提示再转向 Fy_Zx = "index.Asp" '出错时转向的页面 '---定义部份 尾------ On Error Resume Next Fy_Url=Request.ServerVariables("QUERY_STRING") Fy_a=split(

ASP.NET MVC 5使用Filter过滤Action参数防止sql注入,让你代码安全简洁

在开发程序的过程中,稍微不注意就会隐含有sql注入的危险.今天我就来说下,ASP.NET mvc 5使用Filter过滤Action参数防止sql注入,让你代码安全简洁.不用每下地方对参数的值都进行检查,看是用户输入的内容是否有危险的sql.如果每个地方都要加有几个缺点: 1.工作量大 2.容易遗漏 3.不容易维护 下面我通过写一个过滤防止sql的特性类,对Action执行前对Action的参数进行处理,如果有其值有sql语句,就会这些非法字符替换为空字符串. 一.sql注入的例子: 上面的输入

实验十一:sql注入之asp+access案例

仅供学习参考,2013.5.8日学习整理记录 潜江水产案例(sql注入之asp+access)实验目的通过注入漏洞上传config.asp实验过程如下所示:实验前提:在服务器上要搭建好IIS开始实验把已经编好的web通过共享的方式上传到服务器上,然后解压这个潜江水产的数据包文件,然后把这个数据包导入到c:\inetpub\wwwroot下面,接着通过命令行inetmgr打开搭建好的默认网站,然后在默认网站中的主目录下面指定潜江水产的路径,然后在配置中的设置中启用父路径,在指引中添加index.a

Asp SQL注入获取某服务器权限

1.1 Asp SQL注入获取某服务器权限 对于Asp类型网站SQL注入,如果当前数据库为MSSQL,且权限为sa的情况下,可以通过恢复xp_cmdshell方法来直接执行命令,甚至有的可能直接是system权限.可以执行命令直接添加账号和密码,如果开启3389则可以直接登录服务器.当然也有站点存在SQL注入,但其权限较低,例如public权限,则可以通过sql注入获取其管理员表中的账号及密码,通过登录后台寻找漏洞获取webshell,本文是sqlmap攻防系列专栏的一个补充,通过sqlmap可