【问题标题】:User names and passwords are logged in plain text during initialization of Atomikos用户名和密码在 Atomikos 初始化期间以纯文本形式记录
【发布时间】:2015-10-16 03:48:34
【问题描述】:

我们的项目依赖 Atomikos 提供轻量级事务管理。但是,我们发现它在初始化期间以纯文本形式记录了 DB 用户名和密码。

例如

2015-10-15 16:43:01,106 [http-bio-8080-exec-4] INFO  com.atomikos.jdbc.AtomikosDataSourceBean  - AtomikosDataSoureBean 'LAB_Oracle': initializing with [ xaDataSourceClassName=oracle.jdbc.xa.client.OracleXADataSource, uniqueResourceName=LAB_Oracle, maxPoolSize=8, minPoolSize=1, borrowConnectionTimeout=30, maxIdleTime=60, reapTimeout=0, maintenanceInterval=60, testQuery=null, xaProperties=[URL=jdbc:oracle:thin:@***:1537:oocait01,user=***,password=**] loginTimeout=0]

是否有任何配置可以禁止记录这些机密信息?

【问题讨论】:

    标签: java jdbc jta xa atomikos


    【解决方案1】:

    就配置而言,您可以将日志类别com.atomikos.jdbc.AtomikosDataSourceBean 的阈值设置为WARN。有一些流行的日志框架的例子here。这将过滤掉整个消息。

    如果您只想过滤机密属性,您可以创建AtomikosDataSourceBean 的子类并覆盖受保护的方法printXaProperties()。然后,您可以过滤掉任何机密属性,例如密码。

    package my.com.atomikos.jdbc;
    
    import java.util.Enumeration;
    import java.util.Properties;
    
    public class AtomikosDataSourceBean extends com.atomikos.jdbc.AtomikosDataSourceBean {
        private static final long serialVersionUID = 1L;
    
        protected String printXaProperties()
        {
            Properties xaProperties = getXaProperties();
            StringBuffer ret = new StringBuffer();
            if ( xaProperties != null ) {
                Enumeration it = xaProperties.propertyNames();
                ret.append ( "[" );
                boolean first = true;
                while ( it.hasMoreElements() ) {
                    String name = ( String ) it.nextElement();
                    if ( name.equals ( "password" ) ) continue;
                    if ( ! first ) ret.append ( "," );
                    String value = xaProperties.getProperty( name );
                    ret.append ( name ); ret.append ( "=" ); ret.append ( value );
                    first = false;
                }
                ret.append ( "]" );
            }
            return ret.toString();
        }
    }
    

    由于 Atomikos 会自动检测日志框架,这可能会根据您测试、打包和部署应用程序的方式而有所不同,因此使用子类可能更安全。

    我提交了一个pull request,它可以进入第 4 版。我们拭目以待。

    【讨论】:

      猜你喜欢
      • 2017-01-27
      • 2015-12-20
      • 1970-01-01
      • 2018-12-03
      • 2019-02-26
      • 2020-03-16
      • 1970-01-01
      • 1970-01-01
      • 2013-10-18
      相关资源
      最近更新 更多