我正在慢慢学习PHP,MySQL以及一些HTML,使用localhost作为我的网络服务器。但是,我开始想知道如果我把它实际放在互联网上,我的.php文件将如何得到保护。
我在localhost / app.php上有一个网页,其中包含一个表单,一些PHP代码和一些MySQL查询。 MySQL凭据信息位于app.php所在位置的一个目录中,但是如何防止陌生人访问app.php的内容,包括MySQL数据结构,我正在使用的命令等。当您查看源代码时在浏览器中,你只看到它的HTML部分,但是有人不能下载app.php并查看实际文件,如果他想要的话?
构建文件结构的正确方法是什么?非常感谢链接或评论! TIA!
答案 0 :(得分:4)
好吧,如果您使用.php扩展名,那么Apache将提供已解析的版本 - echo和print将输出,但您的变量不会。
如果您仍然担心有几种方法可以使您的文件更安全。
/home/user/my_files/
,则您可以将my_files
设为www.my-domain.com/files
。该请求不会访问该脚本,但服务器上的内容可以访问该脚本。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文件的例子
客户端(通常是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
而且,只是为了好玩,如果您曾经想要公开您的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之外,任何来自网络的人都无法访问它们。