Проверка данных из формы

seosniks
На сайте с 13.08.2007
Offline
389
617

Добрый день, подскажите годится ли такая проверка от ввода посторонних смимволов?

И безопасна ли она? И есть ли вариант лучше и проще,

Спасибо.

<button title="Главная страница" onclick="location.href = '?id=0'">Главная</button>
<button title="Обновить монеты " onclick="location.href = '?id=1'">1)UPD CM</button>
<button title="Обработать монеты " onclick="location.href = '?id=2'">2)OBR CM</button>

 #Проверка  данных  GET.
if (isset($_GET["id"])) {
$id_block=$_GET["id"];
$form_validate =array("0"=>"0","1"=>"1","2"=>"2","3"=>"3","4"=>"4","5"=>"5","6"=>"6");
if($form_validate[$id_block] !== $id_block)
{ exit('Ошибка ); }
M
На сайте с 04.12.2013
Offline
223
#1

Зависит от возможных значений. Вот, например, маска для проверки нат. чисел из 10 цифр:

[1-9]\\d{0,9}

Но у вас есть id=0. Нулевой id для БД является особенным. Его использование нужно специально оговаривать, хотя я тоже часто использую для главной подобный идентификатор. Также можете пробовать делать выборку из БД по любому значению, а потом сравнивать исходное и выбранное значения идентификатора (если что-то будет выбрано).

Домены и скрипт для коротких ссылок: https://u75.ru/domains-for-shortcuts
AT
На сайте с 17.02.2014
Offline
43
AAT
#2

seosniks, а почему не делаете валидацию на стороне клиента?

Адаптивная верстка сайтов (http://verstkar.ru/)
webiumpro
На сайте с 20.03.2017
Offline
39
#3
AAT:
seosniks, а почему не делаете валидацию на стороне клиента?

Валидация на клиенте для красоты и удобства, ничего общего с безопасностью не имеющая. Ибо доступ к такой валидации будет у всех, и при наличии прямых рук ее очень легко поломать. А тех, кто делает валидацию только на клиенте, надо бить по рукам. Вопрос у ТСа был как раз в безопасности

Копирование лендингов. Разработка на фреймворке сервисов. Создание сайтов (/ru/forum/994418)
AT
На сайте с 17.02.2014
Offline
43
AAT
#4

webiumpro, я не спорю. Просто задачи разные бывают

webiumpro
На сайте с 20.03.2017
Offline
39
#5
seosniks:
$form_validate =array("0"=>"0","1"=>"1","2"=>"2","3"=>"3","4"=>"4","5"=>"5","6"=>"6");

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


if(!in_array($id_block, $form_validate, true))
{ exit('Ошибка ); }

А где у вас вообще айдишники хранятся? Если в базе, то конечно проще через preg_replace('/[^\d]+/', '', $_GET["id"]); оставлять только цифры в параметре, чтобы исключить инъекцию, а потом делать запрос и проверять на существование айдишника в базе, чем дергать все айдишники, а потом искать в массиве.

SS
На сайте с 15.12.2015
Offline
83
#6

Я бы сделал проверку на число и дальше проверял через базу.

PS Здесь вроде ошибки возможны:

if($form_validate[$id_block] !== $id_block)

http://php.net/manual/ru/language.types.array.php

Замечание:
Попытка доступа к неопределенному ключу в массиве - это то же самое, что и попытка доступа к любой другой неопределенной переменной: будет сгенерирована ошибка уровня E_NOTICE, и результат будет NULL.
Размещение естественных ссылок на тематических порталах, отзовиках, справочниках (/ru/forum/1013919)
D.iK.iJ
На сайте с 26.05.2013
Offline
225
#7

По идее, можно проверять сразу - число это или нет - через is_numeric.


if (isset($_GET["id"]) and is_numeric($_GET["id"]) and $_GET["id"] >= "0" and $_GET["id"] <= "6") {

} else {
exit('Ошибка );
}
Адаптивный дизайн в 2 строчки ( https://dikij.com/wm/adaptaciya-saytov.php ). + Принимаю заказы любой сложности ( https://searchengines.guru/ru/forum/926323 ). 💎 Еще я делаю классные кулоны с опалами ( https://mosaicopal.ru/ ).

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий