Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zabezpieczenie formularzy, strip_tags, HTMLSpecialChars()
Jarod
post
Post #1





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Czy znacie jakieś inne dobre sposoby zabezpieczania formularzy przed załamaniem skryptu php oprócz stosowania funkcji strip_tags i HTMLSpecialChars()?

Pozdrawiam

Ten post edytował J4r0d 28.04.2005, 11:54:51


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 16)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




1)escape'owanie
2)rzutowanie na konkretny typ, czyli jak masz mieć w inputa wpisaną liczbę, to rzutujesz ją na int, żeby napewno otrzymać int, anie jakiś napis, który może zaszkodzić ($zm=(int)$zm)


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Jarod
post
Post #3





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Cytat
1)escape'owanie

Możesz napisać co dokładnie miałeś na myśli?

Cytat
2)rzutowanie na konkretny typ, czyli jak masz mieć w inputa wpisaną liczbę, to rzutujesz ją na int, żeby napewno otrzymać int, anie jakiś napis, który może zaszkodzić ($zm=(int)$zm)


No też dobre ale jak zamieci stringa na liczbe? Może też wyjść coś głupiego. A nie liepij sprawdzać czy użytkownik podał liczbe zamiast łańcucha?

I jeszcze jedna sprawa. Chcę wykorzystać strip_tags i dodaję tą funkcje w skrypcie zapisującym do bazy.
  1. <?php
  2.  
  3. $query = &#092;"INSERT INTO tabela (tabela_id, imie, nazwisko) \".
  4. &#092;"VALUES ($ID, strip_tags('$_POST[imie]'), strip_tags('$_POST[nazwisko]') );\";
  5.  
  6.  
  7. ?>


I wywala mi błą przy zapisie. Gdzie popełniam błąd?


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




escape'owanie funkcja mysql_escape_string()


Cytat
No też dobre ale jak zamieci stringa na liczbe? Może też wyjść coś głupiego

Konkretnie wyjdzie 0. Ale skoro tam miała być liczba, to string jest już sam w sobie błędny, więc wszystko ok.

Cytat
A nie liepij sprawdzać czy użytkownik podał liczbe zamiast łańcucha?

Też można

Błąd ci wywala, bo dajesz funkcje php w zapytaniu. tak nie można

  1. <?php
  2.  
  3. $query = &#092;"INSERT INTO tabela (tabela_id, imie, nazwisko) \".
  4. &#092;"VALUES ($ID, '\".strip_tags('$_POST[imie]').\"','\". strip_tags('$_POST[nazwisko]').\"' )\";
  5.  
  6. ?>


Ten post edytował nospor 28.04.2005, 12:15:58


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Jarod
post
Post #5





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Cytat
Błąd ci wywala, bo dajesz funkcje php w zapytaniu. tak nie można

  1. <?php
  2.  
  3. $query = &#092;"INSERT INTO tabela (tabela_id, imie, nazwisko) \".
  4. &#092;"VALUES ($ID, '\".strip_tags('$_POST[imie]').\"','\". strip_tags('$_POST[nazwisko]').\"' )\";
  5.  
  6. ?>


thx tongue.gif

I już ostatnie pytanie. Zanim zapisze do bazy sprawdzam, czy każde pole zostało wypełnione (później to zmienie na dokładniejsze sprawdzanie i nie wszystkie pola - dla kilku zostawię możliwość pozostawienia pustego). Mniej więcej to wygląda tak:
  1. <?php
  2.  
  3. if ($_POST[login] == '') $CzyWypelnione = 0;
  4. if ($_POST[haslo] == '') $CzyWypelnione = 0;
  5. if ($_POST[imie] == '') $CzyWypelnione = 0;
  6. if ($_POST[nazwisko] == '') $CzyWypelnione = 0;
  7. if ($_POST[pesel] == '') $CzyWypelnione = 0;
  8. if ($_POST[email] == '') $CzyWypelnione = 0;
  9. if ($_POST[ulica] == '') $CzyWypelnione = 0;
  10. if ($_POST[kod] == '') $CzyWypelnione = 0;
  11. if ($_POST[miejscowosc] == '') $CzyWypelnione = 0;
  12. if ($_POST[telefon] == '') $CzyWypelnione = 0;
  13.  
  14. ?>


Jeżeli zmienna CzyWypelnione będzie miałą wartość 1 to zostanie wyświetlony odpowiedni komunikat i powrót do formularza.
Moje pytanie czy nie lepiej będzie jak w tym momencie (sprawdzenie wypełnienia formualarza) zastosować funkcję strip_tags zamiast w zapytaniu?
Które jest efektywniejsze/ może lepsze ?

Pozdrawiam


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Jeżeli zmienna CzyWypelnione będzie miałą wartość 1
Chyba chciales napisac: Jeżeli zmienna CzyWypelnione będzie miałą wartość 0

Swoją drogą trochę dziwnie to sprawdzasz, aco jesli kilka nie bedzie wypelnionych. Jak poinformujesz gościa, o które ci chodzi. Bedzie musial się domyslać.

strip_tags nie robisz w zapytaniu, tylko wstawiasz text do zapytania po wczesniejszym przepuszczeniu go przez strip_tags. Tak tylko pisze aby wszystko bylo jasne. To może być robione tak jak jest


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Cytat
Chyba chciales napisac: Jeżeli zmienna CzyWypelnione będzie miałą wartość 0
Tak. Moja pomyłka

Cytat
Swoją drogą trochę dziwnie to sprawdzasz, aco jesli kilka nie bedzie wypelnionych. Jak poinformujesz gościa, o które ci chodzi. Bedzie musial się domyslać.

To jest tylko tymczasowe rozwiązanie. Zostaje wyświetlony komunikat "Wypełnij wszystkie pola formularza" Więc przy drugim wypełnianiu będzie pilnował aby wszystko wypełnić

Cytat
strip_tags nie robisz w zapytaniu, tylko wstawiasz text do zapytania po wczesniejszym przepuszczeniu go przez strip_tags. Tak tylko pisze aby wszystko bylo jasne. To może być robione tak jak jest

Źle się zrozumieliśmy. ALe myślimy o tym samym tongue.gif

A jaki doradzasz sposób na sprawdzanie wypełnienia formualrza?

Pozdrawiam


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No sprawdzasz, czy każde pole odpowiada założeniom.
jak ma być to liczba, to czy jest liczbą, jak email to czy jest emailem (jest wiele metod sprawdzania maila. bylo na forum, jest na necie), jak ma byc pesel to sprawdzasz czy to pesel itd.

  1. <?php
  2.  
  3. if (jest zly $email) $bademail=true
  4. else $bademail=false;
  5. //.....i tak dalej
  6.  
  7. echo '<input type=\"text\" name=\"email\" >'.($bademail?'[POPRAW]':'');
  8. //... itak dalej
  9.  
  10. ?>


MOżna inaczej, lepiej, gorzej. TO jest takie podstawowe sprawdzanie.
Możesz też dodatkowo sprawdzać w js przed wyslaniem formularza.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


js odpada. Jeśli użytkownik wyłączy obsługę w przeglądarce to na nic takie sprawdzanie.
Chodzi mi po głowie stworzenie tablicy do której będe zapisywał nazwy pól źle wypełnionych i później je wyświetlał. To chyba dobry sposób.

Dziękuje za odpowieź i pozdrawiam


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
js odpada. Jeśli użytkownik wyłączy obsługę w przeglądarce to na nic takie sprawdzanie.
Dlatego użyłem słowa "dodatkowo"
Sprawdzanie w js ma umilić pracę klientowi. Na serwerze mimo wszystko sprawdzanie ma być. Jak klient nie chce js, to mu się zawsze będzie stronka przelaodywywac, nawet jak ma źle. A tak by se czasu zaoszczędził. Ja zawsze mam wbudowaną walidacje i na serwerze i u klienta.

Radziłbym bym Ci też, jeśli to będą skompliowane formularze, używać klas do formularzy. UŁatwiają one życie. NIektóre też zawierają wbudowaną podwójną walidację.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Jarod
post
Post #11





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Wracając do funkcji strip popełniłeś błąd..

Zamiast
  1. <?php
  2. $query = &#092;"INSERT INTO tabela (tabela_id, imie, nazwisko) \".
  3. &#092;"VALUES ($ID, '\".strip_tags('$_POST[imie]').\"','\". strip_tags('$_POST[nazwisko]').\"' )\";
  4. ?>


powinno być
  1. <?php
  2. $query = &#092;"INSERT INTO tabela (tabela_id, imie, nazwisko) \".
  3. &#092;"VALUES ($ID, '\".strip_tags($_POST[imie]).\"','\". strip_tags($_POST[nazwisko]).\"' )\";
  4. ?>

bo inaczej do bazy zapisze nie wartość tylko "$_POST[imie]"..


Druga sprawa, która zresztą mnie nie pokoi to wynik testu, który przeprowadziłem. Wszyscy dobrze wiem, że gdy nie zastosujemy funkcji strip_tags, ktoś wpisując w formularzu "Imię" ciąg "[b ]Jakiesimie[/b ]" otrzyma Jakiesimie.
Więc przeprowadziłem test. Dodałem funkcje strip_tags do zmiennej imie a do zmiennej nazwisko nie.
Wyglądało to tak
  1. <?php
  2. $query = &#092;"INSERT INTO tabela (tabela_id, imie, nazwisko) \".
  3. &#092;"VALUES ($ID, '\".strip_tags($_POST[imie]).\"','$_POST[nazwisko])' )\";
  4. ?>

okazało się ohmy.gif , że stripuje wszystkie zmienne, chociaż chciałem tylko jedną.. A wypisuje jako ciąg znaków "[b ]Jakiesimie[/b ]". Wydawało mi się, że znaczniki html są usuwane...

Ten post edytował J4r0d 28.04.2005, 15:11:45


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Wracając do funkcji strip popełniłeś błąd..

Sorki, ciapki mialy być w $_POST czyli $_POST['imie']. Dobrym (bardzo dobrym) zwyczajem jest uzywanie ciapków do oznaczenia literlanych indexów tablicy.
Cytat
okazało się  , że stripuje wszystkie zmienne, chociaż chciałem tylko jedną
hihi, tym razem ty poplelniles blad. powinno byc:
  1. <?php
  2.  
  3. $query = &#092;"INSERT INTO tabela (tabela_id, imie, nazwisko) \".
  4. &#092;"VALUES ($ID, '\".strip_tags($_POST['imie']).\"','\".$_POST['nazwisko'].\"' )\";
  5.  
  6. ?>


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Jarod
post
Post #13





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Cytat
Sorki, ciapki mialy być w $_POST czyli $_POST['imie'].

No niezupełnie bo jak zrobie tak jak piszesz to skrypt nie wykonuje się. Biała strona

Do tej pory używałem sposobu np:
  1. <?php
  2.  
  3.  $query = &#092;"INSERT INTO klient (konto_id, imie, nazwisko)\".
  4.  &#092;" VALUES ($ID,'$_POST[imie]','$_POST[nazwisko]');\";
  5.  
  6. ?>

I działało poprawnie. Jak dodam ciapki np $_POST['imie'] to już nie działa.

Cytat
hihi, tym razem ty poplelniles blad.  powinno byc:

  1. <?php
  2.  
  3. $query = &#092;"INSERT INTO tabela (tabela_id, imie, nazwisko) \".
  4. &#092;"VALUES ($ID, '\".strip_tags($_POST['imie']).\"','\".$_POST['nazwisko'].\"' )\";
  5.  
  6. ?>


Ale ja nie chciałem, żeby usuwało tagi z tych dwóch zmiennych, tylko z pierwszej (imie).
Robie tak jak podałeś tylko bez tych ciapek i usuwa z obydwóch zmiennych sadsmiley02.gif


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Do tej pory używałem sposobu np:
      $query = "INSERT INTO klient (konto_id, imie, nazwisko)".
                " VALUES ($ID,'$_POST[imie]','$_POST[nazwisko]');";

bo ci sie ciapki wtedy mieszaly. trzeba wiedziec jak używać. Zauważ ze ze strip_tags są ciapki (w mojej metodzie i dziala).

Cytat
Ale ja nie chciałem, żeby usuwało tagi z tych dwóch zmiennych, tylko z pierwszej (imie).
No i moja metoda to robi. NIe ma prawa ci usuwać z nazwiska, gdy nazwisko nie jest objęteę tą funkcją. Moze ty poprostu do nazwiska nie dopisujesz tagów html, więc ich nie zapisuje do bazy. W tym zapytaniu ucinam tylko w imie.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Jeszcze raz bo się chyba nie rozumiemy.

I. Zacznę od tego, że Ty każesz zapisaywać w ten sposób (narazie prześledźmy bez strip_tags):
  1. <?php
  2.  
  3. $query = &#092;"INSERT INTO tabela (tabela_id, imie, nazwisko) \".
  4. &#092;"VALUES ($ID, '\".$_POST['imie'].\"','\".$_POST['nazwisko'].\"' )\";
  5.  
  6. ?>

A ja do tej pory zapisywałem też tak:
  1. <?php
  2.  
  3.  $query = &#092;"INSERT INTO tabela (tabela_id, imie, nazwisko)\".
  4.  &#092;" VALUES ($ID, '$_POST[imie]' , '$_POST[nazwisko]' );\";
  5.  
  6. ?>

i działało. Poprawnie dodawało do bazy. Więc nie wiem dlaczego uparłeś się żeby stosować to kropke i odzielać, skoro obydwa zapisy są poprawne?

II.
Byłem przekonany, że funkcja strip_tags usuwa znacznik i zapisuje do bazy bez znaczników. Ale jak ją zastosuje i podam w formularzu znaczniki pogrubuające, a potem chcę odczytać dane i wyświetlić w przeglądarce, to nie pogrubia tekstu ale wypisuje znaczniki i dziwnie to wygląda.

Przecież do wypisywania znaczników a nie ich obcinania służy funkcja HTMLSpecialChars()... Więc co jest nie tak? Może przy odczycie danych też powiniem stosować funkcję strip_tags??

III. Skoro mój sposób zapisu (bez kropki patrz punkt I) działa to dlaczego ten zapis nie działa
  1. <?php
  2.  
  3. $query = &#092;"INSERT INTO tabela (tabela_id, imie, nazwisko) \".
  4. &#092;"VALUES ($ID, '\".strip_tags($_POST[imie]).\"', '$_POST[nazwisko]' )\";
  5.  
  6.  
  7. ?>

tylko stripuje obie zmienne?


EDIT:
-------
Problem rozwiązany. Zamiast <b></b> podawałem [b ][/b ]. Czasami warto odejść od komputera na 5 minut winksmiley.jpg

Pozdrawiam

Ten post edytował J4r0d 28.04.2005, 15:49:55


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
nospor
post
Post #16





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Więc nie wiem dlaczego uparłeś się żeby stosować to kropke i odzielać, skoro obydwa zapisy są poprawne
Bo jest dobrym zwyczajem pisać indexy tekstowego dla tablic w ciapkach
Cytat
Problem rozwiązany. Zamiast <b></b> podawałem [b ][/b ].
Też już chcialem Ci na to zwrócić uwagę winksmiley.jpg


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Ilmenauer
post
Post #17





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 24.03.2005
Skąd: Pomorskie

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


Generalnie, jeśli chodzi o kontrolę pól formularza to polecam PEAR i QuickForm. W sposób niemalże trywialny definiujesz formularz, filtry (czyli np. wytnij spacje) i wzorce do sprawdzania wartości(po stronie serwera jak i klienta) i nie trzeba znać JS... i php właściwie też nie, he, he, he... winksmiley.jpg Wogóle grucha jest piękna. Tylko trzeba czasu i cierpliwości na zapoznanie.
Go to the top of the page
+Quote Post

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: 22.08.2025 - 04:41