Commit 08481913 authored by 张森's avatar 张森

XML External Entity Injection(XML外部实体注入) 问题处理

parent c26e0e3f
...@@ -370,30 +370,30 @@ public class DataDictionaryController extends BaseController { ...@@ -370,30 +370,30 @@ public class DataDictionaryController extends BaseController {
@RequestMapping(value = "/cleanRedis", method = RequestMethod.GET) @RequestMapping(value = "/cleanRedis", method = RequestMethod.GET)
@ApiOperation(httpMethod = "GET", value = "清楚redis缓存", notes = "清楚redis缓存") @ApiOperation(httpMethod = "GET", value = "清楚redis缓存", notes = "清楚redis缓存")
public ResponseModel<Object> cleanRedis(@RequestParam String type) throws Exception { public ResponseModel<Object> cleanRedis(@RequestParam String type) throws Exception {
type = type.toLowerCase(); type = type.toLowerCase(Locale.ENGLISH);
if ("all".equalsIgnoreCase(type)) { if ("all".equalsIgnoreCase(type)) {
RedisConnection redisConnection = redisTemplate.getConnectionFactory().getConnection(); RedisConnection redisConnection = redisTemplate.getConnectionFactory().getConnection();
redisConnection.flushAll(); redisConnection.flushAll();
redisConnection.close(); redisConnection.close();
} else if (RedisKey.FORM_CODE.startsWith(type)) { } else if (RedisKey.FORM_CODE.toLowerCase(Locale.ENGLISH).startsWith(type)) {
redisUtils.del(RedisKey.FORM_CODE); redisUtils.del(RedisKey.FORM_CODE);
} else if (RedisKey.DATA_DICTIONARY_CODE.startsWith(type)) { } else if (RedisKey.DATA_DICTIONARY_CODE.toLowerCase(Locale.ENGLISH).startsWith(type)) {
redisUtils.del(RedisKey.DATA_DICTIONARY_CODE); redisUtils.del(RedisKey.DATA_DICTIONARY_CODE);
} else if (RedisKey.DATA_DICTIONARY_CODE_XIN.startsWith(type)) { } else if (RedisKey.DATA_DICTIONARY_CODE_XIN.toLowerCase(Locale.ENGLISH).startsWith(type)) {
redisUtils.del(RedisKey.DATA_DICTIONARY_CODE_XIN); redisUtils.del(RedisKey.DATA_DICTIONARY_CODE_XIN);
} else if (RedisKey.FIREFIGHTERS_ID.startsWith(type)) { } else if (RedisKey.FIREFIGHTERS_ID.toLowerCase(Locale.ENGLISH).startsWith(type)) {
redisUtils.del(RedisKey.FIREFIGHTERS_ID); redisUtils.del(RedisKey.FIREFIGHTERS_ID);
} else if (RedisKey.FIREFIGHTERS_LIST_ID.startsWith(type)) { } else if (RedisKey.FIREFIGHTERS_LIST_ID.toLowerCase(Locale.ENGLISH).startsWith(type)) {
redisUtils.del(RedisKey.FIREFIGHTERS_LIST_ID); redisUtils.del(RedisKey.FIREFIGHTERS_LIST_ID);
} else if (RedisKey.EDUCATION_POST_EXPERIENCE_FIREFIGHTERS_ID.startsWith(type)) { } else if (RedisKey.EDUCATION_POST_EXPERIENCE_FIREFIGHTERS_ID.toLowerCase(Locale.ENGLISH).startsWith(type)) {
redisUtils.del(RedisKey.EDUCATION_POST_EXPERIENCE_FIREFIGHTERS_ID); redisUtils.del(RedisKey.EDUCATION_POST_EXPERIENCE_FIREFIGHTERS_ID);
} else if (RedisKey.CONTRACT_ID.startsWith(type)) { } else if (RedisKey.CONTRACT_ID.toLowerCase(Locale.ENGLISH).startsWith(type)) {
redisUtils.del(RedisKey.CONTRACT_ID); redisUtils.del(RedisKey.CONTRACT_ID);
} else if (RedisKey.THOUGHT_ID.startsWith(type)) { } else if (RedisKey.THOUGHT_ID.toLowerCase(Locale.ENGLISH).startsWith(type)) {
redisUtils.del(RedisKey.THOUGHT_ID); redisUtils.del(RedisKey.THOUGHT_ID);
} else if (RedisKey.ALERTCALLED_ID.startsWith(type)) { } else if (RedisKey.ALERTCALLED_ID.toLowerCase(Locale.ENGLISH).startsWith(type)) {
redisUtils.del(RedisKey.ALERTCALLED_ID); redisUtils.del(RedisKey.ALERTCALLED_ID);
} else if (RedisKey.TZS_ALERTCALLED_ID.startsWith(type)) { } else if (RedisKey.TZS_ALERTCALLED_ID.toLowerCase(Locale.ENGLISH).startsWith(type)) {
redisUtils.del(RedisKey.TZS_ALERTCALLED_ID); redisUtils.del(RedisKey.TZS_ALERTCALLED_ID);
} }
return ResponseHelper.buildResponse(type); return ResponseHelper.buildResponse(type);
......
...@@ -119,6 +119,7 @@ public class WordConverterUtils { ...@@ -119,6 +119,7 @@ public class WordConverterUtils {
StreamResult streamResult = new StreamResult(targetFile); StreamResult streamResult = new StreamResult(targetFile);
TransformerFactory tf = TransformerFactory.newInstance(); TransformerFactory tf = TransformerFactory.newInstance();
tf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); tf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
Transformer serializer = tf.newTransformer(); Transformer serializer = tf.newTransformer();
serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8"); serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
serializer.setOutputProperty(OutputKeys.INDENT, "yes"); serializer.setOutputProperty(OutputKeys.INDENT, "yes");
......
...@@ -108,6 +108,7 @@ public class WordConverterUtils { ...@@ -108,6 +108,7 @@ public class WordConverterUtils {
StreamResult streamResult = new StreamResult(targetFile); StreamResult streamResult = new StreamResult(targetFile);
TransformerFactory tf = TransformerFactory.newInstance(); TransformerFactory tf = TransformerFactory.newInstance();
tf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); tf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
Transformer serializer = tf.newTransformer(); Transformer serializer = tf.newTransformer();
serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8"); serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
serializer.setOutputProperty(OutputKeys.INDENT, "yes"); serializer.setOutputProperty(OutputKeys.INDENT, "yes");
...@@ -157,6 +158,7 @@ public class WordConverterUtils { ...@@ -157,6 +158,7 @@ public class WordConverterUtils {
StreamResult streamResult = new StreamResult(stringWriter); StreamResult streamResult = new StreamResult(stringWriter);
TransformerFactory tf = TransformerFactory.newInstance(); TransformerFactory tf = TransformerFactory.newInstance();
tf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); tf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
Transformer serializer = tf.newTransformer(); Transformer serializer = tf.newTransformer();
serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8"); serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
serializer.setOutputProperty(OutputKeys.INDENT, "yes"); serializer.setOutputProperty(OutputKeys.INDENT, "yes");
......
...@@ -121,6 +121,7 @@ public class WordHtml implements AbstractHtml { ...@@ -121,6 +121,7 @@ public class WordHtml implements AbstractHtml {
TransformerFactory tf = TransformerFactory.newInstance(); TransformerFactory tf = TransformerFactory.newInstance();
tf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); tf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
// 创建执行从 Source 到 Result 的复制的新 Transformer。 // 创建执行从 Source 到 Result 的复制的新 Transformer。
Transformer serializer = tf.newTransformer(); Transformer serializer = tf.newTransformer();
serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); // 文件编码方式 serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); // 文件编码方式
...@@ -208,6 +209,7 @@ public class WordHtml implements AbstractHtml { ...@@ -208,6 +209,7 @@ public class WordHtml implements AbstractHtml {
//根据XSL文件创建准个转换对象 //根据XSL文件创建准个转换对象
TransformerFactory transformerFactory = TransformerFactory.newInstance(); TransformerFactory transformerFactory = TransformerFactory.newInstance();
transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
Transformer transformer = transformerFactory.newTransformer(template); Transformer transformer = transformerFactory.newTransformer(template);
//处理xml进行交换 //处理xml进行交换
transformer.transform(source, result); transformer.transform(source, result);
......
...@@ -19,9 +19,10 @@ public class XmlBuilder { ...@@ -19,9 +19,10 @@ public class XmlBuilder {
public static Object xmlStrToObject(Class<?> clazz, String xmlStr) throws Exception { public static Object xmlStrToObject(Class<?> clazz, String xmlStr) throws Exception {
Object obj = null; Object obj = null;
Reader reader = null; StringReader reader = null;
JAXBContext context = JAXBContext.newInstance(clazz); JAXBContext context = JAXBContext.newInstance(clazz);
Unmarshaller un = context.createUnmarshaller(); Unmarshaller un = context.createUnmarshaller();
un.setProperty("com.sun.xml.bind.v2.runtime.property.DisableExternalEntities", true); // 禁用外部实体解析
reader = new StringReader(FilenameUtils.normalize(xmlStr)); reader = new StringReader(FilenameUtils.normalize(xmlStr));
obj = un.unmarshal(reader); obj = un.unmarshal(reader);
if (null != reader) { if (null != reader) {
......
...@@ -292,7 +292,7 @@ public class MaintenanceCompanyServiceImpl ...@@ -292,7 +292,7 @@ public class MaintenanceCompanyServiceImpl
public List<Map<String, Object>> getAllMaintenanceEexcleList(String maintenanceType, Map<String, Object> parms) { public List<Map<String, Object>> getAllMaintenanceEexcleList(String maintenanceType, Map<String, Object> parms) {
List<Map<String, Object>> da=null; List<Map<String, Object>> da=null;
String type = null; String type = null;
switch (maintenanceType.toUpperCase()) { switch (maintenanceType.toUpperCase(Locale.ENGLISH)) {
case PERSON: case PERSON:
type = MAINTENANCE_PERSON; type = MAINTENANCE_PERSON;
break; break;
......
...@@ -882,6 +882,7 @@ public class CheckController extends AbstractBaseController { ...@@ -882,6 +882,7 @@ public class CheckController extends AbstractBaseController {
Result result = new StreamResult(html); Result result = new StreamResult(html);
TransformerFactory transformerFactory = TransformerFactory.newInstance(); TransformerFactory transformerFactory = TransformerFactory.newInstance();
transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
Transformer transformer = transformerFactory.newTransformer(template); Transformer transformer = transformerFactory.newTransformer(template);
transformer.transform(source, result); transformer.transform(source, result);
String data = IOUtils.toString(fis, StandardCharsets.UTF_8); String data = IOUtils.toString(fis, StandardCharsets.UTF_8);
......
...@@ -198,6 +198,7 @@ public class TaskController extends AbstractBaseController{ ...@@ -198,6 +198,7 @@ public class TaskController extends AbstractBaseController{
Result result=new StreamResult(html); Result result=new StreamResult(html);
TransformerFactory transformerFactory = TransformerFactory.newInstance(); TransformerFactory transformerFactory = TransformerFactory.newInstance();
transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
Transformer transformer = transformerFactory.newTransformer(template); Transformer transformer = transformerFactory.newTransformer(template);
transformer.transform(source, result); transformer.transform(source, result);
......
...@@ -119,6 +119,7 @@ public class WordHtml implements AbstractHtml { ...@@ -119,6 +119,7 @@ public class WordHtml implements AbstractHtml {
streamResult = new StreamResult(out); streamResult = new StreamResult(out);
TransformerFactory tf = TransformerFactory.newInstance(); TransformerFactory tf = TransformerFactory.newInstance();
tf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); tf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
// 创建执行从 Source 到 Result 的复制的新 Transformer。 // 创建执行从 Source 到 Result 的复制的新 Transformer。
Transformer serializer = tf.newTransformer(); Transformer serializer = tf.newTransformer();
serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); // 文件编码方式 serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); // 文件编码方式
...@@ -206,6 +207,7 @@ public class WordHtml implements AbstractHtml { ...@@ -206,6 +207,7 @@ public class WordHtml implements AbstractHtml {
//根据XSL文件创建准个转换对象 //根据XSL文件创建准个转换对象
TransformerFactory transformerFactory = TransformerFactory.newInstance(); TransformerFactory transformerFactory = TransformerFactory.newInstance();
transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
transformerFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
Transformer transformer = transformerFactory.newTransformer(template); Transformer transformer = transformerFactory.newTransformer(template);
//处理xml进行交换 //处理xml进行交换
transformer.transform(source, result); transformer.transform(source, result);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment