Apache 足以防止未经授权的访问吗?

Is Apache enough to prevent unauthorized access?

我刚刚被指派完成一个具有用户限制访问权限的应用程序的开发。最初的开发者是一名合作学生,我也是。

查看他的代码后,用户似乎只访问过 index.php,而其他 php 页面在验证用户并确定请求后使用 Include 语句调用。

include __DIR__ . DIRECTORY_SEPARATOR . 'pages' . DIRECTORY_SEPARATOR . $page . 'Logic.php';

但是,我注意到他的网络应用程序的包含文件中有一条评论,

// Since this page can be accessed if the user knows its
// URL, we must check if user has been authenticated and
// authorized through index.php
// todo

他意识到存在这样一个漏洞,即可能猜测某些文件名称的用户可以获得未经授权的访问,他建议在每个包含文件的开头执行额外的授权检查。

我对 Apache 了解了一些,我知道它可以限制用户访问某些文件 and/or 目录。但是,如果我这样做了,我不确定它是否足够,我是否还应该在 index.php 中的一些额外的身份验证检查中编码。

如果配置得当,Apache 本身稍微调整一下就可以应对一些基本的攻击。

您可以了解如何防止使用 .htaccess 直接访问文件,因为一些攻击者会放置后门以获得访问权限,他们必须直接访问后门。 This tutorial 可以作为了解它的良好开端。

您还可以设置一个 basic privileges using apache,因此只有获得授权的人才能访问它。

如果您更喜欢修补,可以开始学习使用 mod_security to prevents some advanced attacks, just make sure that you won't get in to a trouble because of your own configurations since some configurations will trigger false positives. You can apply some free rules from OWASP so you can learn about how it works. Or if you need more advanced rules, you can buy the official rules from trustwave (yes, it's expensive), or buy cheaper rules from atomicorp(更便宜、更完整的规则,但有时会给出很多误报)。

不幸的是,apache 并不像许多软件一样完全安全。这个想法是为了让开发者难以在代码中创建良好的结构和组织。

如果 php 引擎被禁用并直接访问页面目录下的任何 URL,无论是在主配置还是在 .htaccess 文件中,这足以防止人们访问页面而不经过 index.php 页面。但是根据你的描述,情况并非如此。此外,即使有这些限制,它也不是一个非常安全的体系结构,但您需要多少安全性取决于您要保护的内容 - 而您没有告诉我们任何相关信息。

为每个脚本添加身份验证是解决问题的非常糟糕的方法。