security - yii 质量模型属性分配和 xss 安全问题

标签 security yii xss

$model->attributes = $_GET[ 'Submission' ];

这对我来说看起来真的很可怕,但这就是 yii 为模型分配属性的方式。这是 XSS 的安全风险吗?不应该先以某种方式对其进行 sanitizer 吗?我知道模型得到了验证,但是恶意输入是否足够,特别是如果保存到数据库并且忘记清理输出......

最佳答案

大规模分配不是默认的 'on' 。它只适用于通过一些 的字段。显式 验证规则。

$model->attributes = $_GET[ 'Submission' ];

相当于这段代码,
$model->attribute1 = $_GET['Submission']['attribute1'];
$model->attribute2 = $_GET['Submission']['attribute2'];
$model->attribute3 = $_GET['Submission']['attribute3'];

前者出现的任何 XSS、SQL 注入(inject)漏洞也会在以后出现;

为了防止 XSS、SQL 注入(inject),您可以使用捆绑的 CHtmlPurifier类是 HTML Purifier 的包装器过滤器库。 CHtmlPurifier 有多种使用方式,其中一种使用方式是作为模型规则中的过滤器,它将检查 XSS 字符串。

例如,如果您的模型规则功能是这样的
public function rules(){
    return array(
     array('username, password, salt, email', 'required'),
     array('username, password, salt, email', 'length', 'max'=>128),
     array('first_name,last_name,username,email','safe','on'=>'search'),
    );
 }

如果您使用带有 $model->attributes = $_GET[ 'Submission' ]; 的规则集的大规模分配
usernameemail但是将被分配 first_name , last_name不会分配给模型,因为它们只是 保险箱关于搜索场景。
你可以添加一个规则让他们搜索说创建,像这样更新
 public function rules(){
        return array(
         array('username, password, salt, email', 'required'),
         array('username, password, salt, email', 'length', 'max'=>128),
         array('first_name,last_name','safe','on'=>'create,update'),
         array('first_name,last_name,username,email','safe','on'=>'search'),
        );
     }

这将为大规模任务提供安全保障,但您仍然容易受到 XX 的攻击。为了防止 XSS,您可以使用这种类型的过滤器作为规则
public function rules(){
            return array(
             array('username, password, salt, email', 'required'),
             array('username, password, salt, email', 'length', 'max'=>128),
             array('first_name,last_name,username,email','filter'=>array($obj=new CHtmlPurifier(),'purify')),
             array('first_name,last_name,username,email','safe','on'=>'search'),
            );
         }

现在first_name , last_name , username , email在验证之前都针对 XSS、SQL 字符串进行了纯化,并且大量分配也适用于所有四个属性。

Tl;博士
  • Yii 提供了默认的安全特性,海量赋值只有在有明确的模型验证规则时才有效
  • XSS 的发生与是否使用大规模分配无关
  • 关于security - yii 质量模型属性分配和 xss 安全问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24216058/

    相关文章:

    php - Yii CUrlManager 规则 - 如何将自定义文本从模型添加到 url

    php - CDATA 在 Yii 的 JS 上自动添加?

    encoding - XSS中如何绕过客户端编码

    tomcat - 我设置了tomcat的JAVA_OPTS -Xss = 128k,然后得到了这个Spring错误

    地址栏中的 Javascript - 这是恶意的吗?

    java - System.setSecurityManager(null) 的影响

    python - 在 Python 中保持 key 安全

    azure - 有没有办法保护只能从特定 Azure 逻辑应用程序调用的 Azure 函数?

    php - Yii CRedisCache.php 将使用哪种 redis 数据类型进行缓存存储?

    javascript - Angular 5 阻止 iframe 谷歌地图