安全性:我应该将供应商目录和composer.json移动到文档根目录之外吗?

8
  1. 刚开始使用composer。
  2. 使用composer将一些东西安装到了<documentroot>/vendor/目录中。

  3. 现在,任何人(包括黑客)都可以通过http://foo.tld/composer.json阅读我的composer.json

  4. 这时他们就知道了安装了哪些软件,然后他们可能会使用像http://foo.tld/vendor/symfony/这样的URL来探测我的<documentroot>/vendor/目录。

我该怎么办?

a) 我可以:

  • chmod 0600 composer.json
  • 在vendor目录中放置一个.htaccess文件,以拒绝所有访问

b) 将vendor目录移到文档根目录之外(这在共享托管环境中并不总是可行的)。

3个回答

9
您应该将其移出DOCUMENT_ROOT。
框架应用程序的通常结构是顶级目录(包含文件和composer.json文件)不是DOCUMENT_ROOT。通常有一个专门的目录,可能命名为“public”或“htdocs”,其中包含所有常规资产(CSS、JS、图片),以及“中心”index.php文件。
如果您无法在共享主机上获得该布局,则可能应该继续前进,因为您无法隐藏文件免受直接HTTP访问。

1

你应该将这些文件隐藏起来,以免被偷窥。

只需正确组织文件。例如,按照以下结构:

proj
|-- app
|   |-- bootstrap.php
|   +-- functions.php
|-- composer.json
|-- composer.lock
|-- public
|   |-- index.php
|   |-- css
|   |-- images
|   +-- scripts
+-- vendors
     |-- package1 
     +-- package2

将所有逻辑放入app(也可以是srclib等)中。 将所有资产放入public目录(也可以是wwwwebroot等)中。 在public中放置简单的index.php,其中包括来自../app的应用程序引导文件,如require dirname(__DIR__).'/app/bootstrap.php';。 隐藏其他所有内容使其不对公众可见
  • 设置Web服务器从/path/to/proj/public提供文件
  • 或者,在共享主机的情况下,使用.htaccess文件保护根目录:
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule    ^$    webroot/    [L]
    RewriteRule    (.*) webroot/$1    [L]
</IfModule>

请注意:如果您正在使用框架,特别是MVC - 最好遵循框架推荐的结构。

0

你在示例链接中提到了Symfony。如果你正在使用Symfony,如果你的项目位于.../project目录下,那么你的文档根目录就是.../project/web,这就是告诉Apache或你正在使用的服务器使用的内容。其他所有的东西都是你的“应用程序”(我们称之为这个名字),它不需要提供给公众。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接