海洋CMS数据库挂马终极防御方法

星源影视 9天前 584

 为什么叫终极呢?因为这个方法是从SQL层面入手与程序无关。

     原理是利用SQL提供给我们的触发器功能,在数据更新前对数据进行检测含有危险字符就进行拦截。

      除非黑客有数据库root权限,否则是不能修改我们设置的触发器规则的。

操作步骤:

    宝塔-数据库-管理 -用root账户登陆

    选择海洋CMS数据库,然后点击右上角的“”,点击靠左的“添加触发器”,出现如下图所示的窗口:


按下面设置填写:

触发器名称:check (任意名称)

表:sea_data

时机:BEFORG (BEFORG 是执行前,AFDER是执行后

事件:UPDATE

定义: 

IF 
   INSTR( NEW.v_name,'script')> 0   OR 
   INSTR( NEW.v_pic,'script')> 0    OR
   INSTR( NEW.v_spic,'script')> 0    OR
   INSTR( NEW.v_actor,'script')> 0
THEN
  SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = '请勿输入非法字符!';
END IF

用户:留空

点击执行,无出错提示即添加成功,如下图所示:

我们来测试一下:

update sea_data set v_pic = 'https://xx.com/xx.jpg  "></script><script/**/src=https://xx.js></script><a a="">' WHERE v_id=1




OK,说明设置成功,如果没有出现出错提示而是正常执行,那么请检查下步骤并恢复被修改的数据。

备注:

  INSTR( NEW.v_spic,'script')> 0 OR

    上面的代码可以在定义代码里按格式多次添加,把其中的 'v_spic' 换成你要过滤的字段名即可。

测试环境: 

  海洋CMS v9.95 + 宝塔: 6.9  +  MySQL 10.2.24-MariaDB

建议MYSQL数据库版本选择MariaDB 性能会更好一点。

 演示站点: http://xymov.tv


最后于 8天前 被星源影视编辑 ,原因:
最新回复 (21)
  • lmxajh1 9天前
    0 引用 2
    用BEFORE还是用AFTER 
  • lmxajh1 9天前
    0 引用 3

    这是什么意思

  • 星源影视 9天前
    0 引用 4

    之前的代码不兼容,用新代码即可。

    最后于 9天前 被星源影视编辑 ,原因:
  • oy86866 9天前
    0 引用 5
    可以啊,好东西,写触发器~我怎么没想到哈哈
  • kankaner 9天前
    0 引用 6
    星源影视 之前的代码不兼容,用新代码即可。
    权限问题,用root帐户添加试试
  • niudousi 9天前
    0 引用 7
    小白虽然不大明白,还是很感谢楼主的分享精神
  • 0 引用 8
    添加出错了。新代码,在哪里
  • 0 引用 9
    添加成功了,但是执行sql不会提示这个啊
  • 星源影视 9天前
    0 引用 10
    1129716731 添加成功了,但是执行sql不会提示这个啊

    建议上图看看 

  • 0 引用 11
    只显示执行成功!!!
  • 星源影视 8天前
    0 引用 12
    isuperlin 只显示执行成功!!!
    不是用root账户登陆的吧
  • 0 引用 13
    就是用root用户
  • 星源影视 8天前
    0 引用 14
    isuperlin 就是用root用户

    你的MYSQL什么版本呢?貌似5.5+才支持

  • boh 8天前
    0 引用 15
    虚拟空间没有宝塔的我很难受
  • axiaode 8天前
    0 引用 16
    求大佬分享个采集站地址。演示站有点太炫酷了 想采
  • 星源影视 8天前
    0 引用 17
    axiaode 求大佬分享个采集站地址。演示站有点太炫酷了 想采


  • 0 引用 18
    root权限登录,完解决,标题等字段无法加入script!感谢老板,祝老板流量暴涨
  • 星源影视 8天前
    0 引用 19
    1129716731 root权限登录,完解决,标题等字段无法加入script!感谢老板,祝老板流量暴涨
    这个好,同勉,谢谢支持。
  • winbiz 3天前
    0 引用 20
    666,马克一下
  • winbiz 3天前
    0 引用 21
    设置为555还是被修改,所有文件末尾加了段js代码,只能一个个删除?
  • 星源影视 3天前
    0 引用 22
    winbiz 设置为555还是被修改,所有文件末尾加了段js代码,只能一个个删除?

    你修改的555权限是www账户吗?是设置根目录包含子目录的所有文件为555吗?

    如果是,还被修改说明黑客有可能有你的最高权限,需要修改下LINUX主机的root密码并禁止ROOT直接登录,修改下SQL的root密码,修改海洋CMS的数据库密码,如果有用宝塔吗或其他面板?还需要修改下登录账号密码。

    另外,宝塔有个批量替换插件可以使用,不需要一个一个修改,也可以用最新版程序直接覆盖。

返回
发新帖