Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web服务器上的PHP文件安全_Php_Security - Fatal编程技术网

Web服务器上的PHP文件安全

Web服务器上的PHP文件安全,php,security,Php,Security,我正在慢慢学习PHP、MySQL以及一些HTML,使用localhost作为我的Web服务器。然而,我开始想知道如果我把它放在互联网上,我的.php文件将如何得到保护 我在localhost/app.php上有一个网页,其中包括一个表单、一些php代码和一些MySQL查询。MySQL凭证信息位于app.php所在目录上方的一个目录中,但如何防止陌生人访问app.php的内容,包括MySQL数据结构、我正在使用的命令等。在浏览器中查看源代码时,只能看到其中的HTML部分,但是如果有人想下载app.

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

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


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

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


您可以将文件移出wwwroot并在其他地方引用它们。此外,切勿将您的包含文件命名为
.inc
。始终将它们命名为“.php”。

虽然这样做没有直接的问题(许多应用程序都这样做,而且如果不入侵您的站点,就看不到源代码),但许多应用程序使用“frontcontroller”来解决这一问题。frontcontroller在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) 应用程序/(应用程序、控制器和视图) 库/(库,通用逻辑) 配置/(您的配置) web/(您的webproot,仅用于css、图像、javascript等) web/index.php(您的frontcontroller)
通过只公开index.php并将所有php和敏感文件放在webroot之外,web上的任何人都无法访问这些文件。

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

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

  • Apache很常见——它允许一个目录像另一个目录一样运行。在本例中,您需要将PHP目录别名为域上的某个目录。如果您的文件结构是
    /home/user/my_files/
    ,您可以将
    my_files
    别名为
    www.my-domain.com/files
    。请求无法访问脚本,但服务器上的某些东西可以访问脚本
  • 符号链接或符号链接可以实现与上述相同的功能
  • 只需将配置文件放在其他地方并直接引用它们即可。通常不是一个好主意,因为它是硬编码文件位置,但它是一个选项
  • CodeIgniter方法:在index.php中有
    define('in_APPLICATION',1)具有

尝试在本地主机上下载.php文件。你会发现你得到的只是HTML代码。这是因为服务器的工作方式。下面是一个php文件示例

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

    GET/app.php HTTP/1.1

  • 服务器接收请求并对其进行处理。对于php文件,服务器应将php文件处理为HTML

  • HTML将返回给客户端

  • 如果您正在使用Apache,并且希望确保正在处理php文件,请确保apache2.conf中包含以下规则:

    LoadModule php5_module modules/libphp5.so
    AddHandler php5-script .php
    AddType text/html .php
    
    AddType application/x-httpd-php-source .phps
    
    而且,为了好玩,如果您确实想公开php源代码,请将这一行添加到apache2.conf:

    LoadModule php5_module modules/libphp5.so
    AddHandler php5-script .php
    AddType text/html .php
    
    AddType application/x-httpd-php-source .phps
    

    为了安全起见,请确保您的mySQL配置文件和任何您不想公开的内容都存储在您提供服务的目录之外。对于理解所有这些是如何工作的,这是一个很好的资源。

    您可以将其缩短为:
    我有一个关于将文件移出wwwroot(比如我服务器上的文件夹)的问题。那么,除了让用户无法使用之外,这样做还有什么好处呢?因此,编写app.php文件来包含php中的MySQL查询之类的内容,并让用户访问www.mysite.com/app.php是完全可以接受的(也是正常的)?就您的担忧而言,是的。“可接受且正常”是一个主观条件,我个人不喜欢看到原始MySQL散布在应用程序的主页上(它不符合我个人的编码标准)。我会将查询抽象到另一个文件中的类中。