Si se ha publicado la versión 4.5.1 del sistema de gestión, el registro de actualización:
- Evite las vulnerabilidades de descarga de archivos arbitrarios
- Actualice shiro a la última versión 1.7.0 para evitar la vulnerabilidad de omisión de permisos
- Actualiza druid a la última versión v1.2.2
- Nuevos eventos de activación de filas de tabla (onCheck, onUncheck, onCheckAll, onUncheckAll)
- Solucione el problema del borrado al cerrar opciones no actuales en varias pestañas
- La vista previa de generación de código admite resaltado
- La configuración de MapperLocations admite separadores
- Ajuste de la información de permisos
- Agregue una imagen predeterminada para la imagen de perfil y cargue la imagen
- La clase de configuración global sigue siendo la misma que otras aplicaciones
- Vulnerabilidad de descarga de archivos arbitraria
RuoYi <= v4.5.0
Cualquier vulnerabilidad de descarga de archivos, el uso normal es descargar archivos del servidor, como código script, configuración del servidor o configuración del sistema, etc. Se puede utilizar ../
para adivinar la ruta capa por capa.
Debido a las necesidades comerciales, los sitios web a menudo necesitan proporcionar funciones de visualización o descarga de archivos, pero si no existen restricciones sobre los archivos que los usuarios pueden ver o descargar, los usuarios malintencionados pueden ver o descargar cualquier archivo confidencial. Esta es una vulnerabilidad de visualización y descarga de archivos.
La detección de vulnerabilidades: CommonController.java
, /common/download/resource
la interfaz se incluye checkAllowDownload
para comprobar si los archivos pueden ser descargados, si no hay necesidad de modificar este método para evitar que la información crítica se descarga.
Solución: actualice la RuoYi
versión >=4.5.1
o vuelva a agregar la verificación de descarga de archivos para evitar la descarga arbitraria de archivos.
/**
* 本地资源通用下载
*/
@GetMapping("/common/download/resource")
public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response)
throws Exception
{
try
{
if (!FileUtils.checkAllowDownload(resource))
{
throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource));
}
// 本地资源路径
String localPath = Global.getProfile();
// 数据库资源地址
String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX);
// 下载名称
String downloadName = StringUtils.substringAfterLast(downloadPath, "/");
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
FileUtils.setAttachmentResponseHeader(response, downloadName);
FileUtils.writeBytes(downloadPath, response.getOutputStream());
}
catch (Exception e)
{
log.error("下载文件失败", e);
}
}
/**
* 检查文件是否可下载
*
* @param resource 需要下载的文件
* @return true 正常 false 非法
*/
public static boolean checkAllowDownload(String resource)
{
// 禁止目录上跳级别
if (StringUtils.contains(resource, ".."))
{
return false;
}
// 检查允许下载的文件规则
if (ArrayUtils.contains(MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, FileTypeUtils.getFileType(resource)))
{
return true;
}
// 不在允许下载的文件规则
return false;
}
Función incorporada
1. Gestión de usuarios: el usuario es el operador del sistema, esta función completa principalmente la configuración del usuario del sistema.
2. Gestión de departamento: configure la organización del sistema (empresa, departamento, grupo) y muestre la autoridad de soporte en la estructura de árbol.
3. Gestión de puestos: configure los puestos de los usuarios del sistema.
4. Gestión del menú: configure el menú del sistema, la autoridad de operación, la identificación de la autoridad del botón, etc.
5. Administración de roles: la asignación de permisos del menú de roles y la configuración de roles se dividen en permisos de alcance de datos por organización.
6. Gestión del diccionario: mantenga algunos datos relativamente fijos que se utilizan con frecuencia en el sistema.
7. Gestión de parámetros: configure dinámicamente parámetros comunes para el sistema.
8. Anuncio de aviso: el sistema informa el anuncio de publicación de información y mantenimiento.
9. Registro de funcionamiento: consulta y registro de funcionamiento normal del sistema, consulta y registro de registro de información anormal del sistema.
10. Registro de inicio de sesión: la consulta del registro de inicio de sesión del sistema contiene excepciones de inicio de sesión.
11. Usuarios en línea: monitorea el estado de los usuarios activos en el sistema actual.
12. Tareas cronometradas: la programación de tareas en línea (agregar, modificar, eliminar) incluye registros de resultados de ejecución.
13. Generación de código: la generación de código de front-end y back-end (java, html, xml, sql) admite la descarga de CRUD.
14. Interfaz del sistema: genera automáticamente documentos de interfaz api relacionados de acuerdo con el código comercial.
15. Supervisión del servicio: supervise la CPU, la memoria, el disco, la pila y otra información relacionada del sistema actual.
16. Constructor en línea: arrastre los elementos del formulario para generar el código HTML correspondiente.
17. Supervisión del grupo de conexiones: supervise el estado actual del grupo de conexiones de la base de datos del sistema y analice SQL para encontrar cuellos de botella en el rendimiento del sistema.