首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

总结一下网站注入与防范的方法解决思路

2012-03-14 
总结一下网站注入与防范的方法最近看到很多人的网站都被注入js,被iframe之类的。非常多。本人曾接手过一个比

总结一下网站注入与防范的方法
最近看到很多人的网站都被注入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.如何批量删除数据库中被注入的代码?
在数据库查询分析器运行这段代码即可

SQL code
DECLARE @fieldtype sysnameSET @fieldtype='varchar'--删除处理DECLARE hCForEach CURSOR GLOBALFORSELECT N'update '+QUOTENAME(o.name)    +N' set '+ QUOTENAME(c.name) + N' = replace(' + QUOTENAME(c.name) + ',''<script_src=http://ucmal.com/0.js> </script>'','''')'FROM sysobjects o,syscolumns c,systypes tWHERE o.id=c.id    AND OBJECTPROPERTY(o.id,N'IsUserTable')=1    AND c.xusertype=t.xusertype    AND t.name=@fieldtypeEXEC sp_MSforeach_Worker @command1=N'?'


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

SQL code
create trigger tr_table_insertupdateon tablenamefor insert,updateasif exists (select 1 from inserted where data like '%</script>%')begin       RAISERROR ('不能修改或者添加',16,1);       ROLLBACK TRANSACTIONendgo


6.最重要的还是程序的写法,用参数化SQL或存储过程
例如
C# code
 protected void cmdok_Click(object sender, EventArgs e)    {        //添加信息        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)  ");        sql.Append(" values (@pid,@TextPhoneName,@Textnum,@Textprice,@Dropphonetype2,@TextonSellTime,@Textcolor,@Textweight ");                .................        SqlParameter[] paras = { new SqlParameter("@pid", SqlDbType.Int, 4) ,            new SqlParameter("@TextPhoneName", SqlDbType.NVarChar, 50) ,             new SqlParameter("@Textnum", SqlDbType.Int, 4) ,            new SqlParameter("@Textprice", SqlDbType.Int, 4) ,            new SqlParameter("@Dropphonetype2", SqlDbType.VarChar, 20) ,            new SqlParameter("@TextonSellTime", SqlDbType.DateTime, 8) ,            new SqlParameter("@Textcolor", SqlDbType.VarChar, 20) ,            new SqlParameter("@Textweight", SqlDbType.NVarChar, 50) ,           ...........        };        string[] stra = {Dropphonetype.SelectedValue,TextPhoneName.Text , Textnum.Text, Textprice.Text, Dropphonetype2.SelectedValue, TextonSellTime.Text, Textcolor.Text, Textweight.Text,             .............};        int a=stra.Length;        int j;                for ( j = 0; j < a; j++)        {            paras[j].Value = stra[j];                   }        int strpid = 0;        string sqla = sql.ToString();        try        {            SqlHelper.ExcuteNonQurey(sqla, CommandType.Text, paras);//执行添加数据                       strpid = Convert.ToInt32(SqlHelper.ExcuteSclare(sqla, CommandType.Text, paras));  //获取刚才插入的id号        }        catch (SqlException ex)        {            cmdreturn.Text = ex.Message.ToString();        }        cmdreturn.Text = strpid.ToString();。。。。。。。。。


7.通过URL传递的参数要用加密解密
C# code
传输string szTmp = "safdsfdsafdsfytrsd";szTmp = Server.UrlEncode(szTmp); 接收STRING STRA=Server.UrlDecode(request.querystring(szTmp)); 



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

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


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



欢迎各位高手 高人 牛人 补充指点批评







[解决办法]
[color=#FFFFFF][/color]
[解决办法]
好贴

顶,看着网上那些所谓的通用防注入的帖子,感觉很搞笑...
[解决办法]
娃哈哈

自己的SF都没坐上
[解决办法]
最近看到很多人的网站都被注入js,被iframe之类的。非常多。
一般来说这些都不是从sql注入的.一般主要考虑是否arp上的问题,解决方法一般装一个arp防火墙+双绑定
[解决办法]

[解决办法]
好文章
[解决办法]
全面
[解决办法]
也就哪些方法了。

[解决办法]
顶的不是帖..顶的是寂寞
[解决办法]
顶顶寂寞
[解决办法]
呵呵
公司网站刚被注入
[解决办法]
听寂寞在唱歌

顶楼主 收藏。
[解决办法]
顶,值得这我种新手学习.
[解决办法]
这贴不顶的话 对不起寂寞
[解决办法]
学到不少 我一直有参数@ 没有用+
[解决办法]
最近大家真的‘寂寞’
[解决办法]
本人处理的方式是如果参数是数值型的,绝对会在后台定义一个变量为数值型,首先在Page_Load里面就对这个数值型进行赋值,如果出现注入,首先就报错了.

如果是字符串,仅只将单引号Replace 为两个单引号
[解决办法]
探讨
本人处理的方式是如果参数是数值型的,绝对会在后台定义一个变量为数值型,首先在Page_Load里面就对这个数值型进行赋值,如果出现注入,首先就报错了.


[解决办法]
不错
[解决办法]
学习了谢谢分享
[解决办法]
涉及到数据的增、删、改用参数化处理,在数据查询时过滤"'",能阻止大部分诸如问题
[解决办法]
喜欢的是哥的贴,并不是哥的帅。

顶楼主 收藏。
[解决办法]
探讨
哥发的不是贴,是寂寞

[解决办法]
喜欢的是哥的贴,并不是哥的帅。
[解决办法]
string szTmp = "safdsfdsafdsfytrsd";
szTmp = Server.UrlEncode(szTmp); 
接收
STRING STRA=Server.UrlDecode(request.querystring(szTmp));


感觉这样就算加密的话没啥效果啊,咱看你是那啥%什么的似的参数就知道你是UrlEncode了,然后把地址栏那些UrlEncode的东西拷下来,执行下UrlDecode就知道了哦- -

热点排行