[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Фильтрация пользовательского ввода.
Страницы: 1, 2, 3, 4, 5
Hello
Arh
А еще insert в первом случае попортит все html теги, и update будет портить при каждом обновлении

_____________
VPS от 5$, первые 2 месяца - бесплатно.
Arh
Hello
Цитата
А еще insert в первом случае попортит все html теги, и update будет портить при каждом обновлении

Не попортит, а отфильтрует =)
Так ведь и задумано, что html должен быть текстом, insert и должен попортить, это его задача.
В противном случае портить будет select, только не один раз, а постоянно.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Hello
Arh
Только если ваши пользователи живут с plain text
Отфильтрует это когда из
<h1 style="color:red" onclick="alert(1)"></h1>

получаем
<h1 style="color:red"></h1>


А попортить это когда после insert получаем
& lt;h1 style=& quot;color:red& quot; onclick=& quot;alert(1)& quot;& gt;& lt;/h1& gt;

и после каждого update в нескольких местах добавляется
& amp;


_____________
VPS от 5$, первые 2 месяца - бесплатно.
twin
Цитата (Arh @ 19.11.2014 - 09:26)

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

Беда в том, что ты пользуешься не тем "рубильником". Ты подходишь к вопросу буквально и рубишь провода топором)))

А знаешь, что это ниже?

<pre class="sh_sourceCode" rel="php"><span class="sh_variable">$_POST</span><span class="sh_symbol">[</span><span class="sh_string">'cool'</span><span class="sh_symbol">] =</span> <span class="sh_string">"1 <script>alert('злыдень');</script>"</span><span class="sh_symbol">;</span>

<span class="sh_control">if</span><span class="sh_symbol">(</span><span class="sh_function">intval</span><span class="sh_symbol">(</span><span class="sh_variable">$_POST</span><span class="sh_symbol">[</span><span class="sh_string">'cool'</span><span class="sh_symbol">]))</span> <span class="sh_cbracket">{</span>
<span class="sh_function">echo</span> <span class="sh_string">'крутяк у нас число, занесем в базу'</span><span class="sh_symbol">;</span>
<span class="sh_cbracket">}</span> <span class="sh_control">else</span> <span class="sh_cbracket">{</span>
<span class="sh_function">echo</span> <span class="sh_string">'не число!'</span><span class="sh_symbol">;</span>
<span class="sh_cbracket">}</span></pre>

Глюк обратного преобразования из ответа на твой пост.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Arh
Hello
А что мешает сделать htmlspecialchars_decode перед выводом в окно редактора?
CKeditor например автоматом делает. Только что проверил. Ему параллельно в каком виде данные лежат в базе.

Тут либо делать htmlspecialchars каждый раз как показываем сообщения. Либо один раз при редактировании делать htmlspecialchars_decode.

А если надо вырезать onclick="alert(1)", то лучше один раз вырезать, чем хранить это в базе, что бы потом всё равно каждый раз вырезать.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Arh
twin
Глюк обратного преобразования из ответа на твой пост.

Ну с таким же успехом может не сработать фильтр и все onclick="alert(1)" и прочие не отфильтруются перед выводом в шаблон =)


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
twin
Какой нафиг фильтр. Ты о чем вообще? htmlspecialchars это не фильтр. Это функция замены символов HTML разметки на текстовые эквиваленты. Она применяется исключительно для выдачи результата в браузер. Ты пытаешься заткнуть пальцем задницу, дабы не обкакаться. Пальцы не для того. Да и не поможет.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Arh
Цитата (twin @ 19.11.2014 - 16:18)
Какой нафиг фильтр. Ты о чем вообще? htmlspecialchars это не фильтр. Это функция замены символов HTML разметки на текстовые эквиваленты. Она применяется исключительно для выдачи результата в браузер. Ты пытаешься заткнуть пальцем задницу, дабы не обкакаться. Пальцы не для того. Да и не поможет.

Где я написал что htmlspecialchars это фильтр?
Или ты думаешь bb коды на форуме с помощью htmlspecialchars преобразуются?
Ты написал что преобразование кода обратно в bb коды заглючило, типа вот почему не стоит это юзать.
По такой логике и преобразование bb кодов в html может заглючить, при просмотре всех сообщений.

А если использовать различные фильтры(преобразователи/пальцы для жоп, называй как угодно) для вырезания onclick и другого, непосредственно перед выводом в шаблон, так они тоже могут заглючить. Это уже не зависит от того фильтруются данные до базы или после, это зависит от разработчика.

Цитата
Ты подходишь к вопросу буквально и рубишь провода топором)))

Цитата
Она применяется исключительно для выдачи результата в браузер.Ты пытаешься заткнуть пальцем задницу


Вот это и есть "буквально". Она не предназначена для вывода результатов, она предназначена для преобразования специальных символов в HTML-сущности! До базы или после.

И я уже писал выше, что можно использовать как первую так и вторую схему в зависимости от задачи и привёл пример с комментариями, где использование того же htmlspecialchars в цикле, как раз можно считать "заткнуть пальцем задницу".

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Arh
Цитата
CKeditor например автоматом делает.

Ступил,в простом окне textarea html показывается нормально, даже decode не надо.
То есть в фильтр при сохранение придёт чистый html.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
twin
Arh
Цитата
По такой логике и преобразование bb кодов в html может заглючить, при просмотре всех сообщений.
Да ладно))) Где больше шансов заглючить, преобразовывая это
[рhp]echo 'Привет, мир!';[/рhp]

в это:
<pre class="sh_sourceCode" rel="php"><span class="sh_function">echo</span> <span class="sh_string">'Привет, мир!'</span><span class="sh_symbol">;</span></pre>

или наоборот? А если портянка на 300 строк?

Кстати, за одно подсчитай разницу объема, хранящегося в базе. Это к вопросу о <blockquote>.

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

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Arh
twin
<pre class="sh_sourceCode" rel="php"><span class="sh_function">echo</span> <span class="sh_string">'Привет, мир!'</span><span class="sh_symbol">;</span></pre>

Для подсветки кода придумали различные js библиотеки вместо такого извращения =)
Которые кстати работают после базы =)

Цитата
Кстати, за одно подсчитай разницу объема, хранящегося в базе. Это к вопросу о <blockquote>.

Разницу между [ quote ] и <blockquote> ? Ну хорошо, а если bb код был бы [ blockquote ]. Это экономия на спичках, можно вообще bb коды делать сокращенными ради экономии. [ q ] - quote. Но тогда и ограничения на размер сообщения ставить, вдруг пользователь лишнее слово напишет =)

Цитата
Они гласят - хранимая информация не должна искажаться.

Ну так она не искажается, она храниться в таком виде, в каком будет использована.
Бензин же на заправках не храниться в нефти.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Arh
twin
Цитата
Да ладно))) Где больше шансов заглючить, преобразовывая это

Именно на примере форума, да.

Но если мы говорим что используется 1 и тот же фильтр, до базы или после.
И у него есть шансы глючить. На примере вырезания js допустим.
В первом случае сохранил, понял что заглючило - пересохранил.
Во втором случае сохранил и пошел играть в русскую рулетку.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
twin
Не называй это фильтром. Мне неприятно общаться с человеком, который называет преобразование фильтрацией. Фильтр убирает или разделяет фракции. htmlspecialchars() ничего не убирает, по большому счету добавляет даже.

Фильтр, это strip_tags() к примеру.
Цитата
Ну так она не искажается, она храниться в таком виде, в каком будет использована.
Бензин же на заправках не храниться в нефти.

Ага, картошку тоже можно высушить. Анкл Бенс. Налил кипятка и не паришься. Чет в погребах я сушеной картошки не наблюдаю.

Храниться информация должна такой, какой она была изначально. А готовить к использованию нужно непосредственно перед использованием.

Я допускаю варианты, когда в базе хранится разметка. Шаблоны допустим или для извращенцев htmlpurifier какой-нибудь. Сам бы конечно не стал так делать, но всё же. Однако это не тот случай. Это сознательный выбор, админка допустим. А тут вроде бы обсуждаются пользовательские данные. Их искажать моветон.

Впрочем повторюсь. Делайте как хотите. Не говорите просто потом, что не предупреждали.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Arh
twin
Цитата
Не называй это фильтром.


Я не называю htmlspecialchars фильтром, мы htmlspecialchars в последних сообщениях вообще не обсуждаем.
С таким же успехом могу тебя обвинить в том, что ты htmlspecialchars называешь обработчиком bb кодов.

Цитата
На примере вырезания js допустим.


Я говорю про какой то абстрактный фильтр, про обработку данных в целом, про тот же strip_tags. К чему ты придираешься? А если человек назовёт бордюр поребриком или пончик пышкой, он тебе тоже станет отвратителен?


Цитата
Я допускаю варианты, когда в базе хранится разметка.

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

Но скажем в комментариях того же ютуба и других 99% сайтов, где ни свои, ни чужие комментарии нельзя редактировать по понятным причинам.
Не лучше ли в таком случае использовать "фильтр" перед базой?
Убрать от туда запрещённые теги, конструкции, я не знаю, символы может быть, матерные слова, а потом записать в базу? Смысл хранить то что пришло от пользователя, в таком виде, в котором пришло, если пользователь написал то, чего там быть не должно. А потом это каждый раз вырезать/фильтровать/обрабатывать, для каждого гостя, из года в год.

Цитата
Впрочем повторюсь. Делайте как хотите. Не говорите просто потом, что не предупреждали.

Я скорее скажу "ты был прав" или "не прав", чем как то иначе =)

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

Цитата
Ага, картошку тоже можно высушить.

А мясо лучше хранить в коровах, чем в консервах? =)
Или рыбу.
Это еще раз доказывает, что в каких то случаях исходики лучше хранить в изначальном виде, а в каких то - в обработанном.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
twin
Arh
Цитата
Я говорю про какой то абстрактный фильтр, про обработку данных в целом, про тот же strip_tags. К чему ты придираешься? А если человек назовёт бордюр поребриком или пончик пышкой, он тебе тоже станет отвратителен?

Я не придираюсь. Просто подмена базовых понятий предполагает дилетантство оппонента, а общаться с дилетантами неприятно, если они настаивают на своем. Мне по барабану, если фильтром назовут сепаратор. Но если фильтром назовут пастеризатор, можно предположить, что человек вообще не понимает происходящих процессов.

Обработка данных, это действительно абстрактное понятие, включающие в себя и фильтрацию, и валидацию, и изменение. Применительно к теме

1. Фильтрация недопустима впринципе.
2. Валидация возможна только до сохранения данных.
3. Изменение возможно только при подготовке данных для дальнейшего использования.

Почему недопустима фильтрация:
1. Это искажает данные. Почему за меня решают, как будет выглядеть мой текст после фильтрации? Почему из моего комментария неведомым образом исчезнет <twin>, если текст будет обработан strip_tags()?
2. Нельзя быть совершенно уверенным, что "отфильтровано" всё, что необходимо. По сей причине провалилась идея антиматов, по сей причине эпизодически находят дыры в разных htmlpurifier'ах и иже с ними. По сей причине в фильтрах используется разрешительная политика, а не запретительная. "Можно то, что можно, остальное нельзя". Против "нельзя это, это и это, остальное можно".

Валидация возможна только до, потому что после не имеет смысла. В данном случае валидация имеет очень ограниченный спектр применения

1. Ты можешь запретить мне использовать брички в комментариях, но это нубство, выдавать сообщение плана "Вы не можете использовать символы......". Читай про гребаную розовую розу.
2. Валидация тоже не всегда имеет должный эффект. Допустим filter_var() совершенно спокойно пропустит
sdsdsdagrethrytfgdmzgzdhrnzgbadgffsdhrytfgdmzgzdhrnzgbadgffsdsds@mail.ru
и что с неё толку?

А вот и камень преткновения - изменение данных. Тот самый htmlspecialchars().

Это тоже своего рода искажение данных, однако это сознательное искажение, если мы делаем его на выводе. Мы знаем, как на него отреагирует браузер и для того и готовим данные. Обрабатывая данные перед сохранением, мы не можем с уверенностью сказать, как они потом будут использоваться. Что ты будешь делать, если потребуется исходный текст? Вопрос с подвохом, не торопись отвечать.

Если ты сейчас скажешь, что совершенно точно знаешь, что данные никогда не потребуются в исходно виде, тогда сделаем скидку на малый опыт и прекратим дискуссию. За неимением смысла.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.