Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php/sql] Zabezpieczenia skryptu, ptasia grypa nadciaga :P
right6
post
Post #1





Grupa: Zablokowani
Postów: 206
Pomógł: 0
Dołączył: 9.03.2006

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


Mam pytanie do szanownego grona forumowiczów.

W miare jak mi sie skrypt rozrasta (juz 18 tys. lini na liczniku (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ), czas pomyslec powaznie o zabezpieczeniach.
zeby uniknac sytuacji ze ktos wpisze ' i skrypt padnie, bo SQL sie sypnie, albo ze ktos wpakuje ifrem'a szer. 1000 px i mi rozwali strone przy wyswietlaniu, nie mowiac o ciagu 500 znaków bez spacji czy innych poczynaniach.

No i mam pare pytan. Na razie chce wykonac zabezpieczenia tylko zapisu do MySQL'a, i odczytu z niego.

czyli, to co mi przyszlo do glowy co trzeba zabezpieczyc:
- tagi HTML'a
- znaki specjalne jak np '
- zeby sie nie wykonal wpisany kod php, czy JS
- pozamieniac jakies krzaczki pochodzace np. w Word'a

no i cuz jeszcze (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) no wlasnie pominolem cos (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

zaczolem tez dzialac: oto co nazbieralem.

  1. <?php
  2.  
  3. $text = strip_tags( $text, '<b><i><u><br><span><font><p><a><h1><h2><h3><ul><li>' );
  4.  
  5.  
  6.  
  7.  
  8. ?>


teraz sie zastanawiam czy takie cos
  1. <?php
  2.  
  3.      // znaki specjalne
  4. $text = str_replace('&amp;plusmn;', '&plusmn;', $text);
  5. $text = str_replace('&amp;trade;', '&trade;', $text);
  6. $text = str_replace('&amp;bull;', '&bull;', $text);
  7. $text = str_replace('&amp;deg;', '&deg;', $text);
  8. $text = str_replace('&amp;copy;', '&copy;', $text);
  9. $text = str_replace('&amp;reg;', '&reg;', $text);
  10. $text = str_replace('&amp;hellip;', '&hellip;', $text);
  11.  
  12. // błędne kodowanie m.in. z phpmyadmina
  13. $text = str_replace('&amp;#261;', 'ą', $text);
  14. $text = str_replace('&amp;#263;', 'ć', $text);
  15. $text = str_replace('&amp;#281;', 'ę', $text);
  16. $text = str_replace('&amp;#322;', 'ł', $text);
  17. $text = str_replace('&amp;#347;', 'ś', $text);
  18. $text = str_replace('&amp;#378;', 'ź', $text);
  19. $text = str_replace('&amp;#380;', 'ż', $text);
  20.  
  21. // znaki specjalne z m$ word
  22. $text = str_replace('&amp;#177;', 'ą', $text);
  23. $text = str_replace('&amp;#8217;', ''', $text);
  24. $text = str_replace('&amp;#8222;', '"', $text);
  25. $text = str_replace('&amp;#8221;', '"', $text);
  26. $text = str_replace('&amp;#8220;', '"', $text);
  27. $text = str_replace('&amp;#8211;', '-', $text);
  28. $text = str_replace('&amp;#8230;', '&hellip;', $text);
  29.          
  30.  
  31. ?>

wykonac przed zapisem do bazy czy juz przy wyswietlaniu (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ?

a takie cos ? przed zapisem czy po (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) czy nie mozna tego prosciej zrobic (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Kod
   /*Zabezpieczenie przed zadługimi wpisami*
   $nowatresc = explode( " ", $text );
   //liczymy elementy tablicy
   $total = sizeof( $nowatresc );
   //przy pomocy pętli pobieramy każdy element tablicy i mierzymy
   for( $i=0; $total > $i; $i++ )
   {
       //jeśli długość któregoś z elementów tablicy przekracza 30 znaków
       //zmienna weryfikacja jest pusta
       if( strlen( $nowatresc[$i] ) > "30" )
       {
           $weryfikacja="";
       }
   }
   //jeśli weryfikacja jest pusta informujemy że wystąpił błąd
   if ( $weryfikacja!="ok" )
   {
       echo"Za długi wyraz, chińczyków nie obsługujemy";
   }
   else
   {
       echo"Wszystko w porządku";
       //tu wykonują się dalsze czynności skryptu
       //jeśli wszystko jest w porządku
   }


i jeszce anty JS
  1. <?php
  2.  
  3.  
  4. // anti js
  5. Function js($text)
  6. {
  7.   if(!eregi('<a href=\"javascript:mailto:mail\('',$text[0]))
  8.   {
  9.     return str_replace('javascript','java_script',$text[0]);
  10.   }
  11.     else
  12.   {
  13.     return $text[0];
  14.   }
  15. }
  16.  
  17. ?>



i jak sie zabezpieczyc przed wykonaniem zapytania SQL i kodu php ?

o czyms zapomnialem (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ?

Ten post edytował right6 15.04.2006, 11:53:40
Go to the top of the page
+Quote Post
phobos
post
Post #2





Grupa: Zarejestrowani
Postów: 91
Pomógł: 0
Dołączył: 7.04.2006

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


poczytaj sobie moze o takich 2 funckjach , ktore napewno ci sie przydarza i ukatwia zycie
addslashes oraz htmlspecialchars

Ten post edytował phobos 14.04.2006, 15:27:48
Go to the top of the page
+Quote Post
kszychu
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


Poza tym, str_replace może przyjmować tablice jako argumenty.
Go to the top of the page
+Quote Post
right6
post
Post #4





Grupa: Zablokowani
Postów: 206
Pomógł: 0
Dołączył: 9.03.2006

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


ale na moje kluczowe pytania dalej nie mam odpowiedzi.
Go to the top of the page
+Quote Post
phobos
post
Post #5





Grupa: Zarejestrowani
Postów: 91
Pomógł: 0
Dołączył: 7.04.2006

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


proponuje ci cos takiego
ten tekst co dostajesz z formularza pakujesz jako argument do 2 funckji

  1. <?php
  2. $tekst=addslashes(htmlspecialchars($_POST['tekst']));
  3. ?>

i wpisujesz do bazy danych
a jak chcesz go wyswietlic na stronce to dajeszt takie cos
  1. <?php
  2.  
  3. $tekst=dropslashes($result['tekst'])
  4. ?>
Go to the top of the page
+Quote Post
AxZx
post
Post #6





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


dziwne, napisales juz 18 tys linii kodu i dopiero teraz zastanawiasz sie nad zabezpieczeniem serwisu?
chyba ze te 18tys linii kodu to ogolnie w twoim zyciu i chcesz sie nauczyc zabezpieczac przyszle skrypty.

wg mnie w bazie trzymaj juz przetworzone dane.
Go to the top of the page
+Quote Post
right6
post
Post #7





Grupa: Zablokowani
Postów: 206
Pomógł: 0
Dołączył: 9.03.2006

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


phobos - ale to nie zabezpiecza przed wszytskim.

AxZx - do tej pory myslalem ze mam zabezpieczenia wystarczajace (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) , ale jak wpisalem znak ' i mi wysypalo wszytsko (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) zaczolem temat drazyc i sie okazalo ze dziura na dziurze dziure dziura pogania (IMG:http://forum.php.pl/style_emoticons/default/ohmy.gif)
Go to the top of the page
+Quote Post
phobos
post
Post #8





Grupa: Zarejestrowani
Postów: 91
Pomógł: 0
Dołączył: 7.04.2006

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


to napisz czego nie zabezpiecza ...
Go to the top of the page
+Quote Post
right6
post
Post #9





Grupa: Zablokowani
Postów: 206
Pomógł: 0
Dołączył: 9.03.2006

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


nieusuwa blednego kodowania, nie usuwa js.
Go to the top of the page
+Quote Post
NuLL
post
Post #10





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


http://forum.php.pl/index.php?showtopic=23258

Moze warto to poczytac ?

I zmien temat na poprawny bo zamkne.
Go to the top of the page
+Quote Post
piwib
post
Post #11





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 7.11.2005

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


Korzystając z tematu mam zapytanie... Potrzebuje łatwy system logowania i przykładowo mam formularz który nadaje wartość zmiennej login i password no i
  1. <?php
  2.  
  3. if ($login == "musztarda" && $password == "majonez")
  4. {
  5. echo "zalogowany"';
  6. }
  7.  
  8. else
  9. echo "Podales/as bledny login lub haslo";
  10.  
  11. ?>

no i pytanie moje czy to jest bezpieczne? Czy można jakoś podglądnąć co zawiera instrukcja warunkowa?Bo jeśli tak to pomysł jest kitowy :/
Go to the top of the page
+Quote Post
envp
post
Post #12





Grupa: Zarejestrowani
Postów: 359
Pomógł: 1
Dołączył: 16.04.2006
Skąd: Łódź

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


Sposob prosty, ale malo uzyteczny, bo mozesz zabezpieczyc nim tylko jedna podstrone (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) No chyba ze login i pass bedziesz GET'em przesylal, co jest troche glupie bo kazdy moze sobie podejrzec wtedy login i pass. Poczytaj o sesjach w php - bardzo proste i uzyteczne, jesli Cie to interesuje podaj maila to Ci wysle prosty i zuyteczny kod...
Go to the top of the page
+Quote Post
piwib
post
Post #13





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 7.11.2005

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


No ok rzuć mi na piotrek369@tlen.pl zobacze i przeanalizuje (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) z góry thx
Go to the top of the page
+Quote Post
matrach
post
Post #14





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 17.04.2006

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


mysql_escape_string() -zamiana znaków specjalnych mysql
Cytat
Żeby sie nie wykonal wpisany kod php
- Nie evaluj tylko print/echo
htmlspecialchars()- zamienia określone znaczniki na encje (&..(IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
htmlentities() - zamienia znaczniki na odpowiadające encje
strip_tags()- usuwa znaczniki html i php
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: 22.08.2025 - 13:23