跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请问,这几句简单的代码这样写有什么问题吗?
未分類
3 4 月 2021

请问,这几句简单的代码这样写有什么问题吗?

请问,这几句简单的代码这样写有什么问题吗?

資深大佬 : wfdaj 0

public static function render($file, $data = null)     {         $file_path = dirname(__DIR__) . "/views/{$file}.php";          // 如果给定文件名不存在或不可读         if (!is_readable($file_path)) {             throw new Exception("找不到模板文件:{$file_path}。");         }          // 如果是数组就合并         if (is_array($data)) {             array_merge($data);         }          extract($data);          include $file_path;     } 

然后模板中这样使用:

$a = 1; View::render('home/index', compact('a')); 

我不清楚该如何检查是否有安全问题

大佬有話說 (9)

  • 資深大佬 : eason1874

    array_merge 那行有用?看得我有点怀疑我对 PHP 的了解了。

    extract 可以在第二个参数传入 EXTR_SKIP 不覆盖已存在的变量。

    模板变量你不该直接传入用户输入,你要先过滤好再传入,所以安全过滤也不在这里过滤。

  • 資深大佬 : shenjinpeng

    数组合并了个寂寞

  • 主 資深大佬 : wfdaj

    @eason1874 感谢回复。
    array_merge 我以为如果传入多个数组需要合并成一个呢;
    EXTR_SKIP 确实可以;
    是的,我是刚学,先实现能正常显示页面,然后学习过滤输入。再次感谢。

  • 主 資深大佬 : wfdaj

    @shenjinpeng 应该把代码放到 github 上,起名是 “php 新手常见错误用法实例”

  • 資深大佬 : faqqcn

    单个值 array_merge 的作用等同于 array_values

  • 資深大佬 : faqqcn

    @faqqcn 补充一句,“数字键的情况下”,因为 array_merge 也会重置数字键。

  • 資深大佬 : imdong

    @faqqcn 这个还真注意过,看了下文档“数字索引”确实会重新排。

    不过,需要 extract 的大概率是关联数组了,所以真的就 array_merge 了个寂寞。

    而且就算索引合并了,由于调用不是引用的,而返回值没有接收。

    寂寞时的爱,到底爱的该不该。

  • 資深大佬 : imdong

    另外补充回答主的问题:

    第一个漏洞:如果构造出 $file = “../../upload/image”

    并且恰巧这个目录是上传目录,就有可能会出现 include 用户上传的文件,而导致上传后门被利用。

    然后 extract 这个的话,应该问题不大,简单来说就是这么搞。

  • 資深大佬 : faqqcn

    @imdong 这个可以用 realpath 处理后再过滤

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具