Php 网络托管安全
我有一些关于web托管的安全问题,web根。我已经用php构建了一个web应用程序,我所有的php、js和图像文件都放在public_html后面(我使用hostgator) 像这样Php 网络托管安全,php,security,web-hosting,Php,Security,Web Hosting,我有一些关于web托管的安全问题,web根。我已经用php构建了一个web应用程序,我所有的php、js和图像文件都放在public_html后面(我使用hostgator) 像这样 public_html/index.php public_html/images/foo.jpg public_html/javascript/foo.js public_html/css/foo.css public_html/upload/49845165748946.j
public_html/index.php
public_html/images/foo.jpg
public_html/javascript/foo.js
public_html/css/foo.css
public_html/upload/49845165748946.jpg (user upload images to this folder.)
我读了几篇文章,对web根安全性感到困惑,我也感到困惑
问题1。我读过一篇帖子说“在web根目录下上传文件”,web根目录下是什么
这个here/public\u html/
或者这个public\u html/here
问题2。我有几个重要的php文件,比如connect_database.php,我应该将这个文件存储在connect_database.php/public_html中,这样就没有人可以访问它了。(此文件适用于每次我的应用程序需要连接到db时都包含在内)尽管php文件仅适用于服务器
问:当我将所有文件上传到服务器并公开时,是否还有其他重要事项需要注意
我使用htaccess设置了几个重要文件夹Deny from all
(如backup db folder等)和选项-索引
问题1。我读过一篇帖子说“在web根目录下上传文件”,web根目录下是什么
这里是here/public\u html/
问题2。我有几个重要的php文件,比如connect_database.php,我应该将这个文件存储在connect_database.php/public_html中,这样就没有人可以访问它了。(此文件适用于每次我的应用程序需要连接到db时都包含在内)尽管php文件仅适用于服务器
这并不重要。您不应该能够通过http请求读取源代码。访问connect_database.php的唯一方法是访问ssh或ftp或类似的漏洞,如文件包含,如果发生这种情况,将配置存储在何处并不重要
问:当我将所有文件上传到服务器并公开时,是否还有其他重要事项需要注意
不要忘记您的htaccess文件具有正确的配置,例如禁用的文件夹列表,但除此之外,如果您小心使用脚本,不会发生太严重的问题,这就是保持它没有漏洞。首先,让我们从主目录的基本树结构开始(对于基于cPanel的基本设置): 在您的情况下,这棵树可能略有不同,但或多或少都是相同的 web根目录是HTTP服务器(Apache、Nginx、Lighttpd或其他软件)指向当前域的位置。在典型的cPanel设置中,这是
public\uhtml
目录。因此,如果您的帐户配置为使用域example.com
,则对该域的所有访问都将直接指向public\u html
。从这里开始,所有内容都将与该位置相关,因此,如果有人试图访问您的站点,例如:example.com/folder/file.php
,HTTP服务器会将他们指向public\u html/folder/file.php
另一方面,服务器端语言在HTTP服务器范围之外工作。例如,PHP作为一个单独的进程工作,由HTTP服务器的一个模块调用(在Apache中,它是mod_PHP
)。这允许在PHP和web服务器之间创建接口(以便人们可以看到PHP脚本的结果)。然而,由于PHP是一种服务器端语言,它可以访问web根目录以外的目录(public\uHTML
)
例如,如果尝试包含具有绝对文件名的文件,如下所示:
<?php
include '/foo.txt';
?>
上面的命令包括Apache配置文件(在我的系统上位于/etc/apache2
)。但是,在Hostgator服务器上,PHP会尝试从/home/user\u name\u goes\u here/etc/apache2/apache2.conf
中包含此文件。开始有意义了
web根目录之外的文件放在public\u html
目录上方,如下所示:
└── /
├── etc
├── mail
├── public_ftp
├── public_html
│ ├── css
│ ├── images
│ ├── javascript
│ └── upload
├── config.php
└── tmp
在此树中,config.php文件位于web根目录之外,无法通过HTTP访问
但是,即使您将这些文件放在public_html
文件夹中,其中的PHP代码也永远不会显示在浏览器中。因此,虽然将敏感文件放在web根目录之外似乎是一种很好的安全措施,但实际上并没有带来那么多额外的安全性
查看应用程序源代码的唯一方法是通过终端或各种文件传输协议(SSH、FTP、SFTP、telnet、cPanel..)登录到服务器
您还可以使用.htaccess
限制对某些文件的访问。可以禁止访问单个文件和文件夹,但PHP仍然可以访问它们(如前所述,它在HTTP服务器之外工作)。您还可以使用.htaccess
(例如,根据他们的IP地址,或者他们是否有特定的cookie集)将某些观众列入黑名单和白名单
禁用文件夹列表是一件好事,这基本上意味着如果目录中不存在
索引
文件,则目录内容不会通过浏览器以树的形式列出。在许多框架和CMS系统中,您会看到每个目录都包含一个空的index.html
文件。这是一种额外的安全措施,以防您不限制文件夹列表(那些框架/CMS系统背后的好人正在关注您)。检查您是否遇到此处列出的与用户文件上载有关的任何陷阱:
至少,您应该确保上传的文件不能在服务器上执行,检查它们不能作为HTML资源从其他域通过XSS进行访问,并检查用户是否有权查看上传的文件(如果用户A上传foo.jpg
,则用户B应无法访问http://www.example.com/uploads/foo.jpg
-即使重命名了文件,如果没有Authentica,也不应直接访问该文件
<?php
include include '/etc/apache2/apache2.conf';
?>
└── /
├── etc
├── mail
├── public_ftp
├── public_html
│ ├── css
│ ├── images
│ ├── javascript
│ └── upload
├── config.php
└── tmp