我正在尝试 php mvc,但遇到了以下问题。我的请求和路由器类非常简单,我想扩展主题以处理来自子文件夹的控制器调用,并且控制器类函数应该能够拾取 url 变量发送它抛出 get 和 post。
我的路由器如下所示
class Router{
public static function route(Request $request){
$controller = $request->getController().'Controller';
$method = $request->getMethod();
$args = $request->getArgs();
$controllerFile = __SITE_PATH.'/controllers/'.$controller.'.php';
if(is_readable($controllerFile)){
require_once $controllerFile;
$controller = new $controller;
if(!empty($args)){
call_user_func_array(array($controller,$method),$args);
}else{
call_user_func(array($controller,$method));
}
return;
}
throw new Exception('404 - '.$request->getController().'--Controller not found');
}
}
和请求类
private $_controller;
private $_method;
private $_args;
public function __construct(){
$parts = explode('/',$_SERVER['REQUEST_URI']);
$this->_controller = ($c = array_shift($parts))? $c: 'index';
$this->_method = ($c = array_shift($parts))? $c: 'index';
$this->_args = (isset($parts[0])) ? $parts : array();
}
public function getController(){
return $this->_controller;
}
public function getMethod(){
return $this->_method;
}
public function getArgs(){
return $this->_args;
}
}
问题是:当我尝试通过 ajax 发送变量到控制器方法时,由于其 url 结构,该变量无法被识别。
例如
index/ajax?mod_title=shop+marks&domain=example
只要看起来就被接受
index/ajax/shop+mark/example
您的代码包含所谓的LFI漏洞 http://en.wikipedia.org/wiki/File_inclusion_vulnerability#Local_File_Inclusion并且在目前的状态下是危险的。
您应该将可用作您的内容的内容列入白名单$controller
,否则攻击者可能会尝试使用 NUL 字节指定某些内容,并可能在目录中包含不应该包含的文件,例如/etc/passwd
,配置文件,等等。
您的路由器使用起来不安全;谨防!
编辑:白名单示例
$safe = array(
'ajax',
'somecontroller',
'foo',
'bar',
);
if(!in_array($this->_controller, $safe))
{
throw new Exception(); // replace me with your own error 404 stuff
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)