【问题标题】:Secure way to log PHP exception trace (that might include sensible credentials)记录 PHP 异常跟踪的安全方式(可能包括合理的凭据)
【发布时间】:2018-11-19 21:20:00
【问题描述】:

上下文

我有一个网络应用程序,我在全局范围内捕获了我的异常以将它们记录到我的应用程序内的一个文件中 (/app/log/app.log)。公用文件夹无法在外部浏览,因为它被挂载以提供给客户端 (/public/index.php)。

我还使用了Exception::getTraceAsString() 的修改版本,它让我拥有完整的字符串,而不是 PHP 截断此跟踪中的字符串(代码真的很琐碎,我不会把类放在这里,因为它与我要问的问题)。

这是我的app.log 文件的示例:

2018-06-10 14:33:12.7016 (+02:00) [ERRO] Error of type PDOException catched
2018-06-10 14:33:12.7020 (+02:00) [DBUG] Error catched on line 22 of file C:\xampp\htdocs\my-app\app\bootstrap\database.php
2018-06-10 14:33:12.7026 (+02:00) [DBUG] #0 [internal function]: PDO->__construct('mysql:host=localhost;dbname=test;port=3306;adapter=;prefix=', 'root', '', Array)
2018-06-10 14:33:12.7028 (+02:00) [DBUG] #1 [internal function]: Phalcon\Db\Adapter\Pdo->connect(Array)
2018-06-10 14:33:12.7031 (+02:00) [DBUG] #2 C:\xampp\htdocs\my-app\app\bootstrap\database.php(22): Phalcon\Db\Adapter\Pdo->__construct(Array)
2018-06-10 14:33:12.7034 (+02:00) [DBUG] #3 C:\xampp\htdocs\my-app\public\index.php(7): include('C:\xampp\htdocs\my-app\app\bootstrap\database.php')

知道我想在我的应用程序之外处理这些信息,让我们说 SaaS 服务,用于跨各种日志目标(可能对 SaaS 系统的员工可见)进行存储和搜索。

问题

如您所见,我的app.log 有时会包含密码等敏感内容。

问题

是否有最先进的方法来处理我们日志跟踪中内容的敏感性?

另外,关于绝对路径在我们的日志中可见这一事实的安全性如何?

【问题讨论】:

标签: php security logging


【解决方案1】:

是否有最先进的方法来处理我们日志跟踪中内容的敏感性?

另外,关于绝对路径在我们的日志中可见这一事实的安全性如何?

您可以在这里做的最好的事情是使用公钥加密日志,只有您的运营团队和/或开发人员知道相应的密钥。

也就是说,我推荐使用sealing API来加密日志信息。

由于您询问了最先进的技术,我在此特别推荐sodium_crypto_box_seal() / sodium_crypto_box_seal_open()。 (PHP 7.2+)

【讨论】:

  • 您个人使用这种机制吗?是否可以从我的浏览器进行解密步骤(可能使用浏览器中的扩展程序),因为我还需要我的非开发人员同事能够解密这些,或者您是否建议创建一个小型 Web 应用程序来专门解决这个问题?
  • 密封 API 的目的是只有您的开发人员可以解密,而不是任意浏览器。话虽如此,是的,我确实在自己的项目中使用了这个 API。
猜你喜欢
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-29
  • 2013-02-21
  • 1970-01-01
  • 2017-05-26
相关资源
最近更新 更多