Вероломство
PHP:
function getMethod() { } // РАЗ function getBody() { $body = []; if (getMethod() === ‘get’) { foreach ($_GET as $key => $value) { //$body[$key] = filter_input(INPUT_GET, $key, FILTER_SANITIZE_SPECIAL_CHARS); } } if (getMethod() === ‘post’) { foreach ($_POST as $key => $value) { //$body[$key] = filter_input(INPUT_POST, $key, FILTER_SANITIZE_SPECIAL_CHARS); } } return $body; } // ДВА function getBody2() { $body = []; foreach ($_GET as $key => $value) { } foreach ($_POST as $key => $value) { } return $body; } // ТРИ — финал function getBody3() { $body = []; foreach ($_GET + $_POST as $key => $value) { } return $body; } ?> <form action=«?a=<script></script>&b=2» method=«post»> <button name=«test» value=«<script></script>»>Send</button> </form>выхлоп
Код (Text):
array (size=1) ‘test’ => string ‘<script></script>’ (length=33) array (size=3) ‘a’ => string ‘<script></script>’ (length=33) ‘b’ => string ‘2’ (length=1) ‘test’ => string ‘<script></script>’ (length=33) array (size=3) ‘a’ => string ‘<script></script>’ (length=33) ‘b’ => string ‘2’ (length=1) ‘test’ => string ‘<script></script>’ (length=33)Я правильно рассуждаю?
Drunkenmunky
Работает?
Быстро работает?
Безопасно?
Понятно самому же через пару месяцев?Если всё — да, то правильно.
mkramer
Ты уверен, что это всегда нужно? Хотя, тут споры. Лично я предпочитаю хранить всё, как оно пришло от пользователя, а всяким экранированием заниматься при выводе
— Добавлено —
В базе оно безвредно
MouseZver
$_REQUEST
Вероломство
@MouseZver хорошая напоминалка, спс…
— Добавлено —на всякий случай, вдруг где вывод из БД забыл почистить, так теги и улетят во вьюху, а так-то я понимаю, что в БД можно грузить как есть, спс
mkramer
Ну у меня, как поклонника ларавеля, таких проблем нету — Blade сам всё чистит. Хотя, и без ларавеля это не трудно сделать
don.bidon
В базе оно вредно, так как может перестать влазить в длину строковых/текстовых полей )
ТС, преобразовывать нужно при выводе, сомневаюсь, что в ближайшее время упрётесь в нагрузку из-за преобразований.
Шаблонизатор какой-нить типа Twig используйте, там при выводе данных всякие полезные преобразователи есть.
Вероломство
смотри что ты написал:
1. Сначала ты говоришь, что в базе оно вредно, то есть предлагаешь чистить ДО записи в БД.
2. Теперь ты пишешь, что мне нужно преобразовывать ПРИ выводе, то есть получается, что писать в БД нужно как есть, что противоречит пункту 1.
miketomlin
@Вероломство, он недопонял цитируемого. Хотел сказать, что твой вариант вреден. Вредно, когда «перестает влезать», а когда просто не влезает в исходном виде, это нормально
— Добавлено —
Я, как активный пользователь/наблюдатель обоих способов, могу с уверенностью сказать, что когда пишут «преобразовывать нужно при выводе», они другой способ толком не пробовали и не понимают, про что он.
— Добавлено —
Там, кстати, тоже нет 100-процентного кодирования текстовых полей при вводе. Обычно тоже «смесь», но с уклоном в кодирование при вводе.
Вероломство
суть вопроса не в чистке, а в эволюции метода из выбирающего ТОЛЬКО POST ИЛИ ТОЛЬКО GET, в метод выбирающий $_REQUEST, я там даже html-форму привёл, чтобы было понятно, что при ПЕРВОМ варианте метода этой формой будет получен только POST, а ведь в форме action содержит GET-параметры
вот в чём суть
MouseZver
Админ: — Петь, зачем ты преобразуешь html строку перед сохранением в БД ?
Петя: — Чтобы защититься от XSS
Админ: — А когда нужно смайлы и ББ теги преобразовать, ты снова преобразуешь в html сущность ?
Петя: — Угу !
Админ: — А после снова преобразуешь, чтобы защититься от XSS ?
Петя: — … Что ты от меня хочешь ? Хватит умничать !Админ: — Петь, зачем ты преобразуешь html строку перед сохранением в БД ?
don.bidon
Не приписывайте мне того, чего я не писал )
Я писал, что обработанные данные вредны в БД (конечно, бывают исключения, но сейчас речь не о том), так как в поле из, скажем, 32 символов не войдут 32 htmlencoded-апострофа. По поводу обрезания исходных данных — если не проверять длину данных перед записью в БД, то ССЗБ.
Вероломство
вопрос вообще не про это
don.bidon
Мой первый ответ был на посты
https://php.ru/forum/threads/ehvoljucija-getbody.91434/#post-639923
https://php.ru/forum/threads/ehvoljucija-getbody.91434/#post-639926
Вероломство
так там не вопрос, там просто перекинулись мнением о фильтре, который в примере