Tencent / Biny

Biny is a tiny, high-performance PHP framework for web applications
BSD 3-Clause "New" or "Revised" License
1.69k stars 259 forks source link

关于反XSS问题,display好像不生效. #71

Open coolsharkll opened 6 years ago

coolsharkll commented 6 years ago

用了display调用模板.获取的数据还是被XSS了.好像并没有html实例化

coolsharkll commented 6 years ago

不好意思,display是生效的.要按wiki里的方法写.放到第三个参数传回去就是好的. 数据库的news表的news_author数据为

如果像下面这样: $DAO = $this->newsDAO; $dataNews = $DAO->query(); $view = $this->display('main/test',array()); $view-> dataNews = $dataNews; return $view; 到模板里 var_dump($this->dataNews);//数据没XSS问题 echo $this->dataNews[0]['news_author'];//数据有XSS问题 print_r ($this->dataNews[0]['news_author']);//数据有XSS问题 不知道为什么var_dump的数据没问题.echo和print_r的都有XSS问题. 用wiki里的方法 $DAO = $this->newsDAO; $data['dataNews'] = $DAO->query(); return $this->display('main/test', array(), $data); 模板里 var_dump($dataNews); echo $dataNews[0]['news_author']; print_r($dataNews[0]['news_author']); 上面三种输出都没问题.有什么办法可以对$view-> dataNews = $dataNews;这种返回数据也进行encode处理吗?想在控制器里处理好.不想到模板上再一个一个数值encode处理.怕漏也不安全.

billge1205 commented 6 years ago

@coolsharkll 不好意思 这么久了才回答 不知道为啥没有收到邮件 $DAO = $this->newsDAO; $dataNews = $DAO->query(); return $this->display('main/test',array('dataNews'=>$dataNews)); 正常是这样使用的 在模板中 数据应该用 <?=$PRM['dataNews'][0]['new_author']?> 的方式来渲染(具有自动实体化的操作) 其中$PRM 其实是一个具有反XSS的object 使用var_dump是打印不了数组的

billge1205 commented 6 years ago

如果想要用$this->dataNews的话 可以这样用 $this->dataNews = new TXArray($data); 这样就变成了一个具有自动防注入的object了 使用方法与array是一样的