sqlserver防止数据库挂马新尝试
想法不错,放着以后应该会有用
网站挂马非常让人头痛,每次的安全措施都是治标不治本,想找到根本原因,只能去分析你的程序源代码,由于很多网站不是一个程序员开发,很多的注入漏洞很难发现,曾经通过公共文件加入过滤代码,基本无效,买了个叫龙盾的IIS防火墙,好像有点用,但最后还是被攻破了,sqlserver又被挂了。
每次注入都要用“UPDATE 表名 set 字段名= REPLACE(字段名,
网站挂马非常让人头痛,每次的安全措施都是治标不治本,想找到根本原因,只能去分析你的程序源代码,由于很多网站不是一个程序员开发,很多的注入漏洞很难发现,曾经通过公共文件加入过滤代码,基本无效,买了个叫龙盾的IIS防火墙,好像有点用,但最后还是被攻破了,sqlserver又被挂了。
每次注入都要用“UPDATE 表名 set 字段名= REPLACE(字段名,'木马地址','')”最后一个引号真想写去死吧!
我们不能阻止住它往数据库里挂木马,但是总有方法我们可以让它挂不成功。最后想到了触发器。熟悉触发器的都知道,sql2000插入数据和修改数据其实都是先放在inserted临时表里,然后才实际去放到对应表里。阻击黑客的脚步就这个临时表里。
下面是一段触发器的代码,暂时对木马注入起到一定的作用。
CREATE trigger 触发器名
on 表名
for update,insert
as
declare @a varchar(100) --存储字段1
declare @b varchar(100) --存储字段2
declare @c varchar(100) --存储字段3
select @a=字段1,@b=字段2,@c=字段3 from inserted
if(@a like '%script%' or @b like '%script%' or @c like '%script%')
begin
ROLLBACK transaction
end
这段触发器的意思是,先定义三个变量,分别存储放在inserted表里的三个容易被黑客下手的字符串型字段,然后用like模糊判断值中是否含有script字样,如果有,就回滚事务,不报错,以麻痹黑客,让他误以为已经挂好马了。各位被挂马的朋友可以把这段脚本拿去,对应着修改,应该可以保证网站不被挂马。另外容易被挂马的字段还有text型,但是这个类型处理比较麻烦点,而且观察发现黑客挂一个表往往是好几个字段同时挂,所以只要一个字段不成功,整个表都是不成功的。