Перейти к содержимому

Реферальная программа Мегаплана

Партнерская программа Kredov

Обработка входящих данных

#1 Евгений

Евгений
  • Пользователь
  • 481 сообщений
  • Репутация: 0
0

Отправлено 10 Июль 2009 - 12:25

В этой теме я бы хотел обсудить проверку (обработку) входящих данных, как на ваш взгляд будет надежднее?

лично я обычно использую вот такие конструкции.

ЕСЛИ ДАННЫЕ ЧИСЛОВЫЕ:
$id = (int)$_GET['id'];

или
if(!preg_match("/[0-9]/",$id)) {
echo "Не корректный запрос";
exit();
}


ЕСЛИ ДАННЫЕ СТРОКОВЫЕ:
$page = $_GET['page'];
$page = htmlspecialchars($page);
$page = str_replace("update","",$page);

или
if(!preg_match("/[A-Za-z0-9]/",$page)) {
echo "Не корректный запрос";
exit();
}

 

 

  • 0

#2 v1ex

v1ex
  • Пользователь
  • 225 сообщений
  • Репутация: 0

Отправлено 10 Июль 2009 - 12:33

Конечно-же регулярки безопасней. В случае:
$id = (int)$_GET['id'];

Что если в $_GET['id'] будет значение "ха-ха"? :)

$page = str_replace("update","",$page);

А это, что вы делаете, я не понял?


И еще у вас не правильные регулярки:
/^[0-9]+$/
/^[a-z0-9]+$/i
^ - значит начало слова;
$ - конец;
i - игнорировать регистр

А в вашем случае, если просто, что-нибудь, где-нибудь встречается удолетворяющее выражению, будет возвращено true.
  • 0

#3 Евгений

Евгений
    Topic Starter
  • Пользователь
  • 481 сообщений
  • Репутация: 0

Отправлено 10 Июль 2009 - 12:45

Что если в $_GET['id'] будет значение "ха-ха"?

ничего не будет, id=0, только что проверил.

$page = str_replace("update","",$page);
А это, что вы делаете, я не понял?

вырезает слово "update" :) эту проверку я на днях вырезал из какого то движка и не сильно разбирался в чем суть...

^ - значит начало слова;
$ - конец;
i - игнорировать регистр

а вот за небольшую лекцию по регуляркам спасибо ;) не сильно я в них разбираюсь...
  • 0

#4 v1ex

v1ex
  • Пользователь
  • 225 сообщений
  • Репутация: 0

Отправлено 10 Июль 2009 - 12:48

вырезает слово "update" smile.gif эту проверку я на днях вырезал из какого то движка и не сильно разбирался в чем суть...

Ну я понял, что вырезает )) Я просто не понял зачем :) Видимо какая-то "защита" от SQL инъекций ;)
  • 0

#5 FordogeN

FordogeN
  • Пользователь
  • 1 414 сообщений
  • Репутация: 0

Отправлено 10 Июль 2009 - 13:46

я тоже так понял, но я думаю тогда еще нужно чтоб вырезало DELETE


  • 0

Как настроить выдержку и диафрагму зеркального фотоаппарата



#6 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 11 Июль 2009 - 22:31

Евгений,
Не наглядно
$id = (int)$_GET['id'];

Я бы писал так:
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;

или просто так, если уверен что переменная существует
$id = intval($_GET['id']);

Зачем использовать приведение типов, если существует стандартная функция.

$page = isset($_GET['page']) ? mysql_escape_string($_GET['page']) : "";

или
$page = isset($_GET['page']) ? addslashes($_GET['page']) : "";

Вот и вся защита от SQL-инъекций. Сами подумайте, если вы уже проэкранировали спецсимволы, то строка уже обязательно будет строкой, никакие5 конструкции не выполнятся... Мы экранировали уже все ковычки.
  • 0

#7 WebKiD

WebKiD
  • Пользователь
  • 27 сообщений
  • Репутация: 0

Отправлено 14 Июль 2009 - 01:01

Спасибо, буду разбираться. Действительно очень нужная тема.
  • 0

#8 Troy

Troy
  • Пользователь
  • 18 сообщений
  • Репутация: 0

Отправлено 23 Июль 2009 - 18:16

Ещё про mysql_escape_string() и mysql_real_escape_string() надо не забывать
  • 0

#9 phpuser

phpuser
  • Пользователь
  • 520 сообщений
  • Репутация: 8

Отправлено 23 Июль 2009 - 20:12

А нельзя описать что это? Для чего использовать? Ну и пару примеров в добавок.
Если не сложно.


  • 0
Вникаю в тему создания сайтов...


#10 Troy

Troy
  • Пользователь
  • 18 сообщений
  • Репутация: 0

Отправлено 24 Июль 2009 - 07:56

1 функция экранирует все символы которые используются в mysql а 2 делает тоже самое только с учётом кодировки
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru