清理 Tomcat 访问日志条目

2024-03-05

在我们的日志中,我们看到信用卡号码是由于人们使用 CC 信息点击我们应用程序中的一些 ULR(我不知道他们为什么这样做)。我们希望清理这些信息(出于 PCI 考虑),甚至不将其保存到磁盘。

因此,我希望能够在日志条目到达日志文件之前对其进行清理。我一直在研究 Tomcat Valves(访问日志阀)。这是要走的路吗?


我能够通过扩展来解决这个问题AccessLogValve http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/valves/AccessLogValve.html并压倒一切public log(java.lang.String message) http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/valves/AccessLogValve.html#log%28java.lang.String%29:

public class SanitizedAccessLogValve extends AccessLogValve {

    private static Pattern pattern = Pattern.compile("\\b(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11})\\b");

    /*
     This method will sanitize any cc numbers in the string and replace them with x's
    */
    private String sanitize(String string) {
        String sanitizedString = string;

        if(string != null) {

            StringBuffer buffer = new StringBuffer();
            Matcher matcher = pattern.matcher(string);

            while(matcher.find()) {
                MatchResult matchResult = matcher.toMatchResult();

                int start = matchResult.start();
                int end = matchResult.end();

                String matchedText = string.substring(start, end);

                matcher.appendReplacement(buffer, "xxxxxxxxxxxxxxxx");                
            }

            matcher.appendTail(buffer);

            sanitizedString = buffer.toString();
        }

        return sanitizedString;
    }

    @Override
    public void log(String message) {
        super.log(sanitize(message));
    }
}

您需要将其编译成jar,然后将该jar文件放入$CATALINA_HOME/lib.

然后在你的server.xml:

<Valve className="my.valves.SanitizedAccessLogValve"
       directory="access_logs"  prefix="localhost." suffix=".log"
       pattern='%v %h %t "%r" %s %B %T "%{User-Agent}i"'/>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

清理 Tomcat 访问日志条目 的相关文章

  • Tomcat 如何保持会话完整性?

    HttpServletRequest s 获取会话 布尔值 http download oracle com javaee 6 api javax servlet http HttpServletRequest html getSessio
  • 使用 Trace 和 TraceSource 之间的区别

    任何人都知道之间的区别System Diagnostic Trace and System Diagnostic TraceSource课程 我在我的大部分项目中都使用了 Trace 我只是碰巧发现了TraceSource另一天 他们似乎提
  • Log4j2 自动配置

    我在应用时遇到问题log4j2 xml自动配置正确 我认为这与我的文件夹排列有关 我在用着maven添加 log4j2 库并按如下方式安排我的项目 一个包含所有 通用 类的项目 供我的系统的服务器和客户端使用 另一个 核心 项目 服务器端应
  • Firebase API 密钥限制不适用于 Android 应用程序包名称和 SHA1 指纹

    我们正在使用 Google Firebase 获取我们应用程序的 CrashLytics 数据 以及通过google services json文件被提出作为一个安全问题 因为应用程序 apk 文件可以被逆向工程来获取该文件 然后攻击者可以
  • 具有 CXF 和 Kerberos 身份验证的 Restful 服务

    尝试使用 Kerberos 身份验证保护现有 CXF JAX RS 服务时遇到困难 我浏览了似乎是参考文档的内容 http cxf apache org docs jaxrs kerberos html http cxf apache or
  • 处理 PHP 中的会话劫持

    阅读了 Stackoverflow 上有关会话劫持的许多问题 我发现验证用户会话的唯一 解决方案 是检查用户代理 这是一个薄弱的保护层 我什至懒得去检查实施它 所以 我想知道你们实施了哪些解决方案 您是否使用 PHP 的本机会话或者是否有更
  • Tomcat 热部署到托管多个应用程序的实例

    我的问题是关于部署到托管多个应用程序并托管 Struts Spring 和 Hibernate 的应用程序上下文的 Tomcat 服务器实例 我想在不重新启动 Tomcat 服务器的情况下将更改部署到一个应用程序 举个例子 在我们公司很多时
  • favicon.ico 在 Tomcat 7.0 的 spring mvc 3.2.2 中不显示?

    我是 spring mvc 新手 我的 favicon ico 没有显示在使用 spring 3 2 2 使用 tomcat 7 0 的浏览器选项卡中 我尝试查看相关的谷歌搜索 但仍然无法让它显示在浏览器选项卡中 FF Chrome IE
  • 如何调用 LogonUser() 来获取启用了 UAC 的 Windows 服务中的非限制完整令牌?

    我正在 Windows Server 2012 上运行 WindowsService 它需要模拟域管理员用户 该用户也被添加到计算机上的本地管理员组 系统上启用了 UAC 并且使用 LogonType 为 LOGON32 LOGON INT
  • 我应该如何合乎道德地处理用户密码存储以便以后进行明文检索?

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 随着我继续构建越来越多的网站和 Web 应用程序 我经常被要求以某种方式存储用户的密码 以便在
  • 正确使用 EncryptedSharedPreferences

    Android 最近发布了 EncryptedSharedPreferences 它自动加密 SharedPreferences 键 值数据 虽然这很好 但我发现我可以简单地连接 API 调用并检索解密的值 除了在调用 EncryptedS
  • 油猴安全性如何?

    我从未真正使用过greasemonkey 但我正在考虑使用它 考虑到 GreaseMonkey 允许您让互联网上的随机人改变您喜爱的网站的行为 它的安全性如何 他们可以窃取我的密码吗 看看我的私人数据 做我不想做的事吗 油猴安全性如何 Th
  • 具有共享日志配置的 Gradle 多项目

    是否有一种标准方法可以在 gradle 项目布局中的所有子项目之间共享日志记录配置 例如 log4j 或 logback 我现在做的就是复制一份logback xml or log4j properties in src main reso
  • 了解 ASP.NET 应用程序文件夹

    ASP NET 中的应用程序文件夹用于存储对运行网站至关重要的各种元素 我想更深入地了解这些文件夹 特别是文件夹的可访问性 根据有关的文章ASP NET 网站布局 http msdn microsoft com en us library
  • 使用鼠标检测的反验证码

    我想知道是否可以为仅使用 javascript 的表单创建一个安全的人体检测机制 不使用验证码 来检测鼠标移动 因为 jquery 或操作系统代码都可以移动鼠标 我是这么告诉的 这是我的计划 使用 jQuery 我可以检测鼠标是否已移动 然
  • tomcat 的 java.naming.provider.url 是什么

    我正在尝试使用 Jndi 从 tomcat 服务器获取数据库连接 在这种情况下 如果是 tomcat 我的 java naming provider url 是什么 问题不是很清楚 根据 JNDI文档 http docs oracle co
  • 使用多个具有不同日志级别的处理程序时出现意外的 python 记录器输出

    我正在尝试将数据记录到 stderr 并记录到文件中 该文件应包含all日志消息 并且 stderr 应该只转到命令行上配置的日志级别 这在日志记录指南中多次描述 但它似乎对我不起作用 我创建了一个小测试脚本来说明我的问题 usr bin
  • 在 docker 中重定向命令输出

    我想为我的服务器做一些简单的日志记录 它是一个在 Docker 容器中运行的小型 Flask 应用程序 这是 Dockerfile Dockerfile FROM dreen flask MAINTAINER dreen WORKDIR s
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • 如何使用 kubectl cp 通过列表过滤器自动将文件从本地系统复制到 kubernetes Pod

    我的 kubernetes 系统中有许多 pod 随机名称为 wordpress xxx xx 这里列出了pods https i stack imgur com k7Jxw png 我想使用一个命令kubectl cp另一种是将文件从一个

随机推荐