如何加密log4net日志文件

10

有没有办法加密或保护log4net的输出?


你到底想加密什么?日志输出?还是访问log4net API?或者其他什么东西? - Ronald Wildenberg
4个回答

8
我假设您想要加密日志输出。在这种情况下,您需要编写自己的Appender来处理加密。我建议先确定您打算使用哪种不加密的输出机制(例如FileAppender、EventLogAppender等),然后扩展该Appender并覆盖实际编写输出的功能。
关于appender的参考文档可以在这里找到。
例如,通过EncryptedFileAppender扩展FileAppender,并覆盖/实现所需的成员以连接到文件编写。
或者,您可以从IAppender扩展并完全从头创建一个appender。那会给您更多的控制权,但如果您只是尝试加密有效负载,则可能需要更多的工作。

谢谢您提供的有用建议。您的意思是,在将内容附加到日志之前最好对其进行加密,通过实现一个可以完成此工作的包装器。这样,我的日志内容就全部加密了,而无需在log4net中进行任何配置? - paradisonoir
你应该能够钩入实际将每个行项目附加到日志文件的位置,这使您可以加密整个行。完成此操作后,您需要配置log4net以使用您的Appender而不是之前使用的任何内容。在这种情况下,是EncryptedFileAppender。 - Joseph
@Joseph,您是建议对每行日志进行加密,还是在滚动到另一个文件时(当它达到最大日志大小时)进行加密? - paradisonoir
@paradisonoir 无论您偏好哪种方式,记住您必须具有相同的功能才能解密。 - Joseph

3

如果您想防止用户通过网络阅读日志记录,可以将写入日志记录的文件名更改为不允许您的网站提供服务的扩展名。这样,用户无法猜测您的日志文件并在网络上访问它。

如果您试图防止已登录到服务器本身的用户查看文件内容,则可以使用权限控制锁定文件,以便只有特定管理员组中的用户可以查看内容。

或者,您可以记录到数据库中,这样就不需要保护任何文件。


3
没有针对加密的开箱即用支持。正如其他人在这里所说,您将不得不自己实现它。
话虽如此,我建议子类化ForwardingAppender来执行加密操作。这基本上让您将appender放在您选择执行实际写入磁盘的任何标准appender的前面。

2
我知道这个答案距离原帖发布日期已经有几年了,但是在遇到同样的问题后,我决定创建一个开源软件包来完成这项工作:Log4Net消息加密器。
源代码可以在GitHub找到。
而软件包可以从NuGet下载。

谢谢分享,我一直在寻找类似的nlog解决方案,现在至少有一个参考实现可以跟随了。顺便说一下,我计划使用公钥/私钥来加密随机密钥以进一步提高安全性,而不是使用固定对称密钥,因为任何能够访问日志的人都可以从app.config中获取密钥。 - faulty
1
很高兴我能帮忙!对我来说,主要用例集中在将日志存储在数据库或初始服务器之外。我的想法是,如果攻击者可以访问web.config文件,加密日志可能是徒劳的举动!我甚至考虑将实现移植到NLog上,但生活阻碍了我。如果您成功创建并开源该项目,请告诉我,因为我会特别感兴趣! - TK.
1
另外需要提到的是,web.config中的加密密钥部分应该使用Aspnet_regiis进行加密。这意味着密钥不会以明文形式存在,会更加安全一些。 - TK.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接