动态包含安全

2023-12-08

有没有什么方法可以安全地包含页面而不将它们全部放入数组中?



if (preg_match('/^[a-z0-9]+/', $_GET['page'])) {

$page = $_GET['page'].".php";
$tpl = $_GET['page'].".html";
if (file_exists($page)) include($page);
if (file_exists($tpl)) include($tpl);

}
  

我应该添加什么才能使其非常安全?

我这样做是因为我不喜欢必须包含必须包含在所有页面上的内容。 “包含页眉 > 内容 > 包含页脚”方式。我也不想使用任何模板引擎/框架。

Thanks.


您当前实施的弱点是……

  1. 正则表达式只是测试字符串的开头,所以“images/../../secret”会过去,并且
  2. 未经进一步验证,“index” 也将是一个有效值并会导致递归。

为了确保您的实施安全,最好将所有要包含的内容放在自己的目录中(例如“includes” and “templates”)。基于此,你只要保证没有办法离开这个目录就可以了。

if (preg_match('/^[a-z0-9]+$/', $_GET['page'])) {
    $page = realpath('includes/'.$_GET['page'].'.php');
    $tpl = realpath('templates/'.$_GET['page'].'.html');
    if ($page && $tpl) {
        include $page;
        include $tpl;
    } else {
        // log error!
    }
} else {
    // log error!
}

Note: realpath如果文件存在,则返回给定相对路径的绝对路径并且false否则。所以file_exists没有必要。

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

动态包含安全 的相关文章

  • 如何访问带有美元符号的 PHP 对象属性?

    我有一个 PHP 对象 其属性中有一个美元 符号 如何访问该属性的内容 例子 echo object gt variable Ok echo object gt variable WithDollar Syntax error With 变
  • 动态重新定义 PHP 类函数?

    我试图弄清楚如何动态导入大量 PHP 类函数 例如 class Entity public function construct type require once type functions php person new Entity
  • CodeIgniter加入选择为

    我的数据库中有 2 个表需要加入 一张表是 artikelen 表 另一张表是 Collections 表 我目前有 this gt db gt select this gt db gt from collecties this gt db
  • php / phpDoc - @return $this 类的实例?

    如何在 phpDoc 中将方法标记为 返回当前类的实例 在下面的示例中 我的 IDE Netbeans 将看到 setSomething 始终返回foo object 但如果我扩展对象 情况就不是这样了 它会返回 this 在第二个示例中是
  • 测试 CodeIgniter 会话变量的正确方法是什么?

    获取以下代码片段 测试确保会话变量不为空的最佳方法是什么 如果稍后在我的脚本中 我调用以下内容 第一个打印正确 但在第二个我收到消息 未定义的变量 已登录 我尝试过使用 empty and isset 但两者均未成功 我还尝试使用向后执行
  • WAMP PHP 启动错误:无法加载动态库

    我的 WAMP 服务器昨天工作得非常好 今天我不得不重新启动计算机 但有些事情搞砸了 服务器从未完全启动 任务栏图标保持橙色 我的项目将打开 但仅加载 HTML 而不加载 PHP 这是我的 PHP 错误日志 04 Oct 2014 01 3
  • PHP 可以解压缩使用 .NET GZipStream 类压缩的文件吗?

    我有一个 C 应用程序 它与基于 PHP 的 SOAP Web 服务进行通信以进行更新和许可 我现在正在开发一个反馈系统 供用户通过软件自动提交错误和跟踪日志 根据我之前发布的问题 我认为 Web 服务将是实现此目的的最佳方法 最有可能以最
  • JWT(Json Web 令牌)与自定义令牌

    我仔细查看了问题 但没有找到任何可以解决我的疑问的内容 我找到了有关 JWT 的大量信息 但在比较 JWT 相对于针对 REST 服务生成自定义令牌来对身份验证请求提供的优势时 发现的信息并不多 与生成自定义生成令牌相比 使用 JWT Js
  • 通过 PEAR 安装 PHPUnit

    我安装时遇到问题PHPUnit 3 4 6 via 梨1 9 0 当我发现频道后pear phpunit de并尝试使用以下命令之一 pear 安装 phpunit PHPUnit pear 安装 alldeps phpunit PHPUn
  • 统计数据库中的注册用户数

    我想反映在我的网站上注册的人数 只有我拥有的代码不起作用 它让我知道它不可能 转换为字符串 另外 当我将其设置为在 HTML 中调用的函数时 我收到 connection 未定义的错误 require once connect php sq
  • 多维数组中的数组排列保留键 PHP

    这两天我一直在疯狂地尝试完成这个任务 也许你可以启发我 这是针对赛马投注排列的 每次用户玩游戏时 我都会得到一个多维数组 2 个级别 第一级包含比赛 ID 第二级包含用户为该比赛选择的马匹 它看起来像这样 play array 4 gt a
  • 不区分大小写的 array_unique

    我正在尝试编写几行代码来创建一个不区分大小写的数组唯一类型函数 这是我到目前为止所拥有的 foreach topics as value lvalue strtolower value uvalue strtolower value if
  • 软删除最佳实践(PHP/MySQL)

    Problem 在处理产品和订单的 Web 应用程序中 我想维护前员工 用户 与他们处理的订单之间的信息和关系 我想维护过时产品和包含这些产品的订单之间的信息和关系 然而 我希望员工能够整理管理界面 例如删除前员工 过时的产品 过时的产品组
  • 如何下载临时文件

    我正在尝试创建一个简短的 PHP 脚本 该脚本采用 JSON 字符串 将其转换为 CSV 格式 使用fputcsv 并使该 CSV 可作为下载的 csv 文件使用 我的想法是使用tmpfile 不用担心 cronjobs 或磁盘空间不足 但
  • 验证 LDAPS 连接的自签名证书

    我想从 Linux Linux 3 2 0 4 amd64 1 SMP Debian 3 2 51 1 x86 64 GNU Linux 客户端到 Windows 2012 服务器建立安全的 ldap 连接 ldaps 以更改活动中的用户密
  • 多维数组 PHP 内爆 [重复]

    这个问题在这里已经有答案了 就我的数据结构而言 我有一个 communications 数组 每个 communications id 本身包含三部分信息 id score 和 content 我想内爆这个数组以获得逗号分隔的 id 列表
  • 检查字符串是否编码为 UTF-8

    function seems utf8 str length strlen str for i 0 i lt length i c ord str i if c lt 0x80 n 0 0bbbbbbb elseif c 0xE0 0xC0
  • Symfony VS CakePHP:哪一个最接近 PHP [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我主要是一名 Rails 开发人员 但有时 我必须使用 PHP 进行编码 因为 stackoverflow com更喜欢可以回答的问题 我想知道
  • 为什么我在 Firefox 中突然遇到“阻止加载混合活动内容”问题?

    今天早上 在将我的 Firefox 浏览器升级到最新版本 从 22 到 23 后 我的后台 网站 的一些关键功能停止工作 查看Firebug日志 报告了以下错误 Blocked loading mixed active content ht
  • 无法将句子插入数据库

    我有一些句子 我必须选择由 6 个以上单词组成的句子 然后它们将被插入到数据库中

随机推荐

  • 调整页面大小后将可变宽度网格居中

    这是我想在 CSS 中执行的操作的图像 image 有任何想法吗 创刊号 将没有明确宽度的元素居中 这阻止了通常的解决方案margin 0 auto 从成为一种选择 更大的问题 没有未使用的空间用于将包装纸置于其容器的中心 如果元素的宽度由
  • 如何从 Facebook 应用程序获取顶部 URL?

    如何获取 iframe 应用程序中的顶级 URL Facebook 地址 对此有好的解决办法吗 您指的是 Facebook 域中的 URL 这是不可能的 因为同源政策
  • C 运行时静态链接与动态链接中的内存分配

    我的程序的架构涉及插件 dll 和exe 显然 我们是唯一的插件提供商 有人告诉我 如果我们静态链接 c 运行时 在插件中分配内存然后在 exe 代码中释放它是一个潜在的问题 但是 如果我们动态链接它 则只有一个堆 而 c 运行时可以访问所
  • 访问路径“d:\$RECYCLE.BIN\S-1-5-21-494745725-312220573-749543506-41600”被拒绝

    我是 C 新手 我有一个文本框 可以在其中输入要搜索的文件和一个 搜索 按钮 在搜索时钟上 我希望它填充文件夹中的文件 但出现上述错误 下面是我的代码 string directories Directory GetDirectories
  • 无需 JavaScript 即可轻松实现等高 DIV?

    到目前为止 我主要使用基于表格的布局 但由于它被认为是过去的事情 所以现在我承担了学习基于 DIV 的布局的任务 到目前为止 对我来说最烦人的挑战之一是找到一种方法来获得等高的 DIV 该 DIV 可以在所有主要浏览器上运行 不依赖于 Ja
  • 错误 C2679:二进制 '<<':找不到采用 'std::string' 类型的右侧操作数的运算符(或者没有可接受的转换)

    这是我的代码 如何修复这个错误 include stdafx h include
  • 如何检测 Highcharts 图表中点的双击或长按?

    Highcharts 提供了检测图表点点击的机会 但是有可能吗 检测其他事件 例如双击或鼠标按下事件 提前致谢 每个组件只支持某些事件 例如图表组件会检测addSeries click load redraw and selection 我
  • 索引枚举的值,而不是字符串

    是否可以使用 Solrnet 索引 Enum 的值而不是其字符串表示形式 假设我必须遵循以下枚举 Serializable Flags public enum Gender Male 0 Female 1 并将 solr 属性添加到Gend
  • 使用react-router-v4对路由进行身份验证

    我正在尝试写Authentication检查我的DashBoard 但函数本身没有被调用 谁能给我一些解决方案吗 我正在使用 ReactJs 进行开发 这是路线部分
  • 我收到错误“DELETE 语句与 REFERENCE 约束冲突”

    我尝试用外键截断表并收到消息 无法截断表 因为它被 FOREIGN KEY 约束引用 我阅读了很多有关该问题的文献 并认为我通过使用删除找到了解决方案 DELETE FROM table name DBCC CHECKIDENT table
  • 没有 Boost.Serialization 的序列化

    我正在尝试为我的代码实现一个简单的序列化 反序列化方法 以便能够使用 MPI 通过网络传递对象 在理想的世界中我会使用Boost Serialization and Boost MPI为此 但它们没有安装在我有权访问的某些集群上 因此我正在
  • 需要 Microsoft Visual C++ 10.0(无法找到 vcvarsall.bat)

    我尝试使用以下命令在 Windows 8 1 上安装 ephem 模块 pip install ephem 但我收到此错误 Microsoft Visual C 10 0 is required Unable to find vcvarsa
  • Knockout JS 映射插件混乱

    我很困惑在使用映射插件时应该何时何地声明我的 viewModel 这是我的 json 文件 members memberid 001 membername Jason memberid 002 membername Bob 这是 html
  • 如何使用 hibernate 和 Legacy 数据库修剪 char 字段 pojo 中的空格

    我的表的列为 char 5 无法将其更改为 varchar 5 因此 当我使用 hibernateTemplate 从表中获取值时 它会返回带有实际的单个字母值的添加空格 客户修复是使用 trim 方法检查 NPE 但是我们是否有提供的方法
  • SQL 迭代所有表

    我正在运行以下代码以从具有特定列的所有表中提取所有相关行 外层IF应该检查该迭代的表中是否存在该列 如果没有 它应该完成该迭代并移至下一个表 如果表中有GCRecord列 然后应该检查该表是否会返回任何记录 如果没有要返回的记录 则应结束该
  • data.table 中 cumsum 的平均版本(累积平均值)

    我有一些数据 library data table set seed 42 dat lt data table t 1 6 group rep 1 2 each 3 val runif 6 0 1 gt dat t group val 1
  • 如何在c中打印内存位

    我正在学习数字在内存中的表示方式 我想知道如何在内存中打印某些 int 和 float 变量的实际表示形式 二进制或十六进制 例如 我想看看当添加或减去这些数字导致溢出时会发生什么情况 如何访问内存并打印它 您需要将指向相关变量的指针分配给
  • Java 在文本区域右侧显示文本

    我遇到的问题ComponentOrientation RIGHT TO LEFT是 或 等字符或者 显示在左侧 我只需要从右到左绘制文本 但使用标准 西方 英语从左到右的文本字符表示法 如果不手动渲染文本 这可能吗 我无法生成您的问题 您可
  • 将 Jackson 注释添加到 swagger 生成的类

    我正在使用 swagger 来定义与我的网络服务器的合同 在 swagger 文件中 我定义了 REST 端点和请求 响应对象 我想添加注释 JsonInclude Include NON NULL 到我的招摇班级的一个领域 swagger
  • 动态包含安全

    有没有什么方法可以安全地包含页面而不将它们全部放入数组中 if preg match a z0 9 GET page page GET page php tpl GET page html if file exists page inclu