我使用的 Cakephp 版本是3.4.x
我的 cakephp 3 应用程序中有十几个表格。我想为所有表单实现 xss 过滤。在不更改所有表单功能的情况下,最简单的方法是什么。
我在一个答案中读到,为了清理视图,我们应该使用 CakePHP 便利函数 h($string) ,它将使所有 XSS 尝试完全无害。
我试过这个,但 id 没有成功。
\src\Template\Users\view.ctp
<p><span>Address</span>: <?= h($user->address) ?></p>
有没有办法在将数据保存到数据库之前实现 xss 过滤?
我的控制器功能(为我烘焙的 cakephp)用于添加新用户和他的信息
\src\Controller\UsersController.php
public function add(){
$this->viewBuilder()->setLayout('admin') ;
$user = $this->Users->newEntity();
if ($this->request->is('post')) {
$user = $this->Users->patchEntity($user, $this->request->getData());
if ($this->Users->save($user)) {
$this->Flash->success(__('The user has been saved.'));
return $this->redirect(['action' => 'index']);
}
$this->Flash->error(__('The user could not be saved. Please, try again.'));
}
$groups = $this->Users->Groups->find('list', ['limit' => 200]);
$this->set(compact('user', 'groups'));
$this->set('_serialize', ['user']);
}
\src\Model\Table\UsersTable.php
public function beforeSave(Event $event)
{
$entity = $event->getData('entity');
if ($entity->isNew()) {
$hasher = new DefaultPasswordHasher();
// Generate an API 'token'
$entity->api_key_plain = sha1(Text::uuid());
// Bcrypt the token so BasicAuthenticate can check
// it during login.
$entity->api_key = $hasher->hash($entity->api_key_plain);
}
return true;
}
谢谢!