Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Nietypowa walidacja, problem z bezpieczenstwem
lukaskolista
post
Post #1





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

Ostrzeżenie: (0%)
-----


Witam. Musze do bazy danych zapisac teksty uzytkownikow z tinymce editora. Musze to jednak zrobic w czystej postaci: nie moge przepuscic tekstu przez htmlspecialchars)= i zapisac do bazy, a nastepnie przy wyswietlaniu uzyc htmlspecialchars_decode(). Musze zapisac je ze znakami specjalnymi. W tym wlasnie problem. W takim przypadku edytor tekstowy staje sie okienkiem do wpisywania polecen dla hakerow. Macie moze pomysl, jak rozwiazac ten problem? Z gory dziekuje za pomoc:)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
piotr94
post
Post #2





Grupa: Zarejestrowani
Postów: 331
Pomógł: 30
Dołączył: 11.11.2008
Skąd: Kraków

Ostrzeżenie: (0%)
-----


dlaczego nie możesz przepuścić przez te funkcje i przy wyświetlaniu dekodować?
a addslashes i stripslashes (IMG:style_emoticons/default/questionmark.gif)
i zmień tytuł tematu, bo to z tego co wiem nie jest validacja pola formularza (IMG:style_emoticons/default/biggrin.gif) tylko ochrona przed SQL injection

Ten post edytował piotr94 22.07.2010, 09:16:07
Go to the top of the page
+Quote Post
lukaskolista
post
Post #3





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

Ostrzeżenie: (0%)
-----


jakbym mogl to bym nie pisal tematu (IMG:style_emoticons/default/tongue.gif) W bazie musza byc znaki specjalne, to nie jest wyswietlane u mnie. Takie sa wymagania i nic nie moge na to poradzic.
Go to the top of the page
+Quote Post
piotr94
post
Post #4





Grupa: Zarejestrowani
Postów: 331
Pomógł: 30
Dołączył: 11.11.2008
Skąd: Kraków

Ostrzeżenie: (0%)
-----


a filtrowanie słów "kluczowych" dla zapytań SQL typu OR, AND itp. i odpowiednia zamiana ich na kody &xxx; (IMG:style_emoticons/default/questionmark.gif)
powinno zatrzymać hakerów, bo do bazy nie pójdzie wtedy na pewno nic co by mogło zmienić zapytanie
moim zdaniem i tak to ewidentny błąd osoby u której to się będzie wyświetlać, ale skoro masz takie obligacje to postaram się jakoś pomóc

Ten post edytował piotr94 22.07.2010, 09:25:35
Go to the top of the page
+Quote Post
lukaskolista
post
Post #5





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

Ostrzeżenie: (0%)
-----


Doklanie to co jest w bazie jest przetwarzane przez inny skrypt. Skrypt dziala lokalnie i dostep do niego maja tylko upowaznione osoby, wiec nie potrzebowali tak tego zabezpieczac. Nie ja projektowalem tamta aplikacje (IMG:style_emoticons/default/biggrin.gif) jest jakas funkcja filtrujaca frazy sql i php ?
Go to the top of the page
+Quote Post
piotr94
post
Post #6





Grupa: Zarejestrowani
Postów: 331
Pomógł: 30
Dołączył: 11.11.2008
Skąd: Kraków

Ostrzeżenie: (0%)
-----


fraz php nie musisz filtorwać, chyba, że gdzieś jest eval(); (IMG:style_emoticons/default/biggrin.gif)
co do fraz SQL to bym to załatwił tak:
  1. $tekst_z_tinymce=preg_replace(array('/ OR /','/ Or /','/ oR /','/ or /'),array( ' OR ',' Or ',' oR ',' or '),$tekst_z_tinymce);
i podobnie AND,... nie musisz filtrować wszystkich słów kluczowych SQL - przeanalizuj które w Twoim zapytaniu moga stwarzać niebezpieczeństwo i filtruj tylko je
//EDIT w drugim array(); powinny być znaczniki &# xxx ;, ale nie wiem czemu forum zamienia te znaczki na litery

Ten post edytował piotr94 22.07.2010, 09:40:41
Go to the top of the page
+Quote Post
lukaskolista
post
Post #7





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

Ostrzeżenie: (0%)
-----


dzieki:) sprobuje

Tak sie zastanawiam, czy nie ma innej mozliwosci. Ta jest dosc problematyczna i malo wydajna. Moze ktos zna inny sposob?
Go to the top of the page
+Quote Post
Fifi209
post
Post #8





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(piotr94 @ 22.07.2010, 09:39:02 ) *
fraz php nie musisz filtorwać, chyba, że gdzieś jest eval(); (IMG:style_emoticons/default/biggrin.gif)
co do fraz SQL to bym to załatwił tak:
  1. $tekst_z_tinymce=preg_replace(array('/ OR /','/ Or /','/ oR /','/ or /'),array( ' OR ',' Or ',' oR ',' or '),$tekst_z_tinymce);
i podobnie AND,... nie musisz filtrować wszystkich słów kluczowych SQL - przeanalizuj które w Twoim zapytaniu moga stwarzać niebezpieczeństwo i filtruj tylko je
//EDIT w drugim array(); powinny być znaczniki &# xxx ;, ale nie wiem czemu forum zamienia te znaczki na litery

Takie zabezpieczenie nie jest najlepsze, o ile pamiętam wystarczy zabawa z komentarzami.

Co do zabezpieczeń polecam videoarty Unknow'a.

Ten post edytował fifi209 27.07.2010, 10:06:46
Go to the top of the page
+Quote Post
Pilsener
post
Post #9





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Nie chcę być złośliwy, ale wystarczy zastąpić or || a and &&. A prawdziwe pole do popisu daje tu JS, ja bym sobie darował zabezpieczanie tego bo ilość fraz, które mogą spowodować szkodę jest nieograniczona a w dodatku zaraz ktoś się przyczepi, że wpisując np. "Comercial union" wycina mu union (IMG:style_emoticons/default/guitar.gif)

Robisz tak, jak klient chce, ostrzegasz go i się nie martwisz o nic, jak klient straci wystarczająca ilość czasu i kasy to w końcu zrozumie, że jego koncepcja była zła. Inaczej trudno co niektórych przekonać.
Go to the top of the page
+Quote Post
fander
post
Post #10





Grupa: Zarejestrowani
Postów: 231
Pomógł: 22
Dołączył: 6.10.2008

Ostrzeżenie: (0%)
-----


Nie wiem dlaczego podchodzicie do tego w taki sposób że chłopak sam ma tworzyć zapytania, nie lepiej zaproponować koledze przejście na programowanie obiektowe, na początek klasy modeli w połączeniu z prostym PDO. PDO posiada lepsze "zabezpieczenia" przed sql injection niż ty sam jesteś w stanie wymyślić.
Rozwiąż to w ten sposób że tworzysz sobie klasę odpowiadającej tabelce w bazie z odopowiednimi metodami i atrybutami czyli:

  1. class mojaTableka{
  2. /**
  3.  $var PDO
  4.  */
  5. public static $_connection;
  6. public static $_insertSql = 'INSERT INTO mojaTabela (kolumna1,kolumna2,...) VALUES (:kolumna1,:kolumna2,...)';
  7. .
  8. .
  9. .
  10. public $kolumna1;
  11. public $kolumna2;
  12. public $kolumna2;
  13. .
  14. .
  15. .
  16.  
  17. public static parms = array(
  18. 'kolumna1' => PDO::PARAM_STR,
  19. .
  20. .
  21. .
  22. );
  23.  
  24. public function __set($key,$val){
  25. if(isset($this->$key)){
  26. $this->$key = $value;
  27. }
  28. }
  29.  
  30. public function __get($key){
  31. if(isset($this->$key)){
  32. return $this->$key;
  33. }
  34. }
  35.  
  36. public static function insert(mojaTableka $obiekt){
  37. try{
  38. $prep = self::$_connection->prepare(self::$_insertSql);
  39. foreatch(self::$params as $key => $val){
  40. $prep->bondParam(':'.$key,$obiekt->$key,$val);
  41. }
  42. return $prep->execute();
  43. }catch(Exception $e){
  44. return false;
  45. }
  46. }
  47.  
  48. public static function update(mojaTabelka $obiekt){
  49.  
  50. }
  51.  
  52. public static function dell(mojaTableka $obiekt){
  53.  
  54. }
  55.  
  56. public static function get($where){
  57.  
  58. }
  59.  
  60. public function save(){
  61. if($this->IDENTYFIKATOR !== NULL){
  62. mojaTablela::update($this);
  63. }
  64. else{
  65. mojaTablela::insert($this);
  66. }
  67. }
  68.  
  69.  
  70. }


Pisane z ręki mogą być błędy, ale zamysł jest prawidłowy. Jeśli wybierzesz moje rozwiązanie na pewno postaram się pomóc.

Ten post edytował fander 28.07.2010, 09:08:07
Go to the top of the page
+Quote Post
cojack
post
Post #11





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


addslashes ma błąd i jest sposób na to by go obejść, dlatego się go nie stosuje.

Nic się nie przejmuj jakie dane są ładowane przez tinymce, wyłącz w nim obsługę js i on się sam ogarnie że nie może być w nim kodu js. A dane ładuj do db poprzez mysql_escape_string i tyle Cie interesuje. Albo PDO jak kolega wyżej napisał.
Go to the top of the page
+Quote Post
piotr94
post
Post #12





Grupa: Zarejestrowani
Postów: 331
Pomógł: 30
Dołączył: 11.11.2008
Skąd: Kraków

Ostrzeżenie: (0%)
-----


bardzo ciekawe te poradniki Nieznanego (IMG:style_emoticons/default/biggrin.gif)
dzięki za linka
Go to the top of the page
+Quote Post
MacDada
post
Post #13





Grupa: Zarejestrowani
Postów: 47
Pomógł: 1
Dołączył: 24.06.2010
Skąd: Sopot

Ostrzeżenie: (0%)
-----


Poczytaj do bindValue() w PDO:
http://pl.wikibooks.org/wiki/PHP/Biblioteka_PDO#Podpinanie

W ten sposób nie musisz się martwić, że ktoś Ci zrobi SQL-Injection, choć oczywiście inne ataki typu XSS są możliwe.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 22:56