1、XSS
典型的例子是在用户签名字段中输入html代码: <img url(/admin/users/delete/1 ... />
如果该数据被存储到系统中,然后拥有系统管理权限的人查看该用户信息,将导致误删除动作。
解决方法有:
使用h()来处理界面用户输入,会把html符号转义,从而使html输入无效使用htmlpurify组件来校验用户输入数据,这会有点慢使用model层面的validate规则,在你自己的app_model基类中定义检查函数public function saneHtml($check) { return current($check) === strip_tags(current($check)); }
然后在各个model中使用该函数进行数据检验
public $validate = array( 'username' => array( 'notEmpty' => array( 'rule' => 'notEmpty', 'message' => 'This field cannot be left blank.', ), 'saneHtml' => array( 'rule' => 'saneHtml', 'message' => 'Some invalid characters were detected in your input', ), ),
)
2、欺骗性链接
被伪装的html短链接(某些短链接服务)发到系统管理员IM中,而其实际链接为危险的系统操作如/admin/users/delete/1,系统管理员在不知情的情况下点击该伪冒链接将导致删除用户的操作发生。
解决方法有
在危险操作中事先检查是否有数据递交:function admin_delete($id = null) { if (!$this->RequestHandler->isPost()) { $this->render(); return; }
检查url是否正确,确保不是仿冒的钓鱼网站通过模板引擎生成删除确认 的提示信息are you sure to delete? 以避免误操作
3、sql注入
通过在url中以sql语句替换某些参数,将导致系统被注入sql
解决方法有在post中strip掉sql特殊字符,或避免使用直接的sql语句,而是用CakePHP的find函数,会自动处理sql注入的问题。