htmlspecialchars, в где лучше использовать? (MVC)

SkisoR

Новичок
htmlspecialchars, в где лучше использовать? (MVC)

1) перед записью в БД
2) после получения данных из БД
- - - а) сразу, после получения, т.е. в модели
- - - б) перед выводом на страницу, т.е. в отображении

??

недостатки по моему мнению:
1) неизвестная длина строки, которая будет в БД
2) ф-я будет выполняться намного чаще, чем если бы в 1-ом варианте
- - - а) придеться выполнять htmlspecialchars над всеми данными
- - - б) можно забыть сделать для какой-то переменной
 

Wicked

Новичок
б) перед выводом на страницу, т.е. в отображении
Так и только так. Что если ты захочешь юзеру показать данные, которые он только что засабмитил, без их сохранения в базу?
Так что все остальные способы - бред.

во фрэймворке Symfony есть возможность автоматом эскейпить все данные, которые приходят во View, считаю это неплохой практикой.
 

Wicked

Новичок
если хтмл в пользовательских данных _запрещен_ - перед записью в бд
Ну введенный html так и не станет html'ем при выводе. В чем проблема?
Или ты про то, что нужно валидировать/очищать входные данные, если, скажем, мы запрещаем использование < и > или тегов целиком в некоторых входщих данных? Дак тогда нужно выводить ошибку, или делать что-то типа striptags() при зачистке данных. Но, извини, никак не htmlspecialchars'ить перед сохранением в базу.
 

StUV

Rotaredom
Wicked
сорри, что-то сходу отписал как раз про стриптагс
ессно, экранирование - при выводе =)))
 

ccop

Новичок
А если в моделе сделать функцию, которая автоматом будет выходные данные выдавать через htmlspecialchars.

Ну, к примеру, у меня будет две функции:
get_user_data и get_security_user_data

М get_security_user_data будет вызывать get_user_data и экранировать все данные и уже отдавать обратно в контроллер.

Мне кажется такой способ какраз и реализует
во фрэймворке Symfony есть возможность автоматом эскейпить все данные, которые приходят во View, считаю это неплохой практикой.
если во фреймворке нет такой возможности. Я думаю, лучше все данные автоматом экранировать, чем вручную писать htmlspecialchars.
 

Wicked

Новичок
М get_security_user_data будет вызывать get_user_data и экранировать все данные и уже отдавать обратно в контроллер.
в контроллере экранированные данные нужны крайне редко. Данные должны экранироваться при передаче из контроллера во view.
 

ccop

Новичок
Так, получаеться данные нужно экранировать в контроллере при передаче в отображение?
 

itprog

Cruftsman
ccop
нет, в виде, однако не исключительно там, но предоставь виду возможность получать как обычные данные, так и экранированные (если оно автоматически делается как в symfony)
 

Angerslave

Новичок
ИМХО, в шаблоне. В смарти есть удобный модификатор |escape, так что забыть что-то заэкранировать шанс не выше, чем забыть заэкранировать всё в контроллере. Да и не всегда нужны экранированные данные не только в контроллере, а во View.
 

Духовность™

Продвинутый новичок
htmlspecialchars - юзать в шаблоне.
записывать данные в базу ВСЕГДА - "как есть".
если нужно что-то вырезать, те же теги, то strip_tags так же делать в шаблоне, т.е. на уровне view
 

WP

^_^
> get_security_user_data
Рыдаю... экранирование не имеет никакого отношения к безопасности, это лишь правильный алгоритм формирования запроса.
 

AmdY

Пью пиво
Команда форума
недавно размышлял над этим вопросом, теперь при работе с формами у меня есть методы escapeOnView() и escapeOnSave() правда есть другая проблемма в списках есть параметр для колонок - <escape>.....</escape>, а хотелось бы чтобы централизовано задвались обработки на вывод в форме, сохранение и вывод в списках.

-~{}~ 04.05.08 21:49:

по поводу ескейпа в симфонии, так и при xslt также по умолчанию данные ескейпятся, потому в смарти правильнее сделать модификатор no_escape, я уже считаю мегабайты сэкономленых символов |escape
 
Сверху