Web服务器上的PHP文件安全性

时间:2011-06-29 17:06:39

标签: php security

我正在慢慢学习PHP,MySQL以及一些HTML,使用localhost作为我的网络服务器。但是,我开始想知道如果我把它实际放在互联网上,我的.php文件将如何得到保护。

我在localhost / app.php上有一个网页,其中包含一个表单,一些PHP代码和一些MySQL查询。 MySQL凭据信息位于app.php所在位置的一个目录中,但是如何防止陌生人访问app.php的内容,包括MySQL数据结构,我正在使用的命令等。当您查看源代码时在浏览器中,你只看到它的HTML部分,但是有人不能下载app.php并查看实际文件,如果他想要的话?

构建文件结构的正确方法是什么?非常感谢链接或评论! TIA!

4 个答案:

答案 0 :(得分:4)

好吧,如果您使用.php扩展名,那么Apache将提供已解析的版本 - echo和print将输出,但您的变量不会。

如果您仍然担心有几种方法可以使您的文件更安全。

  • Apache aliasing很常见 - 它让你有一个目录就像是另一个目录。在这种情况下,您将PHP目录的别名替换为域中的某个目录。如果您的文件结构为/home/user/my_files/,则您可以将my_files设为www.my-domain.com/files。该请求不会访问该脚本,但服务器上的内容可以访问该脚本。
  • 符号链接或符号链接可以完成与上述相同的操作。
  • 只需将配置文件放在其他位置并直接引用它们即可。通常不是一个好主意,因为它是硬编码文件位置,但它是一个选项。
  • CodeIgniter方法:在index.php中,配置文件中define( 'IN_APPLICATION', 1 );if( !defined( 'IN_APPLICATION' ) ) die( 'No direct script access allowed' );

答案 1 :(得分:3)

没有。如果通过HTTP请求页面,则解析php。此人必须知道您的应用程序,Apache或PHP中的漏洞,或者具有其他一些访问权限,例如FTP。

您可以将文件移出wwwroot并在其他地方引用它们。另外,请勿将包含文件命名为.inc。总是将它们命名为.php。

答案 2 :(得分:2)

尝试在localhost上下载.php文件。你会发现你得到的只是HTML代码。这是因为服务器的工作原理。这是一个带有php文件的例子

  1. 客户端(通常是Web浏览器)向服务器发送HTTP请求,即:

    GET /app.php HTTP / 1.1

  2. 服务器接收请求并处理它。在php文件的情况下,服务器应该将php文件处理成HTML。

  3. 将HTML返回给客户端。

  4. 如果您正在使用Apache,并且想要确保正在处理php文件,请确保这些规则在您的apache2.conf中:

    LoadModule php5_module modules/libphp5.so
    AddHandler php5-script .php
    AddType text/html .php
    

    而且,只是为了好玩,如果您曾经想要公开您的php源代码,请将此行添加到apache2.conf:

    AddType application/x-httpd-php-source .phps
    

    为了安全起见,请确保您的mySQL配置文件和其他您不想公开的内容存储在您正在服务的目录之外。 apache docs是理解所有这些工作原理的重要资源。

答案 3 :(得分:1)

虽然这样做没有直接问题,但是(许多应用程序都这样做,并且由于在不破坏您的站点的情况下无法看到源代码),许多应用程序使用“前控制器”解决了这个问题。前控制器在MVC结构(模型,视图控制器)应用程序中经常使用。

典型的结构是这样的:

app/ (applications, controllers and views)
lib/ (libraries, generic logic)
config/ (your configurations)
web/ (your webproot, only for css, images, javascript etc.)
web/index.php (your frontcontroller)

通过仅暴露index.php并将所有php和敏感文件放在您的webroot之外,任何来自网络的人都无法访问它们。

相关问题