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

zzxap 2009-07-29 02:41:31
加精
最近看到很多人的网站都被注入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.如何批量删除数据库中被注入的代码?
在数据库查询分析器运行这段代码即可
[code=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'?'

[/CODE]

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

[code=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

[/CODE]

6.最重要的还是程序的写法,用参数化SQL或存储过程
例如
[code=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();

。。。。。。。。。
[/CODE]

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


[/CODE]

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

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


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



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





...全文
32396 679 打赏 收藏 举报
写回复
679 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
fxxyz 2012-07-06
收藏了
  • 打赏
  • 举报
回复
qimiliang 2012-04-27
收藏学习
  • 打赏
  • 举报
回复
b19890526 2011-11-04
好东东
  • 打赏
  • 举报
回复
wwwhhb4004 2011-10-27

学习一下
  • 打赏
  • 举报
回复
qq72875346 2011-10-13
ding
  • 打赏
  • 举报
回复
szjarvis 2011-10-09
学习了。
  • 打赏
  • 举报
回复
sweetshen 2011-10-08
拿分,走人
  • 打赏
  • 举报
回复
joyhen 2011-10-06
饭后一回帖,顶完coding
  • 打赏
  • 举报
回复
lhstudywindows 2011-09-20
神贴啊 顶!顶!
  • 打赏
  • 举报
回复
LiaoAn_Sun 2011-09-08
谢谢,很需要
  • 打赏
  • 举报
回复
ChinaUncle-- 2011-08-17
[Quote=引用 79 楼 newdigitime 的回复:]

引用 57 楼 xiao_jun_0820 的回复:
string szTmp = "safdsfdsafdsfytrsd";
szTmp = Server.UrlEncode(szTmp);
接收
STRING STRA=Server.UrlDecode(request.querystring(szTmp));


感觉这样就算加密的话没啥效果啊,咱看你是那啥%什么的似的参数就知……
[/Quote]
我现在是不执行替换.检测如果发现含有可能注入的字符.将跳转到一错误页.不执行入库.
  • 打赏
  • 举报
回复
szjarvis 2011-08-13
谢谢分享.
  • 打赏
  • 举报
回复
xiaoxiaobaibai 2011-08-02
不错,顶
  • 打赏
  • 举报
回复
kiss筱魔 2011-07-21
谢谢分享,学习了,好贴
  • 打赏
  • 举报
回复
微笑微笑 2011-07-18
[Quote=引用 57 楼 xiao_jun_0820 的回复:]
string szTmp = "safdsfdsafdsfytrsd";
szTmp = Server.UrlEncode(szTmp);
接收
STRING STRA=Server.UrlDecode(request.querystring(szTmp));


感觉这样就算加密的话没啥效果啊,咱看你是那啥%什么的似的参数就知道你是UrlEncode了,然后把地址栏那些UrlEnc……
[/Quote]

看起来专业点,你说能有多少人知道这种解法??
  • 打赏
  • 举报
回复
微笑微笑 2011-07-18
mark
  • 打赏
  • 举报
回复
jk203mn 2011-07-06
学习了。。。
  • 打赏
  • 举报
回复
archip 2011-06-22
简单,精炼
  • 打赏
  • 举报
回复
pjf123002 2011-06-21
支持分享,支持楼主。
  • 打赏
  • 举报
回复
阿桐 2011-06-21
占座加分
  • 打赏
  • 举报
回复
加载更多回复(615)
发帖
.NET社区

6.0w+

社区成员

.NET技术交流专区
社区管理员
  • ASP.NET
  • R小R
  • 喵叔哟
加入社区
帖子事件
创建了帖子
2009-07-29 02:41
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。