构建一个“简单”的 php url 代理

2024-05-07

我需要在我正在构建的 Web 应用程序中实现一个简单的 PHP 代理(它基于 Flash,并且目标服务提供商不允许编辑其 crossdomain.xml 文件)

任何 php 专家都可以就以下 2 个选项提供建议吗?另外,我认为(但不确定)我还需要包含一些标题信息。

感谢您的任何反馈!

option1

$url = $_GET['path'];
readfile($path);

option2

 $content .= file_get_contents($_GET['path']);

 if ($content !== false) 
 {  

      echo($content);
 } 
 else 
 {  
      // there was an error
 }

首先,永远不要包含仅基于用户输入的文件。想象一下如果有人像这样调用你的脚本会发生什么:

http://example.com/proxy.php?path=/etc/passwd http://example.com/proxy.php?path=/etc/passwd

然后进入问题:您代理的数据类型是什么?如果有任何类型,那么您需要从内容中检测内容类型,并将其传递,以便接收端知道它正在获取什么。我建议使用 HTTP_Request2 之类的东西或 Pear 中类似的东西(参见:http://pear.php.net/package/HTTP_Request2 http://pear.php.net/package/HTTP_Request2)如果可能的话。如果您有权访问它,那么您可以执行以下操作:

// First validate that the request is to an actual web address
if(!preg_match("#^https?://#", $_GET['path']) {
        header("HTTP/1.1 404 Not found");
        echo "Content not found, bad URL!";
        exit();
}

// Make the request
$req = new HTTP_Request2($_GET['path']);
$response = $req->send();
// Output the content-type header and use the content-type of the original file
header("Content-type: " . $response->getHeader("Content-type"));
// And provide the file body
echo $response->getBody();

请注意,此代码尚未经过测试,这只是为了给您一个起点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

构建一个“简单”的 php url 代理 的相关文章

随机推荐

  • 在读取之前设置未定义的 javascript 属性

    var tr tr SomeThing SomeThingElse console log tr SomeThing SomeThingElse console log tr Other undefined tr get function
  • 同一张表上的多对多

    有趣的是我从来没有遇到过这个 我从来没有想过一个人可以在一张桌子上建立 多对多 关系 直到我开始开发一种用户可以互相 加好友 的系统 社交网络 标准查找表 至少以我习惯使用的方式 在这里不合适 让我们保持简单 用户表有 id 和 name
  • android-button 背景可绘制不起作用

    这是我的 xml 可绘制代码 名称为 bts theme xml
  • Android:如何在触摸事件中手动实现长按?

    简短版本 我想要一种方法来在 onTouchEvent 上启动基于时间的计数器 并测试在响应之前是否已经过了一定的时间 作为手动 LongTouch 检测 解释 我有一个自定义 imageView 可以通过两根手指滑动滑入 滑出屏幕 我想向
  • Angular 2 测试 - 获取 DOM 元素样式

    我想在 Angular 2 应用程序中测试隐藏显示按钮的功能 测试是用 Jasmine 编写的 所以我需要检查display相关元素的属性 我怎样才能使用 Angular 获得这个属性debugElement 测试代码 let input
  • 我不应该在 Spring Boot 项目中使用“new”关键字吗?

    我正在研究 Spring Boot Rest API 最后我确实使用了new关键字在这里和那里 我想知道 当我在程序中使用 new 关键字时 我是否做错了什么 而如果在实际项目中绝对禁止使用new关键字 如果答案是肯定的 我应该注释我编写的
  • C# 中多个类的别名

    我想 正在努力 使我的代码更具可读性 我一直在使用以下类别名 using Histogram EmpiricScore
  • 加载包时 R 会话中止

    我的 RStudio 0 99 879 R 3 2 3 OSX 10 11 3 崩溃R Session Aborted每次运行都会出现错误提示require ggvis v0 4 2 我已经重新安装了 R RStudio 和 ggvis 没
  • 多个 Rails 应用程序,单个 MySQL 数据库

    我打算为 site com api site com admin site com 分别创建多个 Rails 应用程序 所有应用程序都将从一个 MySQL 数据库访问相同的表 应用程序和数据库在同一服务器上运行 对于上述访问场景 Rails
  • 如何列出当前正在验证的拉取请求中更改的所有文件(在 VSTS 中)?

    我有一个 PR 验证版本 我想列出 PR 中更改的所有文件以及状态 源在每个构建上同步 因此 在合并 PR 更改之前 源位于修订版A 通常origin master 让我将 PR 合并提交指定为B 我当前的实现调用git diff tree
  • iPhone - SSL 连接

    学习通过 iPhone 连接 ssl Web 服务的最佳起点是什么 到目前为止 我通过 SOAP 等通过 http 进行了一些基本连接 但我没有使用 https 的经验 任何好的资源 教程 起始参考 use nsurl class 都值得赞
  • UIButton突出显示区域延伸到按钮之外

    当用户触摸 UIButton 时 应启动突出显示状态 当他将手指滑到按钮之外 仍然没有抬起手指 时 按钮突出显示应该停止 并且当他抬起手指时 不应触发按钮 这种行为正是 iOS 的工作原理 但我对仍然应用突出显示的有效区域感到有点惊讶 对于
  • AngularJS 服务位于单独的文件中

    我的 app js 包含 var app angular module myApp config routeProvider function routeProvider http 服务看起来像 app service MyService
  • Python 扩展方法

    好的 在 C 中我们有这样的东西 public static string Destroy this string s return 所以基本上 当你有一个字符串时 你可以这样做 str This is my string to be de
  • Dagger 2:如何从 FragmentFactory 的子组件绑定父组件中的 Fragment Map

    我有这个 Dagger 2 配置 应用程序组件 kt Singleton Component modules AndroidSupportInjectionModule class AppModule class ActivityBindi
  • 枕头成像导入错误

    我通过 pip 将 Pillow 3 0 0 安装到 32 位 Windows 7 PC 上的 Python3 5 上 从 PIL 导入图像 给我 File C Python 3 5 lib site packages PIL Image
  • 当我打开在 Xcode 4 中创建的 Google 地图项目时,Xcode 5 会警告我的架构设置

    我刚刚更新到新发布的 Xcode 5 我正在开发一个使用 Google 地图 iOS SDK 的 iOS 应用程序 当我在 Xcode 4 中开发时 我改变了我的Architectures在我的项目设置中进行设置 按照 Google 的步骤
  • 将 Google 工作表图表导出为图像

    请您帮助了解如何使用谷歌脚本将图表导出到图像 我写了这段代码 但它不起作用 我担心 APIgetAs已弃用 function TestEmailCharts var sheet SpreadsheetApp getActiveSheet v
  • 无法将 Laravel 应用程序部署到 EC2

    我的 Laravel 项目全部在我的本地主机上运行 我将其部署到 EC2 但没有任何反应 我在开发控制台中看到的只是内部错误 500 我缺少什么 在部署到 AWS 之前我需要更改哪些内容 这是网址 http ec2 52 88 99 75
  • 构建一个“简单”的 php url 代理

    我需要在我正在构建的 Web 应用程序中实现一个简单的 PHP 代理 它基于 Flash 并且目标服务提供商不允许编辑其 crossdomain xml 文件 任何 php 专家都可以就以下 2 个选项提供建议吗 另外 我认为 但不确定 我