Объясните зачем надо safeAttributes()?

Здравствуйте,

Читал мануал по safeAttributes() и понял что надо для защиты от инъекций.

Но нифига не понял как это работает. Что этот метод делает?

Вернее что он делает понятно - как то защищает, непонятно как?

Какие атрибуты надо защищать какие нет?

Об это конечно написано в мануале что зависит от версии и все такое, но у меня вопрос такой:

Вот у нас идет инсерт в таблицу из формы ну полей 10 например от пользователя там

фамилия

имя

телефон

город

вот какие из них Safe а какие нет?.. они же все не Safe… они же все от потенциального хакера идут через форму.

Так какие надо указывать как безопасные и почему они безопасные?

Может все про стрипслешить и все?

Всем спасибо.

В данном случае все атрибуты будут безопасными. Польза этого метода проявляется при массовом присвоении атрибутов через $model->attributes = $_POST[‘Model’]. Здесь осуществляется проход по массиву $_POST[‘Model’] и идет присвоение вида $model->attrubteName = $_POST[‘Model’][‘attributeName’]. Теперь представьте, что нехороший человек вместе с обычными данными отправил еще и id. В этом случае он тоже будет присвоен модели, и данные у вас сохранятся не туда, куда надо. Очевидно, дыра, которая устраняется исключением этого поля из safeAttributes().

К SQL-инъекциям это отношения не имеет, против них есть другие встроенные средства. Большинство методов ActiveRecord, обращающихся к БД, в этом плане безопасны.

Кстати, attributes это не переменная класса, а свойство. Т.е. присвоение идет через метод сеттер.

$model->attributes = $_POST[‘Model’] равнозначно $model->setAttributes($_POST[‘Model’])

Большое спасибо, стало намного понятнее.

Есть еще какие нибудь потенциальные угрозы от которых необходимо защищать ресурс построенный на YII?

В настояшее время у меня из защиты только валидация введеннных данных и вот собираюсь сайф атрибут использовать еще дополнительно потому что использую массовые присвоения конечно же.

Возможно кто-то посоветует что еще надо закрыть и защитить хотябы от лоха , потому что профессиональный хакер конечно вскроет все что угодно

Неплохо было бы скачать и использовать Yii последней версии :) Конечно, потребуются определенные изменения в коде, но думаю, что это окупится. Насколько я знаю, метод safeAttributes() есть только в версии 1.0. В 1.1 safe атрибуты задаются прямо в rules().

Для защиты от XSS можно юзать CHtmlPurifer.

угу Спасибо, тоже сейчас подключим.