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 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 code 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# 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 = 0j <aj++) { 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 还会造成不必要的麻烦可以说 拿下后台管理密码 只是入侵过程的一个步骤 或者说是入口
一般而言 得到网站后台密码的目的 是要通过它 上传木马 入侵网站所在的服务器 通过提权等手段 获得服务器权限
QL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据。
据统计,网站用ASP+Access或SQLServer的占70%以上,PHP+MySQ占L20%,其他的不足10%。在本文,以SQL-SERVER+ASP例说明SQL注入的原理、方法与过程。(php注入的文章由NB联盟的另一位朋友zwell撰写的有关文章)
SQL注入攻击的总体思路是:
1、发现SQL注入位置;
2、判断后台数据库类型;
3、确定XP_CMDSHELL可执行情况
4、发现WEB虚拟目录
5、上传ASP木马;
6、得到管理员权限;
防止ASP注入攻击的分步实施提要
第一步. 使用ASP.NET 请求校验.
第二步. 使用权用约束输入.
第三步. 对不安全的输入进行编码.
第四步. 对Sql语句使用命令参数方式.
第五步. 验证ASP.net的错误没有被返回客户端.
额外的资源
评论列表(0条)