Yii的AR是否带安全过滤 防SQL注入 XSS攻击的说明

{app.params.name}} {app.params.name}} {app.params.name}}

关于这个说明,我引用了www.yiiframework.com里面的qiang哥的

我提到了两个问题:一是SQL Injection攻击,一个是XSS攻击。


对于前者,需要避免的是直接把用户输入嵌入到SQL里,例如:"SELECT * FROM tbl_user WHERE id={$_GET['id']}"。
恶意用户可以让$_GET['id']等于"1; DELETE FROM tbl_user",这样就把所有的用户数据都删除了!非常危险!

解决办法有好几种。最简单的就是用param binding,请阅读PHP PDO获得相关知识。如果知道id是整数,也可以先把输入强制为整数。或者如果id是字串,可以用CDbConnection::quoteValue()把输入加上引号。如果你用的是AR,那么save()函数自动会使用param binding。如果你用findAll()之类的函数,自己生成condition部分,那就要特别小心不要直接嵌入输入。

XSS攻击主要是要避免直接显示用户的输入数据。例如echo $user->description(假设description的数据来自用户的输入)。恶意用户可以让id为一段js代码,使得其它用户查看该页面后隐式执行该代码,从而被恶意用户获得登录cookie等安全信息。

解决办法很简单,就是用CHtml::encode()。如果输入是HTML,可以用CHtmlPurifier::purify()来过滤有害代码。

参考文章:http://www.yiiframework.com/forum/index.php?/topic/14018-yii%E7%9A%84ar%E5%B8%A6%E5%AE%89%E5%85%A8%E8%BF%87%E6%BB%A4%E4%B8%8D%EF%BC%9F%E6%88%91%E7%9B%B4%E6%8E%A5%E6%8A%8Aget%E5%8F%98%E9%87%8F%E7%BB%99ar%E5%BD%93%E6%9D%A1%E4%BB%B6%E5%AE%89%E5%85%A8%E4%B8%8D%EF%BC%9F/page__p__69035__fromsearch__1#entry69035


版权声明

davidzhang 创作并维护的 Gowhich 博客采用 创作共用保留署名-非商业-禁止演绎4.0国际许可证。

本文首发于 Gowhich 博客( https://www.gowhich.com ),版权所有,侵权必究。

本文永久链接: https://www.gowhich.com/blog/251

comments powered by Disqus