Автор Тема: Помощ за филтрация на входящи данни  (Прочетена 1377 пъти)

a_panov

  • Напреднали
  • *****
  • Публикации: 62
    • Профил
Имам проблем с филтрирането на данни на една форма. По-долу кода е РНР с което правя някаква филтрация на входящите данни. Но не съм го написал много добре, сега като попадне някакъв забранен символ те изхвърля навънка. Бих искал да се заменят "неудобните" знаци с които може да се правят хакерски атаки. Искам така да се промени скрипта така че да заменя хакерските символи и скрипта да те изхвърля по-малко. Имах и проблем с UTF-8, но съм ги решил.

Помогнете ми да направя по-добра филтрация.
Код
GeSHi (PHP):
  1. function utf8_substr($str,$from,$len)
  2. {
  3.      if (mb_strlen($str) > $len)
  4.      {
  5.            return mb_substr($str,$from,$len,'utf-8');
  6.      }
  7.      else
  8.      {
  9.            return $str;
  10.      }
  11. }
  12.  
  13. if (!isset($_POST['des']))
  14. {
  15.      header ("Location: http://www.evitatrade.com/");
  16.      exit;
  17. }
  18.  
  19. $des = trim($_POST['des']);
  20. $des = str_replace("\t", " ", $des);
  21. $des = str_replace("\n", " ", $des);
  22. $des = str_replace("\r", " ", $des);
  23.  
  24. if (empty($des))
  25. {
  26.      header ("Location: http://www.evitatrade.com/");
  27.      exit;
  28. }
  29.  
  30. $des = utf8_substr($des, 0, 1200);
  31. if (!preg_match("#^[\s\-_,’.!?)(0-9A-Za-zА-Яа-я]+$#u", $des)) // !preg_match( "#^[- _0-9a-zа-я]+$#i",    !ereg("^[- _,.!0-9A-Za-zА-Яа-я]+$",
  32. {
  33.      header ("Location: http://www.evitatrade.com/");
  34.      exit;
  35. }
« Последна редакция: Aug 14, 2009, 16:08 от VladSun »
Активен

tyuio

  • Гост
Активен

koleto

  • Напреднали
  • *****
  • Публикации: 52
  • Distribution: Ubuntu
  • Window Manager: Gnome
    • Профил
    • WWW
Re: Помощ за филтрация на входящи данни
« Отговор #2 -: Aug 13, 2009, 11:38 »
А защо като има проблем с входните данни не извежда съобщение за грешка, а те хвърля в evitatrade.com?
Активен

Поражение не съществува, докато човек не се признае за победен!

sdr

  • Напреднали
  • *****
  • Публикации: 655
    • Профил
Re: Помощ за филтрация на входящи данни
« Отговор #3 -: Aug 13, 2009, 14:23 »
Общо взето се опитваш да решиш проблема от грешния край. "филтрирането" което правиш е напълно излишно. Върпса е към SQL сървъра ти да не минават директно данни преди това винаги (int)$int_val, (float)$float_val ,'"'.addslashes($strdate_val).'"'  или там както е правилно да обработиш стринговете за да са гарантирано ок към сървъра, а наопаки всичкото стринг минава през htmlspecialchasrs () и не се занимаваш с глупости :)
Активен

VladSun

  • Moderator
  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: Помощ за филтрация на входящи данни
« Отговор #4 -: Aug 14, 2009, 16:23 »
Съгласен съм със sdr с едно изключение - не ползвай add_slashes за "обезопасяване" на данни подавани към SQL сървер. Ползвай съответната функция за съответния SQL сървер:

http://us.php.net/manual/en/function.mysql-real-escape-string.php
http://us2.php.net/manual/en/function.pg-escape-string.php

и т.н.
« Последна редакция: Aug 14, 2009, 16:38 от VladSun »
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P