一号优惠经验分享网
51福利网的各种薅羊毛福利经验笔记

海洋CMS数据库挂马终极防御方法(MYSQL触发器使用实例)

为什么叫终极呢?因为这个方法是从SQL层面入手与程序无关,原理是利用SQL提供给我们的触发器功能,在数据更新前对数据进行检测含有危险字符就进行拦截,除非黑客有数据库root权限,否则是不能修改我们设置的触发器规则的。

操作步骤:

51福利网
  •     宝塔-数据库-管理 -用root账户登陆
  •     选择海洋CMS数据库,然后点击右上角的“触发器”,点击靠左的“添加触发器”,出现如下图所示的窗口:
  • 按下面设置填写:

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

表:sea_data

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

事件:UPDATE

      定义:

SQL

BEGIN IF NEW.v_name LIKE '%script%' OR NEW.v_pic LIKE '%script%' OR NEW.v_spic LIKE '%script%' OR NEW.v_actor LIKE '%script%' THEN SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = '请勿输入非法字符!'; END IF; END

用户:留空

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

我们来测试一下:

SQL

update sea_data set v_pic = ‘https://xx.com/xx.jpg  “></script><script/**’ WHERE v_id=1

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

更多使用案例

我要在数据库设置一个触发器,新插入字段body含有http就不插入

为了创建一个触发器,防止在数据库中插入包含“http”的字段,你可以使用以下SQL语句(这里以MySQL为例):

DELIMITER //  
CREATE TRIGGER before_insert_your_table_name  
BEFORE INSERT ON your_table_name  
FOR EACH ROW   
BEGIN  
    IF NEW.body LIKE '%http%' THEN  
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'HTTP is not allowed';  
    END IF;  
END;  
//  
DELIMITER ;

请注意以下几点:

  1. your_table_name替换为你的实际表名。
  2. 这个触发器会在插入新行之前检查body字段。如果该字段包含“http”,它将引发一个错误。
  3. SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'HTTP is not allowed';这一行会抛出一个错误,提示用户HTTP是不允许的。
  4. 在真实的应用场景中,可能还需要处理其他的URL协议,例如https。你可以根据需要调整LIKE模式。
  5. 如果你使用的是其他数据库系统(如PostgreSQL、SQL Server等),触发器的语法可能会有所不同。

我要在数据库设置一个触发器,新插入字段body含有http或者.com 或者.cc就不插入

要在数据库中设置一个触发器,以防止插入包含特定字符串(例如“http”、“.com”或“.cc”)的字段,你可以使用以下SQL语句(这里以MySQL为例):

DELIMITER //  
CREATE TRIGGER before_insert_your_table_name  
BEFORE INSERT ON your_table_name  
FOR EACH ROW   
BEGIN  
    IF NEW.body LIKE '%http%' OR NEW.body LIKE '%.com%' OR NEW.body LIKE '%.cc%' THEN  
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'URLs or domain suffixes are not allowed';  
    END IF;  
END;  
//  
DELIMITER ;

请确保将your_table_name替换为你的实际表名。这个触发器会在插入新行之前检查body字段。如果该字段包含“http”、“.com”或“.cc”,它将引发一个错误。

这个例子使用SIGNAL SQLSTATE '45000'来抛出一个错误,提示用户URLs或域名后缀是不允许的。你可能需要根据你的实际需求和数据库系统进行相应的调整。

NEW.body 什么意思?

在MySQL的触发器中,NEW是一个特殊的关键字,代表新插入或更新的行的当前值。因此,NEW.body指的是即将被插入或更新的行的body字段的值。

打赏
一号优惠 · 51福利网薅羊毛福利具有时效性,如已失效,请留言
文章名称:《海洋CMS数据库挂马终极防御方法(MYSQL触发器使用实例)》-一号优惠 · 51福利网
免责申明:本站所有活动信息均来自网络,如有失效,不实或侵权,请联系我们删除。谢谢

评论 抢沙发

一号优惠经验分享网最新最全薅羊毛,现金红包线报网

一号优惠经验分享网提供每日最新内部优惠,薅羊毛活动,现金红包领取,免费福利和网赚福利手机赚钱线报,打造中国最受欢迎的网赚信息发布平台!51福利网

51联盟线报群赚钱·合作·帮助

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册