求助:移除共享主机中</html>标签后出现的异常JavaScript代码
可行的恶意代码移除方案
方案1:Laravel全局中间件拦截清理(推荐)
利用Laravel的中间件机制,在响应发送到浏览器前截断</html>之后的所有内容,无需大规模部署,仅需修改两个文件:
- 在
app/Http/Middleware目录下新建CleanMaliciousJs.php文件,写入以下代码:
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; class CleanMaliciousJs { public function handle(Request $request, Closure $next) { $response = $next($request); // 仅处理HTML响应 if ($response instanceof \Illuminate\Http\Response && str_contains($response->headers->get('Content-Type'), 'text/html')) { $content = $response->getContent(); $htmlEndPos = strripos($content, '</html>'); if ($htmlEndPos !== false) { // 保留到</html>标签为止 $cleanContent = substr($content, 0, $htmlEndPos + 7); $response->setContent($cleanContent); } } return $response; } }
- 打开
app/Http/Kernel.php,在$middleware数组末尾添加中间件:
protected $middleware = [ // ... 其他中间件 \App\Http\Middleware\CleanMaliciousJs::class, ];
将这两个修改后的文件上传到共享主机对应目录覆盖即可,所有页面响应都会被自动清理。
方案2:Apache服务器通过.htaccess过滤
如果你的共享主机使用Apache,且开启了mod_substitute模块,可直接修改根目录的.htaccess文件,添加规则自动截断多余代码:
<IfModule mod_substitute.c> # 匹配</html>之后的所有内容,替换为仅保留</html> Substitute s|</html>.*$|</html>|ni </IfModule>
若主机未开启mod_substitute,可联系主机商协助开启。
方案3:前端提前拦截(兜底方案)
如果上述后端方案无法实施,可在页面最顶部插入一段脚本,在恶意代码执行前清理DOM:
document.addEventListener('DOMContentLoaded', function() { const fullHtml = document.documentElement.outerHTML; const endPos = fullHtml.lastIndexOf('</html>'); if (endPos !== -1) { document.documentElement.outerHTML = fullHtml.slice(0, endPos + 7); } });
将这段代码放在页面<head>的最开头,确保它比恶意代码更早执行。
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

