记录/安全注意事项和敏感数据

use*_*820 6 security logging

我正在研究与Web应用程序的日志记录和安全性相关的一般"体系结构".据我所知,记录所有请求/响应数据(不仅是访问日志,而是请求/响应的主体)被认为是最佳做法.它有利于安全分析,调试目的,审计等等.

存在一个问题,即在某些请求中传输敏感信息,例如密码和/或信用卡数据.

(请注意:当然,我使用的是HTTPS,但密码和/或信用卡数据在日志记录或日志文件中将显示为纯文本.顺便说一句,我不存储信用卡数据,因为我不是PCI DSS我们将这些数据传输给符合PCI DSS标准的合作伙伴.

目前,我记录并存储异地访问日志(所以日志没有请求/响应主体,但有GET参数数据),我在应用程序代码中记录请求/响应正文数据(所以我能够决定将哪种数据记录到日志中,并在将其写入日志之前擦除敏感数据).

但是,我正在考虑在应用程序之外实现日志记录(请求/响应主体),比如说在服务器级别通过某个模块(例如,mod_dumpio或类似的东西),但在这种情况下,记录敏感信息可能是一个大问题.

我该如何实施/配置它?

小智 5

处理敏感数据时,应考虑几种最佳做法。

首先,最小化您传输的所有敏感数据。通过尽早在体系结构中对密码进行哈希处理,可以确保任何下游组件甚至都不会冒暴露敏感数据的风险。

其次,与先前的观点相关联,您应该约束/隔离曾经收到此敏感信息的组件。对于密码,只有身份验证服务器才需要此信息-其余组件实际上仅应处理授权令牌(或类似的东西)。对于信用卡,应该仅将其关联提供那些可能需要的服务-例如系统的结帐/计费组件。

第三,对于确实需要获取逻辑敏感信息的实际值的那些系统(例如信用卡),您应该考虑创建/使用类似令牌的系统。基本上,这里是您可以存储敏感信息并提供ID引用的地方,该ID引用将替换原始的敏感数据元素(例如,用信用卡号替换信用卡号id)。

要结束该解决方案,请在尽可能靠近边缘(例如,您在其中捕获信用卡的位置)之间交换敏感数据,以换取此令牌。将此令牌交换为敏感信息值(具有正确的授权)以取回该值,然后在最近的可能时刻使用它。最后,审核在那些敏感点完成的日志记录,以确保未以明文形式记录日志。

这种设计模式是世界上一些最大的电子商务网站的工作方式。(对不起,我不允许透露谁。)希望能有所帮助!