gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 21:20:25 25 4
gpt4 key购买 nike

应用程序中的所有 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 的任何子目录。

如果您将用户提供的文件放在您的文档根目录中,那么您就会面临有人会直接从他们的浏览器访问它们的风险,如果 Apache/nginx/etc.搞砸了,他们上传的文件可能会作为代码执行。

所以您希望您的文件位于 C:\htdocs\www\example.com\uploaded 中,您会想要类似 C:\uploads\example.com\.

这在 secure file uploads in PHP 上的这篇文章中有深入介绍。 .

关于php - 防止在 Web 应用程序中直接 URL 访问 PHP 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52078762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com