1. 问题描述
druid是国内及公司内部最常用的数据库连接池配置管理工具;其内置监控页面,用于拦截sql及实时监控连接池/sql信息,该页面在原生的druid包中默认为禁用,但其用于适配springboot的druid-spring-boot-starter包,默认打开该监控页面(http://ip:port/druid/index.html) ,打开后存在如下风险:
1.1 暴露DB信息
由于druid监控页面地址是固定的,容易被猜,监控页面默认没有任何安全措施,容易暴露项目信息,如:数据库域名地址、库名、表名、查询的sql及url等,如果druid有漏洞,甚至可能被攻击。
-
泄漏DB域名、使用用户及库名:
-
泄漏SQL信息:
-
泄漏URL信息:
1.2 成为非法广告的肉机
监控页面中的多个tab页含阿里云广告,且power by连接到作者个人域名,估计没续费,已被澳门赌场站点抢占,国内该类广告是违法的,如下图:
2. 影响范围
- springboot项目:该问题我们已向官方提交request官方尚未修复,所以我们使用的任意版本druid-spring-boot-starter都有问题。
- 非sprinboot项目:如果手工启用监控页面,且未指定登录用户名、密码及允许访问的IP,也存在相同问题。
3. 解决办法
判断项目是否添加druid监控页面的方法:是否能打开druid监控页面(http://ip:port/druid/index.html) ,能打开,则已添加;反之,未添加。
3.1 springboot项目
关闭监控页面及相关的stat、web-stat监控项,在springboot的application-${env}.yml中,建议添加或调整为如下配置:
spring:
datasource:
druid:
filter:
stat:
enabled: false
wall:
enabled: false
slf4j:
enabled: false
log4j2:
enabled: false
log4j:
enabled: false
commons-log:
enabled: false
stat-view-servlet:
enabled: false # 如启用,建议:配置用户名&密码并指定允许访问的IP,确保信息[数据库地址/用户名/表结构等]不泄漏,安全无小事
login-username: athm@dealer
login-password: l5vTEgeUL0rQQ3CU
allow: 127.0.0.1
web-stat-filter:
enabled: false
session-stat-enable: false
特别说明: druid项目代码贡献人数众多,无统一管理,接近40%的issue无人处理,存在代码管理混乱等问题,druid-spring-boot-starter中启用监控页面的功能为一个非主要维护者提交的代码,竟被采纳,所以我们建议对druid-spring-boot-starter的配置项尽量保守:即使默认关闭的配置,我们也手工指明,避免后续版本默认调整为启用。
上述配置信息,详细说明:
spring:
datasource:
druid:
filter:
stat:
enabled: false #默认值为true,监控sql\慢sql等功能,我们建议修改为false,如果需要打开监控页面或者将慢sql输出到日志中,则修改为true。
wall:
enabled: false #默认值为false,sql防火墙,支持过滤sql,如禁止使用delete *等操作。
slf4j:
enabled: false #指定使用slf4j日志组件,支持选择将各种操作过程输出到日志中。
log4j2:
enabled: false #指定使用log4j2日志组件,支持选择将各种操作过程输出到日志中。
log4j:
enabled: false #指定使用log4j日志组件,支持选择将各种操作过程输出到日志中。
commons-log:
enabled: false #指定使用commons-log日志组件,支持选择将各种操作过程输出到日志中。
stat-view-servlet:
enabled: false #默认值为true,即打开监控页面,但存在泄漏信息的风险,所以修改为false
login-username: athm@dealer #配置监控页面登录用户名,启用监控页面后才可用,建议业务方,重新定义,别使用我们的给定值
login-password: l5vTEgeUL0rQQ3CU #配置监控页面登录密码,启用监控页面后才可用,建议业务方,重新定义,别使用我们的给定值
allow: 127.0.0.1 #配置允许访问监控页面的IP地址
web-stat-filter:
enabled: false #默认值为true,统计web关联的监控信息如session/url等,建议修改为false
session-stat-enable: false #该功能模块代码不完善,特定场景下会诱发异常,非特别需求,建议修改为false
其他建议: 某些特定场景,如线上问题分析、故障复盘等,需要打开监控页面,则建议指定登录用户名&密码及允许访问的IP,确保信息不外泄。
3.2 非springboot项目
默认不启用druid监控页面,如果现在已启用,建议删除;如有特殊需求需要打开监控页面,建议给监控页面配置用户名、密码或允许访问的IP,确保信息不外泄。
非springboot项目配置druid监控页面的方法
4. 修改后验证方法
打开监控页面(http://ip:port/druid/index.html)报404。
99. 引文
来源:oschina
链接:https://my.oschina.net/u/2352002/blog/2998110