纳金网
标题:
网站注入与防范的方法
[打印本页]
作者:
晃晃
时间:
2011-8-8 09:09
标题:
网站注入与防范的方法
最近看到很多人的网站都被注入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://hi.baidu.com/anlish/blog/item/ba45bb18eac77e0534fa4134.html
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 = 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
还会造成不必要的麻烦
作者:
Asen
时间:
2011-9-6 10:11
作者:
tc
时间:
2012-2-3 23:22
无聊时可以刷屏幕 灌水 也可以试试 帖子的标题究竟可以写多长
作者:
晃晃
时间:
2012-2-10 23:20
跑着去顶朋友滴铁
作者:
tc
时间:
2012-2-21 23:22
再看一看,再顶楼主
作者:
tc
时间:
2012-4-13 23:24
呵呵,很漂亮啊
作者:
C.R.CAN
时间:
2012-5-8 23:25
好,真棒!!
作者:
C.R.CAN
时间:
2012-6-22 23:24
俺是新人,这厢有礼了!
作者:
菜刀吻电线
时间:
2012-7-7 23:19
响应天帅号召,顶
作者:
奇
时间:
2012-7-30 23:25
先顶上去,偶要高亮加精鸟!
作者:
C.R.CAN
时间:
2012-8-5 00:09
无聊时可以刷屏幕 灌水 也可以试试 帖子的标题究竟可以写多长
作者:
晃晃
时间:
2012-8-6 00:23
好铁多多发,感激分享
作者:
菜刀吻电线
时间:
2012-10-3 23:23
水……生命之源……灌……
作者:
晃晃
时间:
2012-10-12 23:19
加精、加亮滴铁子,尤其要多丁页丁页
作者:
tc
时间:
2012-10-22 23:25
很有心,部分已收录自用,谢谢
作者:
tc
时间:
2012-12-3 23:20
楼主收集的可真全哦
作者:
tc
时间:
2013-2-13 23:30
非常感谢,管理员设置了需要对新回复进行审核,您的帖子通过审核后将被显示出来,现在将转入主题
欢迎光临 纳金网 (http://go.narkii.com/club/)
Powered by Discuz! X2.5