J4N*_*J4N 2 php security xss cakephp
我喜欢cakePhp的一个原因是,我们可以轻松地生成一个生成的编辑表单,以便我们保存.
例如在控制器中:
function add() {
if (!empty($this->data)) {
$this->Post->create();
if ($this->Post->save($this->data)) {
$this->Session->setFlash(__('The post has been saved', true));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The post could not be saved. Please, try again.', true));
}
}
$users = $this->Post->User->find('list');
$this->set(compact('users'));
}
Run Code Online (Sandbox Code Playgroud)
问题是我们的字段容易受到XSS(跨站点脚本)的攻击.我知道"Sanitize :: Clean"方式,但我有一个问题:这意味着我们必须在保存对象之前在所有字段上执行此操作.如果我们添加一个字段怎么办?我们应该继续我们所有的代码来检查我们是否对它进行消毒?有没有办法说"在保存它之前清理这个对象",而没有指定任何字段?
谢谢!
正如andreas正确指出的那样,通常接受最佳实践来存储原始HTML并且仅对输出进行清理(通过存储原始输入,它可以帮助跟踪谁发布了恶意内容等).
要在视图中进行清理,您应该使用CakePHP便捷函数h($string),它是htmlspecialchars的捷径,它将使对XSS的所有尝试完全无害.
编辑 - 这不会在物理上删除 XSS代码,而只是以一种不会损害您的应用程序的方式呈现它.
echo h('<script>alert("xss");</script>');
会产生 <script>alert('xss');</script>