防sql注入

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

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

1.首先我会检查一下服务器配置,重新配置一次服务器安全,可以参考
虚拟主机配置
Windows 2003 硬盘安全设置[针对ASP类网
Win2003 防木马、权限设置、IIS服务器安全配置整理
如何防止ASP木马在服务器上运行
iis虚拟主asp机设置

Win2003 IIS6 asp aspnet安全详细配置


2.其次,用麦咖啡自定义策略,即使网站程序有漏洞,别人也很难在文件上写入代码了。
参考自定义策略,有了这个策略,再烂的程序,你也无法写入我的文件
麦咖啡8.5i 使用设置图解

3.可以用网络超级巡警删除被注入的JS代码。
参考
用超级巡警批量清除被挂马的网页

4.如何批量删除数据库中被注入的代码?
在数据库查询分析器运行这段代码即可
+展开
-SQL
DECLARE @fieldtype sysname
SET @fieldtype='varchar'
--删除处理
DECLARE hCForEach CURSOR GLOBAL
FOR
SELECT 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 t
WHERE o.id=c.id
    AND OBJECTPROPERTY(o.id,N'IsUserTable')=1
    AND c.xusertype=t.xusertype
    AND t.name=@fieldtype
EXEC sp_MSforeach_Worker @command1=N'?'





5.创建一个触发器,只要有 </script>就不给插入,对性能会有点影响
+展开
-SQL
create trigger tr_table_insertupdate
on tablename
for insert,update
as
if exists (
select 1 from inserted 
where data like '%</script>%'
)
begin
       RAISERROR ('不能修改或者添加',16,1);
       ROLLBACK TRANSACTION
end
go




6.最重要的还是程序的写法,用参数化SQL或存储过程
例如
+展开
-C#
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#
//传输
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
还会造成不必要的麻烦


来源:http://topic.csdn.net/u/20090729/14/26381958-0d6e-4b90-bc90-d275e9621f93.html?60112

加支付宝好友偷能量挖...


评论(0)网络
阅读(266)喜欢(0)Asp.Net/C#/WCF