Revision #3                                    has been created by  Steve Friedl                                    on Apr 1, 2011, 2:17:49 AM with the memo:
 Steve Friedl                                    on Apr 1, 2011, 2:17:49 AM with the memo:
                                
                                
                                    Minor formatting fixes                                
                                                                    « previous (#2)                                                                                                    next (#4) »                                                            
                            Changes
                            
    Title
    unchanged
    Understanding "Safe" Validation Rules
    Category
    unchanged
    FAQs
    Yii version
    unchanged
    
    Tags
    unchanged
    Forms, Validation, Safe, Massive Assignment
    Content
    changed
    [...]
1. Some models have attributes that are legitimate (in general), but not in a specific form. For instance, a change-your-password form for a user should accept the `password` and `passwordRepeat` attributes, but not the `isAdmin` attribute that makes him an administrator of the application. For a changePassword scenario, isAdmin should be marked expilicity `'unsafe'`.
2. All model objects based on [CActiveRecord] have internal housekeeping attributes that are subject to shenanigans if the bad guy were able to make assignments to them. Some of these include:
* `$model->isnewrecord
`
* 
`$model->dbcriteria
`
* 
`$model->primarykey
`
* 
`$model->tablealias
`
* 
`$model->scenario
`
and perhaps others. It's rather scary to think what could happen if the bad guy were able to manipulate these with malicious input, but because they are not mentioned in any validation rule - `'safe'` or otherwise - they are protected.
Yii takes the conservative approach that attributes are assumed to be unsafe unless the developer explicitly makes them so (a "default deny" paradigm), rather than the easier but more dangerous "default allow".[...]