Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Jportal] Poprawienie skryptu
Forum PHP.pl > Forum > Gotowe rozwiązania > Systemy portalowe i CMS'y
PhoenixPL
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?
siemakuba
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.
PhoenixPL
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
siemakuba
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.
PhoenixPL
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. ?>
siemakuba
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.
PhoenixPL
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
siemakuba
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.
dr_bonzo
Czas przeniesc w odpowiednie miejsce -> Gotowe skrypty
PhoenixPL
Czyli ten apostrof, może sprawić, że zapytanie się wykona?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.