Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Co złego jest w tej funkcji
ColdFire
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 24.10.2004

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


Witam. Mam taki kłopot- napisałem sobie funkcję zabezpieczającą linki przed atakami- jest tam pare funkcji na wyrost, ale to taki szczegół. funkcja wygląda tak:
  1. <?php
  2.  
  3. function danger_links($site)
  4. {
  5. $_GET['site']=strtolower($_GET['site']);
  6. if(strpos($_GET['site'], ".")!==false ||
  7.  (strpos($_GET['site'], "get")!==false)  ||
  8.  (strpos($_GET['site'], "union")!==false)  ||
  9.  (strpos($_GET['site'], "select")!==false) ||
  10.  (strpos($_GET['site'], "drop")!==false) ||
  11.  (strpos($_GET['site'], "<")!==false)  ||
  12.  (strpos($_GET['site'], ">")!==false)  ||
  13.  (strpos($_GET['site'], "%")!==false)  ||
  14.  (strpos($_GET['site'], "@")!==false)  ||
  15.  (strpos($_GET['site'], "update")!==false))
  16. {
  17. die ('Niedozwolony adres url');
  18. }
  19. }
  20.  
  21. ?>

po usunięciu $_GET['site']=danger_links($_GET['site']); wszystko wraca do normy... co zatem jest złego w w/w funkcji?
po czym w indexie robię
  1. <?php
  2.  
  3. $_GET['site']=danger_links($_GET['site']);
  4.  
  5. ?>

Przy wpisaniu któregoś "niebezpiecznego" linku pojawia się żądany napis, jednak wpisując cokolwiek innego nie wyświetla mi innej strony- a jest ona wyświetlana poprzez:
  1. <?php
  2.  
  3. elseif(isset($_GET['site']) && !empty($_GET['site']) && !isset($_GET['id']) || empty($_GET['id']) ) {
  4. $query = "SELECT * FROM `". $db_prefix ."_sites` WHERE name='".$_GET['site']."' ";
  5. $result = mysql_query($query);
  6. while ($row = mysql_fetch_row($result)) {
  7. if($row[3]==false) {
  8. echo ($row[6]);
  9. }
  10. else {
  11. eval ($row[6]);
  12. }
  13. }
  14. }
  15.  
  16. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
phobos
post
Post #2





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

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


ta ostania czesc kodu ktora zapodales zaczyna sie od elseif czy to jest jakas czesc wiekszego kodu( jest cos przed tym czy nie ma? )
i jak mozesz to podaj jaki link do strony jest dobry a nie dziala

Ten post edytował phobos 10.04.2006, 13:07:58
Go to the top of the page
+Quote Post
ColdFire
post
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 24.10.2004

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


tak, to część kodu (najpierw ładowanie gdy nie ma podane $_GET['site'], potem podany fragment, a potem gdy jest podany $_GET['site'] i $_GET['id'] )wszystkie ładuą stronę na tej samej zasadzie, różne są tylko zapytania.
Link:
www.digital-creations.pl/index.php?site=Prace (= index.php ,strona domyślna) + link który powinien działać to formularz kontaktowy- część stron nie ma, ale akurat formularz jest)

Ten post edytował ColdFire 10.04.2006, 13:48:37
Go to the top of the page
+Quote Post
phobos
post
Post #4





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

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


moze wystarczy zastowsowac nawiasy sprubuj tak
  1. <?php
  2.  
  3. elseif((isset($_GET['site']) && !empty($_GET['site'])) && (!isset($_GET['id']) || empty($_GET['id'])) )
  4.  
  5. ?>
Go to the top of the page
+Quote Post
ColdFire
post
Post #5





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 24.10.2004

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


to dobrze działa, problem jest z funkcją danger_links- wiem to daltego, że gdy usunę linijkę $_GET['site']=danger_links($_GET['site']); wszystko działa normalnie- znakiem tego coś nie tak z funkcją danger_links-tylko co?
Go to the top of the page
+Quote Post
phobos
post
Post #6





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

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


ah omg ale mnie przycmilo problem jest z ta funkcja bo ta funckcja nie zwraca nic wiec jak napiszesz
  1. <?php
  2. $_GET['site']=danger_links($_GET['site']);
  3. ?>

to tak jakbys napisal ze $_GET['site']="";dopisz na koncu funkcju return $_GET['site']
albo zamien ta czesc kodu
  1. <?php
  2. $_GET['site']=danger_links($_GET['site']);
  3. ?>

na
  1. <?php
  2. danger_links($_GET['site']);
  3. ?>

i powinno elegancko dzialac

Ten post edytował phobos 10.04.2006, 16:32:02
Go to the top of the page
+Quote Post
DeyV
post
Post #7





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




Cytat
$_GET['site']=danger_links($_GET['site']);


Robisz przypisanie wyniku funkcji do zmiennej.

Tyle tylko, że, zauważ, twoja funkcja nic nie zwraca. Mały paradoks, nieprawdaż?

2 sprawa. Po co przekazujesz do funkcji parametr, skoro nigdy z niego nie korzystasz?
Albo rezygnujesz z przesyłania parametru, albo zdecydowanie z niego korzystasz, nie odwołując się w ciele funkcji do zmiennych superglobalnych (co zdecydowanie polecam) .

W takim przypadku funkcja ta wyglądałaby mniej więcej tak:
  1. <?php
  2. function danger_links( $sSite )
  3. {
  4. $sSite =strtolower( $sSite );
  5. if( strpos( $sSite , ".") !== false  
  6. || ( strpos( $sSite , "get") !== false )
  7. || ( strpos( $sSite , "union") !== false ) ) {
  8. die ('Niedozwolony adres url');
  9. }
  10.  
  11. return $sSite ;
  12. }
  13. ?>
Go to the top of the page
+Quote Post
ColdFire
post
Post #8





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 24.10.2004

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


Cytat
Robisz przypisanie wyniku funkcji do zmiennej.

Tyle tylko, że, zauważ, twoja funkcja nic nie zwraca. Mały paradoks, nieprawdaż?
(IMG:http://forum.php.pl/style_emoticons/default/ohmy.gif) (IMG:http://forum.php.pl/style_emoticons/default/ohmy.gif) jaki wstyd... zapomniałem o returnie (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) natomiast zainteresowało mnie
Cytat
Albo rezygnujesz z przesyłania parametru, albo zdecydowanie z niego korzystasz, nie odwołując się w ciele funkcji do zmiennych superglobalnych (co zdecydowanie polecam) .
dlaczego polecasz takie rozwiązanie? tzn. krótko mówiąc w czym ono jest lepsze?
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: 23.12.2025 - 22:47