点击访问PC版页面

[完整版]巧用触发器防止SQL注入数据库挂马


test

2015-02-08 12:29:37

被挂马的网站特征是网站文件并没有多出可疑文件,而且被挂马的网站基本都是asp+sqlserver的架构。从企业管理器打开数据库,可以看到数据库的表里字段字符型的字段都被加上了script木马。 打开网站日志,可以看到代码是通过sql注入加上的。 没办法,先通过查询分析器把脚本去掉,幸亏黑客挂马的还是比较规律,可以一次性清除,在查询分析器里把对数据库里各表的清除脚本写好,然后一次执行,好了,打开网站,世界清净了。下面给出清除脚本: UPDATE 表名 set 字段名= REPLACE(字段名,黑客网址 ,) 如果被感染字段是text的话,比较麻烦,要通过convert函数把text类型转化成varchar(8000)转化过程中,可能会丢失部分数据 清除完毕,将清除sql脚本保存,是否万事大吉呢,过了两个小时,网站又被挂马了! 只好又运行起查询分析器,把脚本运行,清除完毕。真是清的快,但是人总是要睡觉的,不能和黑客在那捉秘藏吧。 突然想到这是sqlserver库啊,微软一定有解决办法的,我们不能阻止住它望数据库里挂木马,但是我们可以让它挂不成功。那就是用触发器! 熟悉触发器的都知道,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型,但是这个类型处理比较麻烦点,而且观察发现黑客挂一个表往往是好几个字段同时挂,所以只要一个字段不成功,整个表都是不成功的