Шаблонизатор Smarty - нужно ли автоэкранирование?

Adelf

Administrator
Команда форума
Просьба не разводить здесь один из стандартнейших холиваров.
 

Фанат

oncle terrible
Команда форума
А я бы вот поразводил, как раз.
Тема дико интересная, и сильно перекликается с темой моего доклада на конфе дев.
И, кстати, я свои идеи хочу продвигать и в хатэмээл кодирование тоже %)

Наверное, mysql_real_escape_string() ты тоже ставишь ручками и только там, где «нужно».
Заметь - речь идет об авто-искейпинге. Как товарищ написал выше, ты сейчас сказал "magic_quotes_ рулит форева".
"И таких как вы, Марьванна, я и буду лечить!" Кстати, проголосовать за меня можно здесь http://devconf.ru/offers/php :)

Не везде. Только там, где нужно.
Черный список и безопасность - вещи несовместимые. Выбери что-нибудь одно.

Это настолько же "важная" вещь, как register_globals или magic_quotes_*
Жлобалсы тут вообще не при делах, а от волшебных кавычек автоискейпинг отличается одной важной деталью.
Которая, с одной стороны, плюс, а с другой - у хэтэмээл кодирования свои заморочки.

Но для начала ответь на вопрос, почему magic quotes не годятся для защиты от инъекций?
 

Фанат

oncle terrible
Команда форума
Вообще, у хатэмээл кодирования, как я его себе понимаю, есть одно важное отличие от форматирования SQL запроса. Неверно отформатировав тот или иной SQL литерал, ты получишь ошибку, но инъекция не пройдет все равно. А вот в хатэмээл кодировании я на этот счет не уверен. Кто грамотный - может просветить?
 

hell0w0rd

Продвинутый новичок
А что плохого может быть при автоэскейпинге? Когда клиент отправляет данные на сервер нельзя автоэскейпить по простой причине - это не конечный пункт их назначения. Конечный пункт - обратно к клиенту, вот тут пожалуйста.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Вообще, у хатэмээл кодирования, как я его себе понимаю, есть одно важное отличие от форматирования SQL запроса. Неверно отформатировав тот или иной SQL литерал, ты получишь ошибку, но инъекция не пройдет все равно. А вот в хатэмээл кодировании я на этот счет не уверен. Кто грамотный - может просветить?
Сломав разметку, развалив ее отсутствием экранирования, можно например, дать выполнится произвольному содержимому <script/> на уровне пользователя. В том числе и отправить его по произвольному урлу, и получить доступ к его кукам для текущего домена.
 

Фанат

oncle terrible
Команда форума
Сломав разметку, развалив ее отсутствием экранирования, можно например, дать выполнится произвольному содержимому <script/> на уровне пользователя. В том числе и отправить его по произвольному урлу, и получить доступ к его кукам для текущего домена.
при чем здесь "отсутствие экранирования"? Я говорю о неверно примененном экранировании.
То есть, мы его применили, но в определенном контексте оно оказалось бесполезным.
Если таких случаев не бывает - это прекрасно, можно автоматом экранировать.
Если бывает - беда, надо для автомата придумывать что-то хитровыдуманное, а все остальное руками указывать
 

Вурдалак

Продвинутый новичок
Как товарищ написал выше, ты сейчас сказал "magic_quotes_ рулит форева".
А вот не надо тут, magic_quotes — глобальная хрень, а данные, поступающие в шаблон по умолчанию должны как раз HTML-экранироваться. Причём заметь, тут есть принципиальное различие: автоэкранирование подразумевает автоматическое добавление htmlspecialchars при выводе в скомпилированном шаблоне:
PHP:
echo htmlspecialchars($var);
, это не
PHP:
$data = array_map('htmlspecialchars', $data);
magic_quotes это как раз аналог последнего случая. Ты что, не видишь разницы? А ещё доклад собрался делать.

Если бывает - беда, надо для автомата придумывать что-то хитровыдуманное, а все остальное руками указывать
Что-что?
 

AnrDaemon

Продвинутый новичок
Очень весело выглядит HTML-экранированный URL в ссылках...
Спасибо, но после парочки случаев такой неуё...мной автоматизации я сказал "ВСЁ ХВАТИТ!"
С тех пор мой код делает только то, что написано. Не больше, не меньше.
Чтобы после моей смерти в 40 лет от очередного инфаркта человеку, который будет разбирать мой код после меня, не пришло в голову превратить мою могилку в грубое подобие египетской пирамиды. Я как-то предпочитаю землю и цветочки, а не камешки в пять рядов.

А по поводу того дурацкого замечания про mysql_ - умные люди, дорогой мой шутничок, пользуются PDO. Советую и вам начать им пользоваться.
 

Вурдалак

Продвинутый новичок
Очень весело выглядит HTML-экранированный URL в ссылках
Смешной человек, каким же таким образом он туда попал?

А по поводу того дурацкого замечания про mysql_ - умные люди, дорогой мой шутничок, пользуются PDO. Советую и вам начать им пользоваться.
:D
 

AnrDaemon

Продвинутый новичок
Автоматически экранировался по вашему совету.
 

Вурдалак

Продвинутый новичок
AnrDaemon, покажи пример. Если писать
Код:
<a href="{$url}">{$url}</a>
, то всё как раз должно быть OK.
 

Вурдалак

Продвинутый новичок
AnrDaemon, вот видишь, а ты на автоэкранирование грешил, оно тут ни при чём, у тебя просто с головой какие-то проблемы.
 

Фанат

oncle terrible
Команда форума
умные люди, дорогой мой шутничок, пользуются PDO
Умные люди, дорогой мой умнячок, в курсе про то, что ПДО - далеко не панацея от инъекций, понимая, где его можно применять, а где - бессмысленно.

По остальным вопросам, чувак, увы, слился, и ответить не смог.
Что жаль - с тетеревами разговаривать бесполезно.
Ну да и хрен с ним.
 

Фанат

oncle terrible
Команда форума
А вот не надо тут, magic_quotes — глобальная хрень
Я, кажется, понял, о чем ты.
Хотя выражаешься ну очень коряво.

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

AnrDaemon

Продвинутый новичок
AnrDaemon, вот видишь, а ты на автоэкранирование грешил, оно тут ни при чём, у тебя просто с головой какие-то проблемы.
Я задал конкретный вопрос - что "всё" должно быть хоршо? Если "вообще всё" - так я тебе с ходу десяток примеров приведу, в которых это просто не будет работать вообще. Включая такой тривиальный, как вывод данных в UTF-8.

Умные люди, дорогой мой умнячок, в курсе про то, что ПДО - далеко не панацея от инъекций, понимая, где его можно применять, а где - бессмысленно.
В конкретном, отдельно взятом примере с mysql_real_далее по тексту - PDO prepare/execute эквивалентно заменяет головную боль с ручным экранированием данных перед выполнением запроса. Естественно, если сам запрос составлен левой ногой, никакое экранирование не поможет.
 
Сверху