Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP]Filtrowanie $_GET
!*!
post 8.09.2008, 05:02:25
Post #1





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Przesyłam dane przez GET, zwykła wyszukiwarka input... Jak przefiltorwać te dane? Gdy wpisze coś takiego:

  1. xczxczc<div class="zxczxcx">lll</div>


strona jest rozwalana...

kombinowałem nawet z czymś takim ale nic to nie daje..

  1. <?php
  2. ?>


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
TomASS
post 8.09.2008, 07:05:01
Post #2





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


  1. <?php
  2. $str = "A 'quote' is <b>bold</b>";
  3.  
  4. // Output: A 'quote' is &lt;b&gt;bold&lt;/b&gt;
  5.  
  6. // Output: A 'quote' is &lt;b&gt;bold&lt;/b&gt;
  7. echo htmlentities($str, ENT_QUOTES);
  8. ?>


źródełko


--------------------
Go to the top of the page
+Quote Post
!*!
post 8.09.2008, 11:30:34
Post #3





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Czytałem to, jednak problemu nie rozwiązuje:

wpisuje w input:

  1. xczxczc<div class="zxczxcx">lll</div>


filtr:

  1. <?php
  2. $wynik = $_GET['w2'];
  3. $zm = strip_tags($wynik);
  4.  
  5. echo htmlentities($zm  , ENT_QUOTES);
  6.  
  7.  
  8. echo ''.$zm.'';
  9. ?>


efekt echo:

  1. 111133331111333311113333


formularz wygląda tak:

  1. <form action="" method="get">
  2.        <fieldset>
  3.  
  4.        <input type="hidden" name="xxc" value="wgo" />
  5.        <input type="text" class="fszukaj"  name="w2" value="<?php echo ''.$_GET['w2'].''; ?>" />
  6.        <input type="hidden" name="mieszkania" value="<?php echo ''.$_GET['mieszkania'].''; ?>" />
  7.  
  8.  
  9.    </fieldset>
  10. </form>


ale strona jest rozwala mimo wszytko, ponieważ dane w samym input nie są filtrowane tzn. niektóre znaki html wyskakują poza input.

Ten post edytował !*! 8.09.2008, 11:34:46


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
TomASS
post 8.09.2008, 14:26:53
Post #4





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Dlaczego tutaj nie użyłeś htmlentities:
  1. <input type="text" class="fszukaj"  name="w2" value="<?php echo ''.$_GET['w2'].''; ?>" />

?
a to po co?:
  1. <?php
  2. $zm = strip_tags($wynik);
  3. ?>


Daj tak:
  1. <form action="" method="get">
  2.       <fieldset>
  3.  
  4.       <input type="hidden" name="xxc" value="wgo" />
  5.       <input type="text" class="fszukaj"  name="w2" value="<?php echo htmlentities($_GET['w2']); ?>" />
  6.       <input type="hidden" name="mieszkania" value="<?php echo htmlentities($_GET['mieszkania']); ?>" />
  7.  
  8.  
  9.   </fieldset>
  10. </form>
  11. <?php
  12. echo htmlentities($_GET['w2']);
  13. ?>

i pięknie działa! nic się nie rozjeżdża


--------------------
Go to the top of the page
+Quote Post
!*!
post 8.09.2008, 15:19:02
Post #5





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Dla pewności umieśilem to w fukncji:

  1. <?php
  2. function zabezpieczget($danezget)
  3. {
  4. }
  5. ?>


teraz tylko musze przy kazdym GET dodać zabezpiecznieget... trochę roboty mnie czeka...

ps. taka filtracja dobrze się nadaje też do post i wysyłaniu danych do bazy? Czy jeszcze coś dodać?


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Shili
post 8.09.2008, 15:24:28
Post #6





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Załóżmy, że chcę wyszukać słowa z apostrofem.

Sprawdź, co Ci zwróci to szukanie (stawiam na to, że nic, jeśli oczywiście masz takie słowa w bazie). Czemu?
Znak ucieczki doda: addslashes i mysql_real...

Zdecyduj się na jedną z nich, dwie to nadmiar uniemożliwiający poprawne działanie wyszukiwarki. Swoją drogą podpowiem, że lepiej mysql_...
Go to the top of the page
+Quote Post
TomASS
post 8.09.2008, 15:34:03
Post #7





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Wcale nie musisz wszędzie dawać html....

Możesz dać na początku każdego pliku:
  1. <?
  2. if(is_array($_GET)){
  3.    foreach ($_GET as $key => $value) {
  4.        $_GET[$key]=htmlentities($value);
  5.    }
  6. }
  7. ?>

lub jak wolisz:
  1. <?
  2. function zabezpieczget($danezget)
  3. {
  4. }
  5.  
  6. if(is_array($_GET)){
  7.    foreach ($_GET as $key => $value) {
  8.        $_GET[$key]=zabezpieczget($value);
  9.    }
  10. }
  11. ?>


czyli:
  1. <?
  2. if(is_array($_GET)){
  3.    foreach ($_GET as $key => $value) {
  4.        $_GET[$key]=htmlentities($value);
  5.    }
  6. }
  7. ?>
  8. <form action="" method="get">
  9.       <fieldset>
  10.  
  11.       <input type="hidden" name="xxc" value="wgo" />
  12.       <input type="text" class="fszukaj"  name="w2" value="<?php echo $_GET['w2']; ?>" />
  13.       <input type="hidden" name="mieszkania" value="<?php echo $_GET['mieszkania']; ?>" />
  14.  
  15.  
  16.   </fieldset>
  17. </form>
  18. <?php
  19. echo $_GET['w2'];
  20. ?>

i nie musisz się martwić.


--------------------
Go to the top of the page
+Quote Post
!*!
post 8.09.2008, 15:38:39
Post #8





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Shili - jeśli podam do wyszukania słowo "willa" jako:

Kod
'willa'


zostanie ono zamienione na:

Kod
\\\'willa\\\'


I zostanie bez problemu wyszukane... tylko pojawiają się \\\\\ w wyniku... Jak można to usunąć? heh zakręcone, dodanie \\ dla bezpieczeństwa, ale bląd w wyświetlaniu.. późniejszym po filtrowaniu

Ten post edytował !*! 8.09.2008, 15:47:12


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Shili
post 8.09.2008, 19:44:11
Post #9





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Napisałam - wywal addslashes - mysql_real_escape_string jest lepsze, bo nie dość, że escapeuje znaki, które addslashes może ominąć, to w dodatku jest bezpośrednio przeznaczone do bazy mysql.
Go to the top of the page
+Quote Post
!*!
post 8.09.2008, 22:25:55
Post #10





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Wywaliłem, efekt pozostał:

  1. <?php
  2. function zabezpieczget($danezget)
  3. {
  4. }
  5. ?>


edit dodałem stripslashes, teraz jest dobrze?

Ten post edytował !*! 8.09.2008, 22:30:39


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Shili
post 8.09.2008, 22:40:11
Post #11





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Nie wiem, to zależy co widzisz.

Jeśli masz włączone magic quotes, to pewnie tak winksmiley.jpg
Go to the top of the page
+Quote Post
!*!
post 9.09.2008, 06:26:28
Post #12





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Widzę.. złe rzeczy widze np. mogę wpisać:

Kod
/


i wyskoczy mi ze dwa takie... można się tego pozbyć? aby nie było można robić spacji, apostrofów itp.? Nie są mi one potrzebne do szczęścia;)


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Shili
post 9.09.2008, 08:42:51
Post #13





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Widzisz już takie rzeczy po dodaniu do bazy, czy jeszcze przed?

Jeśli przed, to wszystko jest dobrze, jeśli w bazie się coś takiego pojawia, to jest źle. Także sprecyzuj gdzie widzisz podwójny / i pomyślimy, względnie się wytłumaczy czemu tak jest.
Go to the top of the page
+Quote Post
!*!
post 9.09.2008, 09:19:37
Post #14





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Przed dodaniem, w zasadzie w każdym polu tak jest, baza jest "czysta". \\ pojawia sie po zatwierdzeniu formularza, oczywiście nie przejdze, bo blokuje go filtr, ale jeśli wpiszę:

Kod
\\nazwa\\ otrzymam wynik \\\\nazwa\\\\


jest jeden myk z tym, na stronie mam inny include z linkami... jeśli chce wyszukać poprzez właśnie "\\nazwa\\" i kliknę na inny link, w adresie strony pojawia sie taki ciąg znaków

Kod
%5Cnazwa%5C


niby ok, bo tak przeglądarka widzi taki adres, ale... gdy kliknę tak z parę razy ta zmienna się klonuje

Kod
%5Cnazwa%5C%5Cnazwa%5C%5Cnazwa%5C%5Cnazwa%5C


po kilku takich klikach strona jest blokowana, riques-url/


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
-do-
post 9.09.2008, 09:24:34
Post #15





Goście







Wysyłaj dane postem to uniknieiesz takich, problemów ze slashami.

Co do twojego pytania dodaj w <form action="" nazwe pliku do którego jest wysyłany formularz
Go to the top of the page
+Quote Post
!*!
post 9.09.2008, 15:40:31
Post #16





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Mylisz się, po zmianie na post i wpisaniu \\ nadal pojawia się \\\\ ... poza tym get w przypadku wyszukiwarki jest lepszym rozwiązaniem.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
dr_bonzo
post 9.09.2008, 15:51:18
Post #17





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

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


Kurde,
do bazy wstawiasz dane przerzucone TYLKO przez mysql_real_escape()
do wyswietlania uzywasz htmlspecialchars(), i tyle [nie wazne skad dane pochodza].


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
!*!
post 9.09.2008, 16:06:13
Post #18





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


a ok.. dodatkowo idą dane przez filtr:

  1. <?php
  2. $nazwa = stripslashes($nazwa);
  3. $nazwa= ereg_replace('[^a-zA-Z0-9]', '', $nazwa);
  4. ?>


teraz żadne znaczki nie powinny się przedostać? winksmiley.jpg


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
kazag
post 9.09.2008, 17:20:16
Post #19





Grupa: Zarejestrowani
Postów: 180
Pomógł: 12
Dołączył: 30.04.2007

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


Czy nie jest tak, że mysql sam dodaje slashe podczas przesyłania danych do bazy? I htmlspecialchars() powinno już wystarczyć (ewentualnie możesz sprawdzać typ danych, jeśli np. mają być tylko liczbowe, lub ten typ wymuszać). Ja osobiście dodaje jeszcze strip_tags i imho starczy.

edit: i staram się używać POST kiedy tylko jest to możliwe, żeby mi ktoś głupich linków nie konstruował.

Ten post edytował kazag 9.09.2008, 17:21:53


--------------------
Okoczia - jedyne w Polsce wirtualne państwo indiańskie.
kazag.net - i coś o mnie.
Go to the top of the page
+Quote Post
!*!
post 9.09.2008, 18:06:45
Post #20





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


kazag - a jak zrobiłbyś w POST wyszukiwarkę ze stronicowaniem + 4 includy na stronie z czego każdy ma swoje stronicowanie? jest to conajmniej kłopotliwe...


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
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 Wersja Lo-Fi Aktualny czas: 19.04.2024 - 17:44