#杂
Log4j2的漏洞风波已经过去一段时间了,今天有空想起来,找来分析漏洞的文章看了一下:
https://www.freebuf.com/vuls/316143.html
不太懂java,以前迫于生计写过小半年的java CRUD。但是看到这个分析的时候,第一感觉是:一个写日志的库,为什么要有访问远程网络的操作,而且还会从远程服务器上加载class文件到本地来执行?
我的理解:日志库只管往本地写文件就好了,再由其他同步文件的组件去同步日志到别的服务器,如何采集不是这个日志库关注的内容,而是采集组件的事情;退一步说,即便是需要把日志写到远程服务器,也只能是向远程写,而不是由远程的行为来影响自己(下载class到本地执行)。
这半年编码有一个感受:API接口就是系统的边界,如何定义接口,就是向调用者如何承诺自己对外能提供的功能。在我看来,Log4j2提供的接口,口子开得有点太大了。
Unix的一个设计哲学:“一个程序只做好一件事”,每个模块之间定义清晰自己的边界在哪里,一个模块的输出做为下一个模块的输入,配合着搭积木一般来工作,而不是把接口的边界放的很大,大而全什么都能做。
Post #67
945