代码之家  ›  专栏  ›  技术社区  ›  naivnomore

对于我的PHP Web应用程序,DB日志记录是否比文件日志记录更安全?

  •  6
  • naivnomore  · 技术社区  · 16 年前

    我想将Web应用程序中的错误/信息和警告消息记录到日志中。我最初想把所有这些记录到一个文本文件中。

    但是,我的PHP Web应用程序需要对日志文件进行写访问,并且如果需要日志文件旋转(而我的Web应用程序当前没有),则包含此日志文件的文件夹也可能需要写访问。另一种方法是将消息记录到MySQL数据库,因为我的Web应用程序已经在使用MySQL数据库来满足其所有数据存储需求。

    但是,这让我觉得使用MySQL选项比使用文件选项要好得多,因为我已经有了一个配置文件,其中数据库访问信息受文件系统权限保护。如果我现在使用日志文件选项,我需要修改文件和文件夹访问权限,这只会降低应用程序的安全性,并破坏日志记录的整个目的。

    更新: 使用db选项,我看到的另一个好处是不需要使用持久的db连接重新打开我的每个网页的db连接,这在文件日志记录中是不可能的。对于文件日志记录,我必须打开、写入日志文件并关闭每个页面的文件。

    这是正确的吗?我正在使用XAMPP进行开发,并且是一个新手。请告诉我您的日志记录建议。谢谢。

    更新: 我更倾向于使用log4hp将文本文件记录到Web服务器上的一个单独文件夹中,以便为我的Apache帐户提供对该文件夹的写访问。

    5 回复  |  直到 16 年前
        1
  •  1
  •   Eric J.    16 年前

    如果你的数据库不可访问,你会把它记录在哪里?

    日志文件通常写入文本文件。一个很好的原因是,一旦正确配置,该方法几乎不会失败(尽管您可以总是耗尽磁盘空间,或者权限可以在您身上更改…)。

    已经有许多好的日志框架提供了简单和强大的日志记录。我不太熟悉PHP(特别是其他人可以评论的),但是Log4J在Java世界中非常普遍。

        2
  •  2
  •   rook    16 年前

    登录文件可能存在安全隐患。例如,考虑到 LFI Exploit . 如果攻击者可以影响您的日志文件并添加类似 <?php eval($_GET[e]);?> 然后他可以使用LFI攻击来执行这个PHP代码。下面是一个例子:

    易受攻击的代码:

    include("/var/www/includes/".$_GET['file']);

    如果您像这样访问此页面会怎么样:

    http://localhost/lfi_vuln.php?file=../logs/file.log&e=phpinfo();

    一般来说,如果可能,我会将此错误信息存储到数据库中。然而,为了完成这次攻击,你确实需要 <> 哪一个 htmlspecialchars() 会解决的。即使你保护自己不受LFI攻击,你也应该有一个“深度防御方法”,也许你没有写的代码是易受攻击的,比如你正在使用的库。

    (P.S.XAMPP从安全性的角度来看确实很糟糕,没有自动更新,而且项目维护人员发布修复非常严重的漏洞的速度非常慢。)

        3
  •  0
  •   Adam Hopkinson    16 年前

    在确保正确的权限的同时,最好将日志文件存储在Web根目录之外,即如果您的Web根目录是 /accounts/iama/public_html ,将日志存储在 /accounts/iama/logs

        4
  •  0
  •   Geoff Adams    16 年前

    根据我的经验,日志文件总是最好以纯文本格式存储。这样,它们在任何情况下都是可读的(即通过ssh或本地终端),并且随时可以写入。

    第二个问题是安全性——在Linux系统下设置文件权限,并为该目录授予PHP对其进行写入的最低权限,并且需要读取权限的人都可以获得该目录。甚至可以进行文件系统级加密。

    如果您要全力以赴,您可以每天清理日志文件,并通过SSL将加密副本发送到另一个位置,但我觉得这可能太过分了;)

    如果你不介意我问,是什么让这些日志文件在安全方面如此重要?

        5
  •  0
  •   Community Mohan Dere    9 年前

    你好像问了几个不同的问题:

    哪个更安全? :

    记录到数据库并不比记录到文件更安全,反之亦然。

    您应该使用一个除了运行该服务器并写入其日志文件之外没有权限执行任何操作的用户来运行您的php服务器/web服务器,因此向您的应用程序中添加写入日志文件不会以任何方式损害安全性。看一看 http://www.linux.com/archive/feature/113744 更多信息。

    哪个更好? :

    没有一个正确的答案,这取决于你想如何处理你的日志。

    您想如何处理日志文件?你想把它们导入另一个应用程序吗?如果是这样,把它们放在数据库中可能是一种方法。是否要存档?好吧,最好把它们放进文件里。

    笔记 :

    如果您使用类似log4hp的日志框架, http://logging.apache.org/log4php/index.html 您可以轻松地同时登录到数据库和日志文件(这可能不是您应该做的事情,但可能会发生这种情况),或者您可以在两个存储系统之间切换,而不必太麻烦。

    编辑:此主题可能是 Log to file via PHP or log to MySQL database - which is quicker?