PHP写入服务器上的文本文件

时间:2014-06-27 03:54:46

标签: php security

我有一个日志进程,当人们在特定表单上提供输入时,会在我的服务器上写一个小的自定义.txt日志文件(因此我可以关注那些尝试使用注入的人)。

我的问题:这个文件是纯文本,除了PHP调用file_get_contentsfile_put_contents之外,我的代码中的任何地方都没有链接到它。有没有办法看到这个文件?搜索引擎可能会找到它吗?

(我完全理解这是默默无闻的安全问题。我的问题是人们可能会“忽视”这一点。)

2 个答案:

答案 0 :(得分:2)

要使其无法从网络或搜索引擎访问,您只需将该文件放在网络根目录的网站上即可。确保对该文件夹具有写入权限:)

答案 1 :(得分:2)

  

我完全明白这是默默无闻的安全。我的问题是   怎么可能" unobscure"此

他们需要能够了解您网站的代码结构和逻辑。因此,如果您将目录命名为logs/以外的其他内容,则这是第一个不错的步骤。或者保留名为logs/的目录,但将其嵌套在另一个目录中,只有您真正了解my_cool_stuff/logs

如果你真的想确定无人问津,你可以随时设置一个Apache配置规则,阻止任何人直接从浏览器直接读取.txt文件,只需使用Apache Files您的网站的Apache配置或您网站上的.htaccess中的这样的指令:

<Files ~ "\.(txt|yml|yaml)$">
  Order allow,deny
  Deny from all
</Files>

正如官方Apache文档所说明的Files指令的放置:

  

请注意,与<Directory><Location>部分不同,<Files>部分不同   可以在.htaccess个文件中使用。这允许用户控制   在逐个文件级别访问自己的文件。

所以只需将它放在服务器根目录下的.htaccess文件中,它基本上告诉Apache,“不允许任何人直接访问以.txt结尾的文件,{{1 }或.yml直接通过网络服务器扩展。“

现在有些人会建议您只将文件100%放在主Web根目录之外。也许这会有所帮助。但是,让我们说一些恶意软件感染进入您的代码和有人可以浏览你的目录结构 - 这种情况不仅仅是 - 然后你隐藏数据的虚拟摇滚无关紧要:它会暴露给可以穿透你系统的人。拥有与Web用户相同的访问权限。

或简单地说:如果Apache可以访问目录&amp;读取文件,然后如果您的网站被渗透,那么渗透的恶意软件将具有与Apache&amp;因此可以读取文件和Apache可以在任何地方使用。

这就是为什么我一般认为“通过合理的默默无闻的安全”是最好的现实世界策略。只是阻止直接访问您不希望通过Web浏览器解析的文件,将这些文件放在一个相当模糊的位置 - 即使它位于Web根目录中 - 并将其称为一天。