一、背景
服务器经常被人黑。webapps下时常莫名其妙的多了一个未知的恶意war文件。对此的反应:
1、修改tomcat虚拟路径。
2、定时检测webapps和work文件夹下的文件,删除不知名的文件。
二、tomcat的server.xml
在C盘下新建webApp和、webWork两个文件夹,将server.xml中的host节点修改为:
<Host name="localhost"
appBase="C:/webApp/"
workDir="C:/webWork/"
unpackWARs="true" autoDeploy="true">
三、新建一个listener。
1、ProtectTaskListener.java
package com.px.listener;
import com.px.util.Config;
import java.util.Timer;
import java.util.TimerTask;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* 文件检测监听器
*
* @author liyulin lyl010991@126.com
* @version 1.0 2015-04-13
*/
public class ProtectTaskListener implements ServletContextListener {
private Timer timer;
public void contextInitialized(ServletContextEvent event) {
timer = new Timer();
timer.schedule(
new TimerTask() {
public void run() {
ProtectUtil.deleteOtherFile();
}
}, Config.CHECK_TIME);
}
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
}
}
2、ProtectUtil.java
package com.px.listener;
import java.io.File;
/**
* 删除webApp和webWork下的(除了hospital1、installer、jswork、reports)其它文件
*
* @author liyulin lyl010991@126.com
* @version 1.0 2015-04-13
*/
public class ProtectUtil {
public static final String WEBAPPS_PATH = "C:/webApp";
public static final String WORK_PATH = "C:/webWork";
public static final String[] WORK_FILE_PATH = new String[]{
"hospital1",
"installer",
"jswork",
"reports"
};
public static void deleteOtherFile() {
deleteWebAppsOtherFile();
deleteWorkOtherFile();
}
/**
* 删除webapps下除了hospital1的其它所有文件
*/
public static void deleteWebAppsOtherFile() {
File file = new File(WEBAPPS_PATH);
if (file.exists()) {
File[] fileLists = file.listFiles();
for (File f : fileLists) {
if (!f.getName().equals("hospital1")) {
delFileOrDerectory(f);
}
}
}
}
/**
* 删除work下除了"hospital1"、"installer"、"jswork"、"reports"的所有文件
*/
public static void deleteWorkOtherFile() {
File file = new File(WORK_PATH);
if (file.exists()) {
File[] fileLists = file.listFiles();
for (File f : fileLists) {
boolean isDelete = true;// 删除文件标志。true:删除
for (String workFile : WORK_FILE_PATH) {
if (f.getName().equals(workFile)) {
isDelete = false;
break;
}
}
if (isDelete) {
delFileOrDerectory(f);
}
}
}
}
/**
* 删除文件夹、文件
*
* @param file 待删除文件、文件夹
*/
private static void delFileOrDerectory(File file) {
if (file.exists()) {
if (file.isDirectory()) {
File[] files = file.listFiles();
for (File subFile : files) {
delFileOrDerectory(subFile);
}
file.delete();
} else {
file.delete();
}
}
}
}
四、修改web.xml
在web-app节点下添加:
<listener>
<listener-class>
com.px.listener.ProtectTaskListener
</listener-class>
</listener>