CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

怎么防止SQL的注入式攻击呢?

楼主accpdingyi(未来精英)2005-06-02 12:28:28 在 .NET技术 / ASP.NET 提问

asp.net也可以有这种攻击方式吗? 问题点数:0、回复次数:18Top

1 楼zhouabc(试着专业一点)回复于 2005-06-02 12:30:50 得分 0

有,听说使用存储过程可以防止.Top

2 楼boytomato(深爱一人叫颖的女孩!)回复于 2005-06-02 12:33:02 得分 0

 
   
  一个函数,代替ASP中的Request函数,可以对一切的SQL注入Say   NO,函数如下:  
   
  Function   SafeRequest(ParaName,ParaType)  
   
  ‘---   传入参数   ---  
  ‘ParaName:参数名称-字符型  
  ‘ParaType:参数类型-数字型(1表示以上参数是数字,0表示以上参数为字符)  
  Dim   ParaValue  
  ParaValue=Request(ParaName)  
  If   ParaType=1   then  
  If   not   isNumeric(ParaValue)   then  
  Response.write   “参数”   &   ParaName   &   “必须为数字型!”  
  Response.end  
  End   if  
  Else  
  ParaValue=replace(ParaValue,”’”,”’’”)  
  End   if  
  SafeRequest=ParaValue  
  End   function  
   
   
  http://www.cnblogs.com/gwazy/archive/2005/05/12/153752.html  
   
  Top

3 楼boytomato(深爱一人叫颖的女孩!)回复于 2005-06-02 12:37:06 得分 0

1,用存储过程,不过直接用   用户输入累加形成   sql   查询....  
  2   对用户输入进行严格控制....字符串处理进行过虑   .....    
  petshop   中对用户输入的参数的判断:  
  http://www.cnblogs.com/gwazy/archive/2005/05/12/153752.html  
         
  Top

4 楼lovefootball(蟑螂(生活就是扯淡--做人要放低姿态))回复于 2005-06-02 12:40:11 得分 0

1、用存储过程  
  2、用SqlParameter  
  3、过滤字符串Top

5 楼liuqm(blue)回复于 2005-06-02 12:41:37 得分 0

先用Replace()  
   
   
  在就是用带参数的sql语句Top

6 楼jonescheng(小块头无大智慧)回复于 2005-06-02 12:41:47 得分 0

在客户端对输入的字符串进行转义符的转换,和检测过滤  
  这样可以过滤一层,  
  在服务端在对敏感字符在进行一次检查,应该可以  
  Top

7 楼CMIC(大象)回复于 2005-06-02 12:41:51 得分 0

DataAdapter.Update(DataSet)或  
   
  参数方式  
  insert   into   t1(a1....)  
  value{@a1}  
   
   
  这l两种方式sql特殊符号都会知道转义,一般不会有什么问题。Top

8 楼jonescheng(小块头无大智慧)回复于 2005-06-02 12:42:45 得分 0

function   chkNonChar(obj){  
   
  var   strInput;  
  var   strNonChar   =   new   Array();  
   
  strInput   =   obj.value;  
   
  //本系统非法字符集,要允许加用以下字符,请在前加上“//”  
  strNonChar[0]   =   "\'"; //禁用'  
  strNonChar[1]   =   "\""; //禁用"  
  strNonChar[2]   =   "\\"; //禁用\  
  strNonChar[3]   =   "~"; //禁用~  
  strNonChar[4]   =   "#"; //禁用#  
  strNonChar[5]   =   "$"; //禁用$  
  strNonChar[6]   =   "%"; //禁用%  
  strNonChar[7]   =   "^"; //禁用^  
  strNonChar[8]   =   "&"; //禁用&  
  strNonChar[9]   =   "*"; //禁用*  
  strNonChar[10]   =   "<"; //禁用<  
  strNonChar[11]   =   ">"; //禁用>  
  strNonChar[12]   =   "/"; //禁用/  
  strNonChar[13]   =   "?"; //禁用?  
  strNonChar[14]   =   "|"; //禁用|  
  strNonChar[15]   =   "+"; //禁用+  
  strNonChar[16]   =   "`"; //禁用`  
   
  if   (strInput   ==   '')   return   true;  
   
  //在输入的参数中,查找是否有系统定义非法字符  
  for   (var   i   =   0;i   <   strNonChar.length;   i++){  
  if   (   strInput.indexOf(strNonChar[i])   >   -1   )   {  
  alert('【系统提示】\n\n输入的文字中含有本系统所不允许的非法字符“'   +   strNonChar[i]   +   '”   !\n\n请重新输入或换用别的字符替代。')  
  obj.focus();  
  obj.select();  
  return   false;  
  }  
  }  
  return   true;  
  }Top

9 楼hackate(兰花开香入梦境,独思佳人亦飘然!!)回复于 2005-06-02 12:44:13 得分 0

用参数形式的就不会了Top

10 楼sunjian_qi(sonne)回复于 2005-06-02 12:49:20 得分 0

mark一下Top

11 楼ghchen()回复于 2005-06-02 12:50:58 得分 0

来晚了,我知道的楼上的都说了Top

12 楼hchxxzx(NET?摸到一点门槛)回复于 2005-06-02 12:51:36 得分 0

用参数式写入方式可以有效的杜绝注入式攻击,以下为示例  
   
        //用参数方式写入数据库  
        OleDbCommand   myComm   =   this.conn.CreateCommand();  
        //定义SQL语句  
        string   sql   =   "insert   into   "   +   this.dbTable   +   "(filename,filenewname,filesize,filemime,fileblob,uploadtime)   "   +  
          "   values(@filename,@filenewname,@filesize,@filemime,@fileblob,@uploadtime)";  
   
        myComm.CommandText   =   sql;  
        myComm.Parameters.Add("@filename",OleDbType.VarWChar).Value   =   fileName;  
        myComm.Parameters.Add("@filenewname",OleDbType.VarWChar).Value   =   fileNewName;  
        myComm.Parameters.Add("@filesize",OleDbType.Integer).Value   =   fileSize;  
        myComm.Parameters.Add("@filemime",OleDbType.VarWChar).Value   =   fileMime;  
        myComm.Parameters.Add("@fileblob",OleDbType.LongVarBinary,fileBlob.Length).Value   =   fileBlob;  
        myComm.Parameters.Add("@uploadtime",OleDbType.DBDate).Value   =   uploadTime;  
   
        //写入数据库  
        myComm.ExecuteNonQuery();  
  Top

13 楼redmoonmoon(阿卓)回复于 2005-06-02 12:55:37 得分 0

都说的好清楚噢Top

14 楼lemong(風之影)回复于 2005-06-02 12:55:51 得分 0

SqlParameterTop

15 楼accpdingyi(未来精英)回复于 2005-06-02 13:01:47 得分 0

呵呵,好啊,谢谢大家了Top

16 楼HJ_34(刺桐游子)回复于 2005-06-02 13:09:59 得分 0

1、过虑敏感字符;  
  1、用存储过程;  
  2、用SqlParameter参数形式。  
   
   
   其它的就不清楚了。Top

17 楼NeoInMatrix(丈二和尚)回复于 2005-06-02 13:33:44 得分 0

I   have   two   suggestions:  
   
  1.   Try   best   to   use   stored   procedures.  
  2.   If   you   have   to   use   SQL   string   when   creating   SqlCommand,   do   not   use   string   concatenation   (&   in   VB)   to   create   SQL   parameter   list;   instead,   use   pseudo   paramters   (@param).   Example:  
        '   good  
        cmd.CommandText   =   "delete   from   abc   where   name   =   @name"  
        '   bad!  
        cmd.CommandText   =   "delete   from   abc   where   name   =   '"   &   name   &   "'"  
  Top

18 楼oneway888(xiaoaoyisheng)回复于 2005-06-02 14:32:43 得分 0

1。用存储过程的参数形式  
  2。不用sa的帐号,用新建的权限小的帐号  
  3。删除sql   server里面默认的xpsqlcomm  
  Top

相关问题

  • 关于sql注入攻击
  • ===============请问各位高手,这样能被sql注入攻击吗?==================
  • 问大家一个问题,什么叫SQL注入式攻击???
  • 怎么在textbox设置才能防止脚本注入攻击呢?
  • 如何防止sql注入?(在线等待)
  • 请问可不可以这样一步防止SQL注入?
  • 防止sql注入,关于字符部分的函数问题。
  • 求asp防止sql注入的一个函数
  • 求一正则表达式用来防止SQL注入
  • 如何在程序中防止SQL注入

关键词

  • 字符
  • 存储过程
  • 函数
  • 系统
  • 用户
  • strnonchar
  • 禁用
  • 参数
  • fileblob
  • filemime

得分解答快速导航

  • 帖主:accpdingyi

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo