『大发网盟』

收益高、结算快、超稳定,直营无中间商差价

『1866资源网』

全网最早的资源,实力雄厚,速度超快,超稳定

『78免费网盘』

永久免费的多媒体转码与云分发平台,无限存储

『209资源网』

全网唯一一家全亚洲服务器加速播放,速度超快

『推荐模板服务商』

海洋CMS官方推荐可信赖模板制作服务商家

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

星源影视 3月前 1931

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

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

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

操作步骤:

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

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


按下面设置填写:

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

表:sea_data

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

事件:UPDATE

定义: 

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

用户:留空

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

我们来测试一下:

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

备注:

   NEW.v_name  LIKE '%script%'  OR

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

测试环境: 

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

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

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


附:mysql存储过程语法


-------------------数据类型及运算符--------------------


一、基本数据类型:

二、变量:

自定义变量:DECLARE   a INT ; SET a=100;    可用以下语句代替:DECLARE a INT DEFAULT 100;

变量分为用户变量系统变量,系统变量又分为会话和全局级变量

用户变量:用户变量名一般以@开头,滥用用户变量会导致程序难以理解及管理

三、运算符:

1.算术运算符
+     加   SET var1=2+2;       4
-     减   SET var2=3-2;       1
*      乘   SET var3=3*2;       6
/     除   SET var4=10/3;      3.3333
DIV   整除 SET var5=10 DIV 3; 3
%     取模 SET var6=10%3 ;     1

2. 比较运算符
>            大于 1>2 False
<            小于 2<1 False
<=           小于等于 2<=2 True
>=           大于等于 3>=2 True
BETWEEN      在两值之间 5 BETWEEN 1 AND 10 True
NOT BETWEEN 不在两值之间 5 NOT BETWEEN 1 AND 10 False
IN           在集合中 5 IN (1,2,3,4) False
NOT IN       不在集合中 5 NOT IN (1,2,3,4) True
=             等于 2=3 False
<>, !=       不等于 2<>3 False
<=>          严格比较两个NULL值是否相等 NULL<=>NULL True
LIKE          简单模式匹配 "Guy Harrison" LIKE "Guy%" True
REGEXP       正则式匹配 "Guy Harrison" REGEXP "[Gg]reg" False
IS NULL      为空 0 IS NULL False
IS NOT NULL 不为空 0 IS NOT NULL True

3.逻辑运算符

4.位运算符
|   或
&   与
<< 左移位
>> 右移位
~   非(单目运算,按位取反)

--------------------流程控制--------------------
一、顺序结构
二、分支结构
if
case

三、循环结构
for循环
while循环
loop循环
repeat until循环

注:
区块定义,常用
begin
......
end;
也可以给区块起别名,如:
lable:begin
...........
end lable;
可以用leave lable;跳出区块,执行区块以后的代码

begin和end如同C语言中的{ 和 }。


mysql存储过程基本函数包括:字符串类型,数值类型,日期类型

一、字符串类
CHARSET(str) //返回字串字符集
CONCAT (string2 [,… ]) //连接字串
INSTR (string ,substring ) //返回substring首次在string中出现的位置,不存在返回0
LCASE (string2 ) //转换成小写
LEFT (string2 ,length ) //从string2中的左边起取length个字符
LENGTH (string ) //string长度
LOAD_FILE (file_name ) //从文件读取内容
LOCATE (substring , string [,start_position ] ) 同INSTR,但可指定开始位置
LPAD (string2 ,length ,pad ) //重复用pad加在string开头,直到字串长度为length
LTRIM (string2 ) //去除前端空格
REPEAT (string2 ,count ) //重复count次
REPLACE (str ,search_str ,replace_str ) //在str中用replace_str替换search_str
RPAD (string2 ,length ,pad) //在str后用pad补充,直到长度为length
RTRIM (string2 ) //去除后端空格
STRCMP (string1 ,string2 ) //逐字符比较两字串大小,
SUBSTRING (str , position [,length ]) //从str的position开始,取length个字符,

二、数值类型

ABS (number2 ) //绝对值
BIN (decimal_number ) //十进制转二进制
CEILING (number2 ) //向上取整
CONV(number2,from_base,to_base) //进制转换
FLOOR (number2 ) //向下取整
FORMAT (number,decimal_places ) //保留小数位数
HEX (DecimalNumber ) //转十六进制
注:HEX()中可传入字符串,则返回其ASC-11码,如HEX(’DEF’)返回4142143
也可以传入十进制整数,返回其十六进制编码,如HEX(25)返回19
LEAST (number , number2 [,..]) //求最小值
MOD (numerator ,denominator ) //求余
POWER (number ,power ) //求指数
RAND([seed]) //随机数
ROUND (number [,decimals ]) //四舍五入,decimals为小数位数]

三、日期类型

ADDTIME (date2 ,time_interval ) //将time_interval加到date2
CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //转换时区
CURRENT_DATE ( ) //当前日期
CURRENT_TIME ( ) //当前时间
CURRENT_TIMESTAMP ( ) //当前时间戳
DATE (datetime ) //返回datetime的日期部分
DATE_ADD (date2 , INTERVAL d_value d_type ) //在date2中加上日期或时间
DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式显示datetime
DATE_SUB (date2 , INTERVAL d_value d_type ) //在date2上减去一个时间
DATEDIFF (date1 ,date2 ) //两个日期差
DAY (date ) //返回日期的天
DAYNAME (date ) //英文星期
DAYOFWEEK (date ) //星期(1-7) ,1为星期天
DAYOFYEAR (date ) //一年中的第几天
EXTRACT (interval_name FROM date ) //从date中提取日期的指定部分
MAKEDATE (year ,day ) //给出年及年中的第几天,生成日期串
MAKETIME (hour ,minute ,second ) //生成时间串
MONTHNAME (date ) //英文月份名
NOW ( ) //当前时间
SEC_TO_TIME (seconds ) //秒数转成时间
STR_TO_DATE (string ,format ) //字串转成时间,以format格式显示
TIMEDIFF (datetime1 ,datetime2 ) //两个时间差
TIME_TO_SEC (time ) //时间转秒数]
WEEK (date_time [,start_of_week ]) //第几周
YEAR (datetime ) //年份
DAYOFMONTH(datetime) //月的第几天
HOUR(datetime) //小时
LAST_DAY(date) //date的月的最后日期
MICROSECOND(datetime) //微秒
MONTH(datetime) //月
MINUTE(datetime) //分


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

    这是什么意思

  • 星源影视 3月前
    0 引用 4

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

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

    建议上图看看 

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

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

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


  • 0 引用 18
    root权限登录,完解决,标题等字段无法加入script!感谢老板,祝老板流量暴涨
  • 星源影视 3月前
    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的数据库密码,如果有用宝塔吗或其他面板?还需要修改下登录账号密码。

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

  • 星源影视 3月前
    0 引用 23
    更新了下
返回
发新帖