Защита $_GET - как?

REDGROUP

Новичок
Всем привет! Подскажите пожалуйста, каким образом можно защищать $_GET['id']?
PHP:
$id = htmlspecialchars(strip_tags(intval((int)$_GET['id'])));
if (isset($id) && is_numeric($id)) {
Что можете сказать про такой код? Имеет ли он вообще смысл?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Что ты собрался защищать и от кого?

Если ты хочешь валидировать данные относительно их ожидаемого приложением формата - это уже другое дело и к "защите" отношения не имеет.

PS: strip_tags после intval? Ты хоть думай, что твой код делает.
 

AnrDaemon

Продвинутый новичок
И intval() после (int). Кто-то тупо скопировал код из интернета и забыл приложить к нему голову?
 

Squats

Новичок
Предпочтительнее будет все-же filter_input.
О нем позже!

Смотри, подумай, что ты сделал.
Логически.

Сначала у тебя было $_GET['id'], после ты сделал приведение к типу (int)👌, после, ты обращаешься к функции intval - которая преобразовывает из строкового в целочисленное, затем ты берешь функцию для работы со строками strip_tags - которая вырезает теги html и php из строки, и в итоге htmlspecialchars которая смотрит сущности, которых нет.
А даже если бы и были, то функция strip_tags которая не знает об этом, пропустила бы, а вот функция htmlspecialchars - в это время сделает нам теги, которые хотела удалить функция strip_tags
Это к примеру!

Достаточно было:

PHP:
if($id = (int) $_GET['id']) {
    var_dump($id);
}
А вообще, лучше использовать:
PHP:
if($id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT)) {
    var_dump($id);
}
Используйте нужный фильтр для вашей задачи, почитайте Типы фильтров

Кстати да, isset как-раз нужен будет не на переменной, а на самом $_GET['id']
PHP:
if(isset($_GET['id']) && $id = (int) $_GET['id']) {
    var_dump($id);
}
Чтобы не было Notices.
 
Последнее редактирование:

REDGROUP

Новичок
Всем спасибо, вы абсолютно правы.
Буду изучать, тут стоило лишь подумать, а не тупо обрамлять в различные функции.
Извиняюсь за глупый вопрос, всем ещё раз спасибо!
 

Фанат

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