Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Jportal] Poprawienie skryptu
PhoenixPL
post 13.06.2006, 19:04:25
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 11.06.2006

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


Wiem, że to nie suport jportalu, ale autor nie kwapi się do poprawy poważnego błędu więc liczę na waszą pomoc smile.gif Czy potrafi ktoś to poprawić? http://marc.theaimsgroup.com/?l=bugtraq&m=...48957426316&w=2 Studiując wątki na forum stwierdziłem, że tak będzie dobrze. Mając taki kod:

  1. <?php
  2. if($cat=='all') {
  3.  
  4. $q_ = "AND title LIKE '%$word%'";
  5.  
  6. } else {
  7.  
  8. $q_ = "AND category LIKE '%-$cat-%' AND title LIKE '%$word%'";
  9.  
  10. }
  11.  
  12.  
  13. $query = "SELECT * FROM $file_b_tbl WHERE stat<>5 $q_";
  14. $result = mysql_query($query);
  15. ?>


Zamiana zapytania
Cytat
$query
na coś takiego
  1. <?php
  2. $query = 'SELECT * FROM $file_b_tbl WHERE stat<>5 mysql_real_escape($q_)';
  3. ?>
Pomogła by?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
siemakuba
post 13.06.2006, 23:36:06
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


ja zmieniłbym raczej tak:
  1. <?php
  2. if($cat=='all') {
  3. $q_ = "AND title LIKE '%".mysql_real_escape_string($word)."%'";
  4. } else {
  5. $q_ = "AND category LIKE '%-".mysql_real_escape_string($cat)."-%' AND title LIKE '%".mysql_real_escape_string($word)."%'";
  6. }
  7.  
  8. $query = "SELECT * FROM $file_b_tbl WHERE stat<>5 $q_";
  9. $result = mysql_query($query);
  10. ?>

zmieniając to tak jak napisałeś, zapytanie zostanie zepsute i nie zostanie wykonane.

pozdr.
Go to the top of the page
+Quote Post
PhoenixPL
post 14.06.2006, 05:26:09
Post #3





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 11.06.2006

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


O jej masz racje nie działa tongue.gif A czy będzie to bezpieczne ;> W manualu jest napisane że nie dotyczy '@' a tam jest ten znaczek tongue.gif
Go to the top of the page
+Quote Post
siemakuba
post 14.06.2006, 08:55:08
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


Cytat
A czy będzie to bezpieczne ;> W manualu jest napisane że nie dotyczy '@' a tam jest ten znaczek
Ale dzie napisali? No i gdzie ta @ jest? Nie rozumiem...

A czy będzie bezpieczne? Zobacz co robi funkcja mysql_real_escape_string" title="Zobacz w manualu php" target="_manual - dodaje slashe do znaków specjalnych, które mogły by namieszać gdyby były użyte w niewłaściwy sposób. Na tyle cię to zabezpiecza. :)

pozdr.
Go to the top of the page
+Quote Post
PhoenixPL
post 14.06.2006, 12:58:48
Post #5





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 11.06.2006

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


Rozumiem, wiec wykonanie czegoś takiego nic nie da ? ?smile.gif
  1. <?php
  2. a%' UNION SELECT NULL , NULL , nick , pass, NULL , NULL , NULL , NULL , NULL , NULL
     , 
  3. NULL , NULL FROM admins/
  4. ?>
Go to the top of the page
+Quote Post
siemakuba
post 14.06.2006, 14:39:01
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


a czy to jest naprade tak ciezko sprawdzic samemu tudziez poszukac? Wiele napisano na ten temat.
Mówiąc krótko, nie da. Znaki specjalne będą poprzedzone slashem, nie zostaną więc zinterpretowane jako specjalne tylko jako normalny ciąg znaków, w tym przypadku wynik wyszukiwania nic nie zwróci, chyba że w bazie będziesz miał akurat coś jak ten string który próbujesz podstawić do szukania.

pozdr.
Go to the top of the page
+Quote Post
PhoenixPL
post 14.06.2006, 14:43:51
Post #7





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 11.06.2006

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


Właśnie czytałem dlatego się obawiam tongue.gif
Cytat
Notatka: mysql_real_escape_string() nie dodaje znaków unikowych przed % i _.
I wielkie dzięki za pomoc winksmiley.jpg
Go to the top of the page
+Quote Post
siemakuba
post 14.06.2006, 15:28:27
Post #8





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


wydaje mi się, że tu akurat znak % nie będzie problemem, ale apostrof ('), który kończy wzorzec i dzięki temu będzie możliwe dodanie UNION do zapytania.

możesz się uprzeć i dodatkowo dać np.
  1. <?php
  2. $str = str_replace(array('%', '_'), array('%', '_'), $str);
  3. ?>
ale wydaje mi się to zbędne.

pozdr.

Ten post edytował siemakuba 14.06.2006, 15:28:46
Go to the top of the page
+Quote Post
dr_bonzo
post 14.06.2006, 15:40:56
Post #9





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

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


Czas przeniesc w odpowiednie miejsce -> Gotowe skrypty


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
PhoenixPL
post 14.06.2006, 15:45:58
Post #10





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 11.06.2006

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


Czyli ten apostrof, może sprawić, że zapytanie się wykona?
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 00:36