目录结构,如果您不使用MVC

时间:2013-02-24 05:13:51

标签: php security directory-structure

有很多关于目录结构的文档,但大多数都是关于MVC目录结构的。 但是如果我们不想使用任何框架或MVC呢?

  • 有些人说“无需移动到公共目录之上,密码 保护就足够了(第一选择)“
  • 有人说“把所有重要文件都放在public_html(第二个选项)”
  • 有些人说“只将index.php,css和js文件放在public_html(第3个选项)中”

我真的很困惑。

第一个选项:

/public_html
   /css
   /images
   /libs
 index.php
 profile.php
 search.php

第二个选项:我仍然可以使用ww.mysite.com/index.php,ww.mysite.com/profile.php ..链接结构

/libs
/public_html
      /css
      /images
    index.php
    profile.php
    search.php

第三个选项:我的链接如下:ww.mysite.com/index.php?view = search

/view
  -profile.php
  -search.php   
/libs
/public_html
    /css
    /images
  index.php

哪一个是最佳做法?目录结构对安全性有影响吗? 谢谢你的帮助!

2 个答案:

答案 0 :(得分:4)

我认为第三种选择是最好的,但我会进一步扩展(见下文)。如果可以直接从互联网访问文件,它可能会在出现问题时提供信息。

在第一个和第二个选项中,如果mime类型设置错误或由于某些其他原因PHP不解析文件,它通常会显示为text/html或纯文本。在第一个和第二个选项中,这意味着有人可能会获取数据库登录等信息。

我通常将其设置为类似于选项3,但是将所有内容传递给另一个索引文件,并且不要使URI匹配文件view=search表示从{{1获取文件search.php文件夹。我不知道这个设置,但这是个人品味。

我的设置看起来像这样

view

/private /view -profile.php -search.php /libs -index.php /public_html /css /images -index.php 如果它以普通文本形式传递,只需将其移交给私人意义,除了您的文件存储在另一个目录中之外,它不会提供任何信息。所有处理均由public_html/index.php

完成
private/index.php

即使出现配置错误,我也从未发现此设置存在严重问题。

答案 1 :(得分:2)

关于文件夹结构,它与MVC或使用框架或其他任何内容无关。用户不能直接访问不在公共目录中的文件(理论上)。 MVC框架选择文件结构,因为这是良好的实践,这就是他们的目的,教育程序员有关良好的实践。

拒绝使用框架是拒绝对好的实践进行自我教育,因为最臭名昭着的通常是由经验程序员设计的。

我没有看到你的代码,但如果你允许基于请求的查询参数直接获取php文件,那么你就遇到了麻烦(从安全角度来看)。这就是框架实现前端控制器模式,控制器和路由器的原因,以便将php文件层次结构与请求URL的方式分离。