网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计资源 > .Net编程 > 正文

总结一下网站注入与防范的方法

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

最近看到很多人的网站都被注入js,被iframe之类的。非常多。

本人曾接手过一个比较大的网站,被人家入侵了,要我收拾残局。。

1.首先我会检查一下服务器配置,重新配置一次服务器安全,可以参考
 http://hi.baidu.com/zzxap/blog/item/18180000ff921516738b6564.html

2.其次,用麦咖啡自定义策略,即使网站程序有漏洞,别人也很难在文件上写入代码了。
 参考自定义策略,有了这个策略,再烂的程序,你也无法写入我的文件
 http://hi.baidu.com/zzxap/blog/item/efe093a7e0f2c190d04358ef.html

3.可以用网络超级巡警删除被注入的JS代码。
 参考
http://blog.csdn.net/zzxap/archive/2010/04/07/5459065.aspx
 
4.如何批量删除数据库中被注入的代码?
在数据库查询分析器运行这段代码即可

  1. DECLARE @fieldtype sysname 
  2. SET @fieldtype='varchar' 
  3. --删除处理 
  4. DECLARE hCForEach CURSOR GLOBAL 
  5. FOR 
  6. SELECT N'update '+QUOTENAME(o.name
  7.     +N' set '+ QUOTENAME(c.name) + N' = replace(' + QUOTENAME(c.name) + ',''<script_src=http://ucmal.com/0.js> </script>'','''')' 
  8. FROM sysobjects o,syscolumns c,systypes t 
  9. WHERE o.id=c.id 
  10.     AND OBJECTPROPERTY(o.id,N'IsUserTable')=1 
  11.     AND c.xusertype=t.xusertype 
  12.     AND t.name=@fieldtype 
  13. EXEC sp_MSforeach_Worker @command1=N'?' 

5.创建一个触发器,只要有</script>就不给插入,对性能会有点影响

  1. create trigger tr_table_insertupdate 
  2. on tablename 
  3. for insert,update 
  4. as 
  5. if exists ( 
  6. select 1 from inserted  
  7. where data like '%</script>%' 
  8. begin 
  9.        RAISERROR ('不能修改或者添加',16,1); 
  10.        ROLLBACK TRANSACTION 
  11. end 
  12. go 

6.最重要的还是程序的写法,用参数化SQL或存储过程
例如

  1. protected void cmdok_Click(object sender, EventArgs e) 
  2.     { 
  3.         //添加信息 
  4.         StringBuilder  sql = new StringBuilder( " insert into m_phone ( pid,PhoneName,num,price,phonetype,onSellTime,color,weight,Video,Camera,phoneSize,phoneSystem,Memorysize,PhoneDesc,Standbytime,ScreenSize,Frequency,InputMethod,Soundrecord,gps,fm,mp3,email,Infrared,game,clock,Calendar,Calculator,Bluetooth)  "); 
  5.  
  6.         sql.Append(" values (@pid,@TextPhoneName,@Textnum,@Textprice,@Dropphonetype2,@TextonSellTime,@Textcolor,@Textweight "); 
  7.          
  8.         ................. 
  9.  
  10.         SqlParameter[] paras = { new SqlParameter("@pid", SqlDbType.Int, 4) , 
  11.             new SqlParameter("@TextPhoneName", SqlDbType.NVarChar, 50) ,  
  12.             new SqlParameter("@Textnum", SqlDbType.Int, 4) , 
  13.             new SqlParameter("@Textprice", SqlDbType.Int, 4) , 
  14.             new SqlParameter("@Dropphonetype2", SqlDbType.VarChar, 20) , 
  15.             new SqlParameter("@TextonSellTime", SqlDbType.DateTime, 8) , 
  16.             new SqlParameter("@Textcolor", SqlDbType.VarChar, 20) , 
  17.             new SqlParameter("@Textweight", SqlDbType.NVarChar, 50) , 
  18.  
  19.            ........... 
  20.         }; 
  21.         string[] stra = {Dropphonetype.SelectedValue,TextPhoneName.Text , Textnum.Text, Textprice.Text, Dropphonetype2.SelectedValue, TextonSellTime.Text, Textcolor.Text, Textweight.Text,  
  22.             .............}; 
  23.  
  24.         int a=stra.Length; 
  25.         int j; 
  26.          
  27.         for ( j = 0; j < a; j++) 
  28.         { 
  29.             paras[j].Value = stra[j]; 
  30.             
  31.         } 
  32.         int strpid = 0; 
  33.         string sqla = sql.ToString(); 
  34.         try 
  35.         { 
  36.             SqlHelper.ExcuteNonQurey(sqla, CommandType.Text, paras);//执行添加数据 
  37.             
  38.             strpid = Convert.ToInt32(SqlHelper.ExcuteSclare(sqla, CommandType.Text, paras));  //获取刚才插入的id号 
  39.  
  40.  
  41.         } 
  42.         catch (SqlException ex) 
  43.         { 
  44.             cmdreturn.Text = ex.Message.ToString(); 
  45.  
  46.         } 
  47.  
  48.         cmdreturn.Text = strpid.ToString(); 
  49.  
  50. 。。。。。。。。。 

7.通过URL传递的参数要用加密解密

  1. 传输 
  2. string szTmp = "safdsfdsafdsfytrsd"
  3. szTmp = Server.UrlEncode(szTmp);  
  4. 接收 
  5. STRING STRA=Server.UrlDecode(request.querystring(szTmp)); 

8.把要使用的参数处理一下单引号,再放到SQL里面
例如 string stra=aa.replace("'","''")

用参数化SQL可以不用处理单引号
指定参数类型和过滤掉单引号,就可以杜绝99.9%入侵了


另外说一句:网上那些被人奉如圣经的过滤 update insert 等关键字的程序是用处不大的 upupdatedate 过滤掉 update还是update
还会造成不必要的麻烦

  • 上一篇资讯: ASP.NET经典60道面试题
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师