Well, yes you need to continue using the filter.
First thing first, your " (Not to mention the fact that, a perfectly legitimate user input, say, for a password field, with a value of “aa&bb” will get turned into “aa&bb;” by CmsInput’s filter! It adds a semicolon for security, but that messes up the user’s password input.)" affirmation is not completely true. The filter default cleaning method can be changed in one that will not encode the input. The encoding is happening by default because 90% of the developers won’t encode the output when echo-ing, which makes room for xss exploits.
Next, in a web application is not all about sql injection (which is anyway prevented by Yii’s param binding mechanism, same mechanism that you are talking about and believe if using only this will keep you app secure) but you also need to avoid xss exploits, which is actually what this filter does(please read about xss exploits, yii will not help you avoid those unless you use html purifer which is pretty heavy and also, it is incorporated in the input extension).
As i explained in the extension description, use CmsInput::purify() to clean only the content that comes from a text editor like ckeditor or tinymce, and use CmsInput::xssClean() to clean any other content type.
The reason why you should use it like so is because it makes no sense to use CmsInput::purify() on a input field that doesn’t have HTML content, because it is too slow, instead use CmsInput::xssClean() which will make sure the content doesn’t have any malicous code and stick to CmsInput::purify() for html only content
In my applications, i use the extension like :
'input'=>array(
'class' => 'CmsInput',
'cleanPost' => true,
'cleanGet' => true,
'cleanMethod' => 'stripClean',
),
Then when i need to retrieve the attributes of a model, i only do:
$model->attributes=Yii::app()->input->post(get_class($model));
//if i have an html attribute
$originalPost=Yii::app()->input->getOriginalPost(get_class($model));
$model->htmlContent=Yii::app()->input->purify($originalPost['content']);
$model->save();
As a conclusion, stick to it, you have no reason to stop using it.
[l.e: quick test an xss exploit]:
$code='<script>alert("Really?");</script>';
echo $code;
//do the same with the CmsInput
$code=Yii::app()->input->xssClean($code);
echo $code;
Now think that $code can be added by a user via a textarea where you allow any html content and you have no way to "filter" it with yii only.