求教高手------Asp。Net中如何防止SQL注入,即如何过滤关键字

作者&投稿:漆包 (若有异议请与网页底部的电邮联系)
asp+sql 如何有效的防止sql注入~

SQL注入,一般由 request 提交而来,所以过滤 request参数即可。
比如,正常获取 id 为 request("id") ,获取后,对其进行强制转为int型,如
id = cint(request.querystring("id"))
同理,凡是数字型的,一律进行判断是否数字或强制转换。
如果是字符型的,要写入SQL语句的,一律对单引号进行转义,如
SQLserver和Access中,替换成两个单引号。MYSQL中替换成 \' 等。
可以写成一个固定的函数来代替request,可以达到防止注入的目的。
网上也有一些通用的过滤程序,可以解决大部分问题,但更多的时候,也并不能防止注入的发生,同时,也会给正常提交带来一些麻烦。

防止sql注入,最简单的办法就是不要拼接sql,而是采用SqlParameter参数化形式,如果条件可能有可能没有,可以采用:
string sql = "select * from xx where 1=1";
if(true){
sql += " and id=@id";
command.Parameters.Add(new SqlParameter
}

如果非要拼接sql,那么对于数值型,拼接前判断下是否数值,
字符串类型拼接前进行str.Replace("'", "''");// 把一个单引号替换为两个单引号
就可以避免sql注入了

你用正则,效率低,而且成效也不见得好

替换单引号,即把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义。再来看前面的例子,"select * from Users where login = ’’’ or ’’1’’=’’1’ AND password = ’’’ or ’’1’’=’’1’"显然会得到与"select * from Users where login = ’’ or ’1’=’1’ AND password = ’’ or ’1’=’1’"不同的结果。
  
删除用户输入内容中的所有连字符,防止攻击者构造出类如"select * from Users where login = ’mas’ —— AND password =’’"之类的查询,因为这类查询的后半部分已经被注释掉,不再有效,攻击者只要知道一个合法的用户登录名称,根本不需要知道用户的密码就可以顺利获得访问权限。using System;
using System.Text.RegularExpressions;

class Test
{
static void Main()
{
Regex r = new Regex("admin|super|root");
string username = "I_am_admin";
if (r.IsMatch(username))
{
Console.WriteLine("不合法的用户名");
}
}
}
这是一个简单的小例子,你可以仿照这样去做

最简单的方法你用ORM来做 就不存在SQL语句了比如.net 3.5以后的linq 就是不错的办法

<%Dim QueryData,FormData,QueryName,Name
QueryData="'|''|;|,|*|%|and|exec|insert|select|update|delete|count|master|truncate|char|declare|where|set|declare|mid|chr|set|chr(37)|net"
FormData=""'对 get query 值 的过滤.
if request.QueryString<>"" then
adoData=split(QueryData,"|")
FOR EACH QueryName IN Request.QueryString
for i=0 to ubound(adoData)
If Instr(LCase(request.QueryString(QueryName)),adoData(i))<>0 Then
Response.Write "<Script Language=javascript>alert('请不要提交非法请求!');history.back(-1)</Script>"
Response.end
End If
NEXT
NEXT
End if
%>

<%
dim sql_injdata,SQL_inj,SQL_Get,SQL_Data
SQL_injdata = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"
SQL_inj = split(SQL_Injdata,"|") If Request.QueryString<>"" Then
For Each SQL_Get In Request.QueryString
For SQL_Data=0 To Ubound(SQL_inj)
if instr(ucase(Request.QueryString(SQL_Get)),ucase(Sql_Inj(Sql_DATA)))>0 Then
Response.Write "<Script Language=javascript>alert('请不要在参数中包含非法字符尝试注入!');history.back(-1)</Script>"
Response.end
end if
next
Next
End If 'check end
%> 函数放在数据库连接字符串那里即可

用参数化,就是sqlparameter,还有就是用存储过程


教你成为电脑高手
看完这些,你就是电脑高手了 http:\/\/wenku.baidu.com\/view\/18507e1b6bd97f192279e95f.html QQ使用的七大非常规秘籍 http:\/\/tieba.baidu.com\/f?kz=799280777 用最简单的方法让QQ上的好友露出原形 http:\/\/blog.163.com\/youcai_fan\/blog\/static\/1244964302010313104247387\/ 介绍用QQ看电视的方法 http...

我想请教一下高手,在excel中表中我想实现当单元格的数值超过范围的时...
使用if函数就可以实现。假设白细胞数目在A2,在B2中使用“=if(a2<4.0,"↓",if(a2>10,"↑","")”

本公司的工龄公司计算有点复杂,求教高手教我Excel里有没有公式可以计算...
是不是求工龄工资?公式如下,下拉 如下图 F2=IF(E2="","",ROUND((NOW()-E2)\/365,1))G2=IF(F2<1,"",IF(F2<2,30,IF(F2<3,60,IF(F2<4,90,IF(F2<5,120,150)))

我家电脑启动BIOSS,是这个样子的,请看图 请高手教下
每个型号的主板BIOS虽然有所不同,但大同小异。你参照下面这个做吧。记着调整以后要按F10保存退出。1.启动计算机,并按住DEL键不放,直到出现BIOS设置窗口(通常为蓝色背景,黄色英文字)。2.选择并进入第二项,“BIOS SETUP”(BIOS设置)。在里面找到包含BOOT文字的项或组,并找到依次排列的“FIRST”...

求高手教破解南软极域多媒体教学系统的方法
你可以这样:打开program files文件夹,往下找,有一个南软科技的东西,然后进去,进入里面那个文件夹,按下ctrl+a,全选,再按下delete删除(注意:只是按下出现提示,不要确认,放在那里)打开计算机→属性→设备→设备管理器,找到网络适配器,禁用,马上关闭,在开启。+·+·+·+ 简易方法:打开控制...

100分请教VB高手
例4.用牛顿迭代法求一元三次方程f(x)=aX3+bx2+cx+d=0的根。f(x)=aX3+bx2+cx+d g(x)=f'(x)=3aX2+2bx+c 其VB程序如下:x0 = 1 Do Until Abs(x - x0) <= y x = x0 f = a * x ^ 3 + b * x ^ 2 + c * x + d g = 3 * a * x ^ 2 + 2 * b ...

关于三个令我佩服的人的思考(二):罗永浩背后的男人-许岑
今天开始分享对第二个令我佩服的人的思考。他就是许岑。许岑是何许人也。得到APP上是这样介绍的:许岑,跨界学习高手,对幻灯片制作、吉他、英语等技能都快速掌握到专业级,同时输出他学习的过程得到相应教程。这几天许岑在得到APP上推出《如何成为有效学习的高手》,介绍了许岑浓缩的高效学习方法。前几...

请教DIY高手玻璃刀是滚轮式的好使还是固定式金刚石
当然是滚轮式的玻璃刀好用了。金刚石玻璃刀在划玻璃时,需要找到玻璃刀与玻璃间的一个角度,这个角度如果没有找好,在玻璃上划出的刀痕很粗。物理性质 硬度 摩氏硬度10,新摩氏硬度15,显微硬度10000kg\/mm2,显微硬度比石英高1000倍,比刚玉高150倍。金刚石硬度具有方向性,八面体晶面硬度大于菱形十二...

请教化学高手,急!
方法已经讲的很清楚了,按照相应的化学方程式计算就好了 我不是计算器!!!1、甲基红的变色范围是PH4.2~6.2,因此用氢氧化钠滴定磷酸,终点的产物是磷酸二氢钠,根据化学方程式 H3PO4+NaOH==NaH2PO4+H2O 可以算出待测液总磷酸的物质的量,样品中的磷酸为此待测液的10倍,算出质量求出质量分数...

请教电脑高手,我的电脑每天定期自动关机怎么解决?
改动你电脑的时间与你所设置的定时关机时间有所偏离,不是长久之计,还是在运行中输入shutdown -a方便 参考资料:http:\/\/www.18126.cn 定时关机技巧全集 一、win9x关机 关机是大家常做的一件事,不少人还传统地使用着点击开始/关闭系统/关闭计算机的方 法。是不是太古老了?来吧朋友,今天跟我...

雷波县17597992447: 求教高手 - -----Asp.Net中如何防止SQL注入,即如何过滤关键字
茌养妇炎: 替换单引号,即把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义.再来看前面的例子,"select * from Users where login = ''' or ''1''=''1' AND password = ''' or ''1''=''1'"显然会得到与...

雷波县17597992447: 清高手明确的告诉我什么是ASP.NET他有什么用,学好了以后要做些什么? -
茌养妇炎: Asp.net是建立在通用语言运行时刻库(CLR)上的应用程序框架.他用来在服务器端构建功能强大的web应用程序.Asp.net提供了几个超越以前web开发模式的优点: ·增强的性能.Asp.net是运行在服务器端的编译后的CLR代码,而不是像...

雷波县17597992447: 到底该怎样学习ASP.NET的制作,有高手把自己学习的经历讲下,让后辈我学习下看! -
茌养妇炎: 要学ASP,首先肯定要安装一个IIS平台,然后把你asp.net程序安装上去,之后建议你去买一本入门教材,不要直接上网下载,因为网下免费下来的一般都不会珍惜,自己花钱买来的比较会用心看,而且书上写的例题比较多,学ASP首先要学好ASP基础语法,比如 Messagebox的用法,response.write的用法,还有数据库sql的联接,access数据库连接等等,有了这些基础之后呢,再把书上写的一些简单的例题,自己在电脑输入进去,看看能否实现,实现之后再试着改改例题里的数据,改成其他题目,看看能否实现,这样慢慢的你就能掌握ASP这门语言了,这就是我自己学习ASP的入门方法,希望对你有帮助!如果还有问题,可以Q我,

雷波县17597992447: asp.net:请教高手 -
茌养妇炎: 你学的是Java!你想转成ASP.NET对吧?我回答你一下!首先,你记住一点,Java和ASP.NET其实从技术上来说,或者从语言基础和操作流程来说,基本上都一样,可以说是百分之八十五都是相同的,剩下的百分之十都是互通的,也就是说它...

雷波县17597992447: 请高手帮忙 - --asp.net 如何添加,修改,删除记录 -
茌养妇炎: //数据库操作类public class DB { //创建数据库连接字符串 private static string connStr="server=.;uid=sa;pwd=;database=table1"; private static SqlConnection getConn() { return new SqlConnection(connStr); } //完成所有的单向操作insert update...

雷波县17597992447: asp.net登陆.注销问题. -
茌养妇炎: 用FormsAuthentication作登入就可以 先配置WEB.CONFIG //不允许匿名登入 接着在你登入页面的CS文件里正常写登入那些代码,之后加上 FormsAuthentication.RedirectFromLoginPage(txtname.Text, false); 这个将验证用户名,false表示是否...

雷波县17597992447: 怎么样学好ASP.NET? -
茌养妇炎: 第一步:学习HTML与CSS 这并不需要去学一大堆的诸如Dreamweaver,Firework之类的各种网页设计工具,关键是理解HTML网页嵌套的block结构与CSS的box模型.许多ASP.NET控件最后都必须转化为HTML.而且,(div+css)是当前主流的...

雷波县17597992447: 小弟准备过完年去学ASP.NET,目前买了本书自学.但是很多东西看不懂.求高手们推荐一个ASP.NET学习网站! -
茌养妇炎: http://www.w3school.com.cn/aspnet/index.asp 很全,而且更新很及时.例子也很易懂,推荐 不仅仅是asp.net,javascript,html等这个网站上都有,都是很全面,更新及时的.从入门到高手,都可以用

雷波县17597992447: ASP.NET新手,关于登录页面的问题,求高手帮帮忙 -
茌养妇炎: if (function.CheckNull(context.Request.Params["username"], context.Request.Params["pwd"])) { string username = contex...

雷波县17597992447: ASP.NET可以用什么来编写,最正规的有哪些,用什么查看,请高手指点!!! -
茌养妇炎: Visual Studio.Net 2003 或者 Visual Studio.Net 2005 是Microsoft 的编译器 asp.net 也是由Microsoft 开发的 so很适合,而且操作简单,效果好,一般不会遇到 bug 我没见到其他能编写asp.net的编译器 可能你说的是编写asp.net的语言有多种推荐C# C#和java C语法大致相同 模仿java设计,功能各有优点,asp.net 简单些 asp.net 写的网页并不是asp 而是aspx 要查看它用IE就够了,如果是站点的话在你的计算机上配置IIs 在访问就好咯.有问题可加qq咨询 330255273

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网