繁体   English   中英

防止在Web应用程序中直接访问PHP文件

[英]Prevent direct URL Access of PHP files in the Web Application

应用程序中的所有php文件都可以通过URL直接访问。 在我的php文件的开头添加此代码适用于使用POST方法请求的少数代码:

if ( $_SERVER['REQUEST_METHOD']=='GET' && realpath(__FILE__) == realpath( $_SERVER['SCRIPT_FILENAME'] ) ) {

    die(header( 'location:/webapp/postings' ));
}

但是,我确实有一些通过GET方法请求的php文件,上面的代码对它们不起作用,因为我带有以下代码:

if(!isset($_SERVER['HTTP_REFERER'])){
die(header('location:/webapp/postings'));    
}

我知道HTTP_REFERER不值得信任。 还有其他选择吗?

有人可以告诉我一种防止直接URL访问的通用方法,而不会改变所有php文件中的代码。

注意:我的应用程序正在IIS 7.5 Web服务器上运行。

不要这样做:

public_html/
   includes/
       dont_access_me_bro.php
       ...
   index.php
   ...

改为:

includes/
   dont_access_me_bro.php
   ...
public_html/
   index.php
   ...

说明

将源文件保留在文档根目录之外可以保证用户无法通过更改HTTP请求中的URI来直接访问它们。 不会防止LFI攻击。

要找出文档根目录的位置,这个方便的PHP脚本可以帮助:

var_dump($_SERVER['DOCUMENT_ROOT']);

如果打印出string (25) "C:\\htdocs\\www\\example.com" ,则不希望将文件存储在C:\\htdocs\\www\\example.comC:\\htdocs\\www\\example.com任何子目录中C:\\htdocs\\www\\example.com

如果您将用户提供的文件放在文档根目录中,则会产生直接从浏览器访问它们的风险,以及Apache / nginx /等。 搞砸了,他们上传的文件可以作为代码执行。

所以你希望你的文件在C:\\htdocs\\www\\example.com\\uploaded ,你会想要像C:\\uploads\\example.com\\

本文将详细介绍PHP中的安全文件上载

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM