Web服务器上的PHP文件安全
我正在慢慢学习PHP、MySQL以及一些HTML,使用localhost作为我的Web服务器。然而,我开始想知道如果我把它放在互联网上,我的.php文件将如何得到保护 我在localhost/app.php上有一个网页,其中包括一个表单、一些php代码和一些MySQL查询。MySQL凭证信息位于app.php所在目录上方的一个目录中,但如何防止陌生人访问app.php的内容,包括MySQL数据结构、我正在使用的命令等。在浏览器中查看源代码时,只能看到其中的HTML部分,但是如果有人想下载app.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.
构建文件结构的正确方法是什么?链接或评论非常感谢!蒂亚 否。如果通过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)如果(!defined('in_APPLICATION'))死亡('No direct script access allowed'),则配置文件中的code>具有
代码>
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散布在应用程序的主页上(它不符合我个人的编码标准)。我会将查询抽象到另一个文件中的类中。