Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: a_panov в Aug 12, 2009, 18:31



Титла: Помощ за филтрация на входящи данни
Публикувано от: a_panov в Aug 12, 2009, 18:31
Имам проблем с филтрирането на данни на една форма. По-долу кода е РНР с което правя някаква филтрация на входящите данни. Но не съм го написал много добре, сега като попадне някакъв забранен символ те изхвърля навънка. Бих искал да се заменят "неудобните" знаци с които може да се правят хакерски атаки. Искам така да се промени скрипта така че да заменя хакерските символи и скрипта да те изхвърля по-малко. Имах и проблем с 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. }


Титла: Re: Помощ за филтрация на входящи данни
Публикувано от: tyuio в Aug 12, 2009, 18:51
http://www.pe-bg.com/?cid=3&pid=22576


Титла: Re: Помощ за филтрация на входящи данни
Публикувано от: koleto в Aug 13, 2009, 11:38
А защо като има проблем с входните данни не извежда съобщение за грешка, а те хвърля в evitatrade.com?


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


Титла: Re: Помощ за филтрация на входящи данни
Публикувано от: VladSun в 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

и т.н.