Ben*_*Ben 3 php security web-hosting
我有一些关于网络托管,网络根目录的安全问题.我在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.jpg (user upload images to this folder.)
Run Code Online (Sandbox Code Playgroud)
我阅读了一些帖子,并对网络根安全性感到困惑,我感到困惑
Q1.我看过一篇帖子说"在web root下面上传文件",web根目录下面是什么?
这一个here/public_html/或这一个public_html/here
Q2.我有几个php文件很重要,比如connect_database.php,我应该将这个文件存储在connect_datatbase.php/public_html中,这样就没有人可以访问它了.(这个文件适用于每次我的应用程序需要连接到db时)虽然php文件仅用于服务器
问:当我将所有文件上传到服务器并上市时,我还需要注意其他任何重要事项吗?
我用htaccess设置了几个重要的文件夹Deny from all(比如备份db文件夹等)和Options -Indexes
首先,让我们从主目录的基本树结构开始(对于基于cPanel的基本设置):
??? /
??? etc
??? mail
??? public_ftp
??? public_html
? ??? css
? ??? images
? ??? javascript
? ??? upload
??? tmp
Run Code Online (Sandbox Code Playgroud)
在您的情况下,此树可能略有不同,但或多或少,它将是相同的.
您的Web根目录是您的HTTP服务器(无论是Apache,Nginx,Lighttpd或其他软件)指向您当前域的位置.在典型的cPanel设置中,这是public_html目录.因此,如果您的帐户配置为使用域example.com,则对该域的所有访问都将直接指向public_html.从那里,一切都将相对于该位置,所以如果有人试图像这样访问您的网站:example.com/folder/file.php,HTTP服务器将指向他们public_html/folder/file.php.
另一方面,服务器端语言在HTTP服务器范围之外工作.例如,PHP作为一个单独的进程工作,由HTTP服务器的模块调用(在Apache的情况下,它是mod_php).这允许在PHP和Web服务器之间创建一个接口(以便人们可以看到PHP脚本的结果).但是,由于PHP是服务器端语言,因此它可以访问Web根目录(public_html)之外的目录.
例如,如果您尝试包含具有绝对文件名的文件,如下所示:
<?php
include '/foo.txt';
?>
Run Code Online (Sandbox Code Playgroud)
第一个斜杠告诉PHP解释器您正在提供绝对路径.如果省略斜杠,PHP会认为路径是相对于当前文档(或使用PHP set_include_path函数设置的包含路径).PHP实际上会尝试从根目录中获取该文件.使用Hostgator,您的根目录将是您的主目录,或您通过FTP登录时看到的目录.您在此目录中被监禁为Hostgator的安全措施.您的实际主目录可能是这样的/home/user_name_goes_here,并且您的public_html文件夹位于/home/user_name_goes_here/public_html.但是你不能走出你的主目录,因为这会带来安全风险,所以你只能在你的家庭目录,因此成为你的根目录.
但是,在我的本地系统上,我有root访问权限(root = super admin)我的根目录是文件系统根目录(相当于C:\在Windows上,假设你在分区上安装了Windows C).考虑到这一点,您可以包含任何文件,例如:
<?php
include include '/etc/apache2/apache2.conf';
?>
Run Code Online (Sandbox Code Playgroud)
上面的命令包括Apache配置文件(我的系统位于其中/etc/apache2).但是,在Hostgator服务器上,PHP会尝试包含此文件/home/user_name_goes_here/etc/apache2/apache2.conf.开始有意义吗?
Web根目录之外的文件放在public_html目录上方,如下所示:
??? /
??? etc
??? mail
??? public_ftp
??? public_html
? ??? css
? ??? images
? ??? javascript
? ??? upload
??? config.php
??? tmp
Run Code Online (Sandbox Code Playgroud)
在此树中,文件config.php位于Web根目录之外,无法通过HTTP访问.
但是,即使将这些文件放在public_html文件夹中,其中的PHP代码也永远不会显示在浏览器中.因此,虽然将敏感文件放在Web根目录之外可能看起来是一个很好的安全措施,但它并没有真正带来那么多额外的安全性.
有人查看应用程序源代码的唯一方法是通过终端或文件传输协议(SSH,FTP,SFTP,telnet,cPanel ..)登录服务器.
您还可以使用限制访问某些文件.htaccess.可以禁止访问单个文件和文件夹,但PHP仍然可以访问它们(如前所述,它在HTTP服务器之外工作).您还可以使用.htaccess(例如,根据其IP地址或是否具有特定的cookie集)将某些查看者列入黑名单并将其列入白名单.
禁用的一件好事是文件夹列表,这基本上意味着如果index目录中没有文件,目录内容将不会通过浏览器列为树.在许多框架和CMS系统中,您将看到每个目录都包含一个空index.html文件.如果您不限制文件夹列表(这些框架/ CMS系统背后的好人正在关注您),这是作为额外的安全措施完成的.