@NewTypes
На себя

Фильтрация пробела в параметре URL

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

Дело такое: http://site.com/?id=1

и такое:

http://site.com/?id= 1

В первом случае у нас id без пробела, второй напротив - с ним. Прежде чем задавать этот вопрос я прошелся по сайтам и проверил кто как поступает в данном случае.

Итак, на пробел негативно реагируют и посылают в лес:

- facebook - habrahabr

Игнорируют

- Google и его проекты - Toster, Freelansim

Для меня Google и Хабр в данном плане авторитетны (думаю администрация Хабра научена дефейсом), но как ни странно - позиции расходятся.

Быть или не быть?

  • Вопрос задан
  • 2887 просмотров
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР

К "любознательности" этот вопрос не имеет отношения. А думать, что это каким-либо образом относится к SQL - прямая дорога к инъекции.

А имеет - к валидации данных и, частично, к юзабилити и СЕО.

Пробел - символ нерелевантный, его могут тримать автоматом. Так что буду говорить о "частично валидных" урлах в целом. Учитывая, что урлы руками сейчас никто не набирает, а поисковики могут плохо относиться к существованию одной и той же страницы с разными урлами - я бы не пропускал, отдавал 404.

Ответ написан
Пригласить эксперта
Ответы на вопрос 4
DrNemo
@DrNemo

$_GET = array_filter($_GET, 'trim');
и нет пробелов по бокам во всех get переменных

Ответ написан
Комментировать
donflash
@donflash

Я против подобных пробелов, не нужны они

Ответ написан
Комментировать
bigton
@bigton
Web-программист

Какая разница есть пробел или нет?
$id = (int) $_GET['id'];
Есть пробел в URL или нет, $id все равно будет числом.

Ответ написан
Комментировать
kotomyava
@kotomyava
Системный администратор

Правильнее выдавать ошибку, если такой аргумент недопустим, или нет страницы с id=" 1", т.к. не будет дублирования страницы по разным URL. Также, если касаться вопросов безопасности а не SEO, то правильно проверять все входные парамерты по типу и допустимым значениям, и использовать prepared statments и биндинг параметров при работе с базой.

Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы