CakePHP的版本是3.4.xcakephp3-如何做xss过滤?我使用
我有十几形式更在我的CakePHP 3应用程序。我想为所有窗体实现xss过滤。在不更改所有表单函数的情况下,最简单的方法是什么?
我在一个答案中读到,为了在视图中消毒,我们应该使用CakePHP的便利函数h($ string),它将使XSS的所有尝试都完全无害。
我试过这个,但是id没有解决。
的\ src \模板\用户\ view.ctp
<p><span>Address</span>: <?= h($user->address) ?></p>
是否有数据保存到数据库之前执行跨站脚本过滤的方法吗?
我的控制器功能(这CakePHP的出炉对我来说)添加一个新用户和他的信息
的\ src \控制器\ 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 \型号\ 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;
}
谢谢!
怎么'H()'不适合你?从你的屏幕截图看来,它似乎已经编码了有害脚本标记,以便它不会运行。便利功能不会去除内容,只是确保它被正确编码,以防止用户输入注入可能有害的代码。 – drmonkeyninja
但脚本标记正在保存在数据库中。这就是我想要阻止的。 @drmonkeyninja – Annabelle
我不相信这是你可以直接用CakePHP做的事情。您可能需要查看'beforeSave'中手动剥离标签,查看接受的答案:https://stackoverflow.com/questions/7130867/remove-script-tag-from-html-content。 – drmonkeyninja