Дело такое:
Допустим, у меня есть модель SignupForm, в ней прописаны правила, мол логин и пароль обязательны, сделать им trim, и т.д. и т.п., но вот одна помеха есть:
При вводе кода <скрипт>alert("hacked");скрипт> в одно из полей (допустим в about) - он прямо попадет в бд, и потом когда будем выводить это поле этого пользователя, то на его страничке при заходе к нему будет выскакивать этот алерт. Я решал до сих пор эту задачу очень по нубски, во всех вьюшках я прописывал Html::encode() каждому параметру (что капец прямо как рутинно). Но я более чем уверен, что можно просто еще при вводе данных в самой модели SignupForm сделать так, чтобы эти данные попадали в бд уже безопасными. Как это сделать профессионально? Прописать валидатор, возможно? Хотелось бы корректный пример, спасибо
решал до сих пор эту задачу очень по нубски, во всех вьюшках я прописывал Html::encode()
Почему же по-нубски? Лол. Официальная документация Yii гласит о том, что все данные, которые были получены от пользователя, в обязательном порядке должны быть выведены через HTML::encode(). Почему? Там об этом тоже написано.
Но я более чем уверен, что можно просто еще при вводе данных в самой модели SignupForm сделать так, чтобы эти данные попадали в бд уже безопасными.
валидатор
Так, извините, а что вам мешает парсить введённые данные и чистить от недопустимых для вас символов, непосредственно перед вставкой в БД?
Я не понимаю, если я изначально в правилах (как показано в решении) очищу текст от вредоносных символов, зачем повторно мне это рутинно во всех вьюхах прописывать? А если этот атрибут в паре десятков вью встречается, нужно находить и прописывать постоянно энкод, при том, что они в бд и так заэнкодены уже? Yii2 док не описывает причину, я только оттуда
Я, видимо, не совсем верно выразился. Использование Encode является обязательным (если вам не глубоко по боку безопасность) в том случае, если raw данные от пользователя попадают в базу и ни разу нубским не является :)
Если вы говорите, что документация по Yii2 не объясняет суть и причины использования Html::encode, то вы, наверное, не очень внимательно смотрели.
Сергей Собко: вот! Вы про сырые данные, там конечно же нужно все энкодить, а если сразу все данные обработать, перед тем как они попадут в бд, то они уже сырыми явно не будут, и поэтому я лично не вижу смысла от метода Encode.
Если данные уже безопасны, то лишний раз везде все это писать во вьюшках везде - какой смысл?
Я тоже не вижу смысла использовать Html::encode если данные уже были очищены перед записью в БД. Если только предположить, что злоумышленники каким-н магическим образом смогут записать в БД вредоносный код =)