今天在逛CSDN时,看到一篇总结网站注入与防范的方法,感觉比较实在,整理一下发布在此。
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,如果你的数据库中被注入了js代码,我们可以利用SQL语句批量清除数据库中被植入的js。
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://xxx.com/xx.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,保证数据库中不再被植入JS代码。这点我们可以利用数据库的触发器来完成。写一个insert与update触发器检查插入或修改的内容中是否包含恶意代码,如果有,那么禁止此次数据的操作。当然,这样会损耗服务器一部分性能,取与舍,看具体的情况了。
触发器参考如下:
create trigger tiu_tablename
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中,最好是使用参数化SQL或者存储过程,比较危险的就是根据用户的输入来拼凑SQL了,处理的不好,就被恶意用户攻击了。参数化,当然就是使用SqlParameter了,具体的用法请自已搜索。
7,不要在页面或者url中显示网站的敏感数据。特别是url中,曾经看到有朋友直接就把用户名与密码在url中以明文传递了,这样,别人很容易从我们的参数名称上猜到数据的含义,留下了漏洞。
对于网站错误,我们可以将错误信息以文本存起来或者存到数据库中,然后跳转到一个友好的出错页面,即给了用户亲和性,又避免了在错误中会抛出敏感信息的隐患。
对于URL中的参数,一定要加密后再传值,接收时再解密。这样一是安全,二是避免传值错误。
关于URL参数的编码与解码,请参看本站:
Url编码与解码分析8,将从用户输入的文本框中的单引号替换成双引号再传到SQL使用:
如:string keys=keys_1.replace("'","''")。
但如果你是使用了参数化SQL,则就不用处理单引号了。
另外,网站盛传的过滤掉SQL关键字,如insert update delete等的方法,既麻烦又无用。(原作的观点,本人强烈赞同)
欢迎大家发表自己防范SQL注入的方法与观点,如果大家对上面观点有补充或者批评,请在评论中发表您的观点,一起讨论,才会有进步。