
这里分配的 $user 做模板才用到,还需要过滤吗?
return view('user/login', ['user' => $user]); 源码:
function view(string $path, array $data = []): string { $file = VIEW_PATH . $path . '.view.php'; if (!file_exists($file)) { throw new Exception("模板文件 {$file} 不存在"); } if ($data && is_array($data)) { // 请问,这里的值有必要过滤吗? foreach ($data as $key => $value) { $data[$key] = escape($value); } extract($data, EXTR_SKIP); } ob_start(); include $file; $cOntents= ob_get_contents() ?: ''; ob_end_flush(); return $contents; } 还有,别人都这样用,为啥我这样是返回空字符?
ob_start(); try { include($file); } catch (\Throwable $th) { trigger_error($th); } return ob_get_clean(); 1 alvinbone88 May 11, 2022 当然需要过滤,漏个引号没过滤就足够注入了 看看你的 include ,和别人的是一个东西吗 |
2 westoy May 11, 2022 首先 path 需要过滤, 不然可能会构造出包含漏洞 foreach 那段不需要提早过滤, sql 用参数绑定,like 之后的做二次过滤,xss 在输出的时候过滤 extract 那个我看见就害怕了........早年 gpc 漏洞之王啊, 敢手动制造 gpc 的都是猛人啊...... |