Skocz do zawartości

[PHP] dziwny błąd o whitespace


LolikZabójca

Rekomendowane odpowiedzi

PROBLEM ROZIĄZANY

Mam taki oto kod. Dostaję błąd "Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in /usr/home/panelvps/domains/panelvps.usermd.net/public_html/php/change_converters_do.php on line 23". O co może chodzić?

Odnośnik do komentarza
Udostępnij na innych stronach

Niepoprawnie odnosisz się do klucza w tablicy, nie powinno tam być tych pojedynczych cudzysłowów ', poprawnie to powinno wyglądać tak:

$inputs = [ "lvalue" => 5, "rvalue" => 10 ];
$solutions = [0, 15, 30];

$string = "$inputs[lvalue] + $inputs[rvalue] = $solutions[1]"

Dodatkowo nie buduj tak zapytań :facepalm: chociaż użyj prostej funkcji jak mysql_real_escape_string
 

Najlepiej będzie jak przerzucisz się na PDO i będziesz robił parametryzowane zapytania. np. https://www.php.net/manual/en/pdo.prepare.php

Odnośnik do komentarza
Udostępnij na innych stronach

  W dniu 14.10.2019 o 15:44, Konrad-GM napisał(a):

Niepoprawnie odnosisz się do klucza w tablicy, nie powinno tam być tych pojedynczych cudzysłowów ', poprawnie to powinno wyglądać tak:

$inputs = [ "lvalue" => 5, "rvalue" => 10 ];
$solutions = [0, 15, 30];

$string = "$inputs[lvalue] + $inputs[rvalue] = $solutions[1]"

Dodatkowo nie buduj tak zapytań :facepalm: chociaż użyj prostej funkcji jak mysql_real_escape_string
 

Najlepiej będzie jak przerzucisz się na PDO i będziesz robił parametryzowane zapytania. np. https://www.php.net/manual/en/pdo.prepare.php

Rozwiń  

Działa takie odnoszenie się do elementów tablic. Korzystam z PDO ale po co mam sobie robić pod górkę?

Odnośnik do komentarza
Udostępnij na innych stronach

  W dniu 14.10.2019 o 15:57, LolikZabójca napisał(a):

Działa takie odnoszenie się do elementów tablic. Korzystam z PDO ale po co mam sobie robić pod górkę?

Rozwiń  

Żeby się nauczyć, ot. Nabywasz teraz złej praktyki po prostu (i do tego zwyczajnie niebezpiecznej :) ) .

Odnośnik do komentarza
Udostępnij na innych stronach

  W dniu 14.10.2019 o 16:07, Konrad-GM napisał(a):

Żeby się nauczyć, ot. Nabywasz teraz złej praktyki po prostu (i do tego zwyczajnie niebezpiecznej :) ) .

Rozwiń  

Co w niej niebezpiecznego? Z tego co słyszałem lepiej nie używać emulowanego PDO, bo to może powodować niebezpieczeństwo w razie znalezienia backdoora, a lepiej używać starego, sprawdzonego filter_var który się wysypać nie może

Odnośnik do komentarza
Udostępnij na innych stronach

  W dniu 14.10.2019 o 16:15, LolikZabójca napisał(a):

Co w niej niebezpiecznego? Z tego co słyszałem lepiej nie używać emulowanego PDO, bo to może powodować niebezpieczeństwo w razie znalezienia backdoora, a lepiej używać starego, sprawdzonego filter_var który się wysypać nie może

Rozwiń  

W tym wypadku zapewne nie, ale jak będziesz nawet przypadkiem wrzucał tam $_POST czy $_GET, to zwykłe niedopatrzenie może spowodować sporo problemów. A ten błąd zapewne o którym słyszałeś, to o niewłaściwym kodowaniu bazy danych, tutaj masz rozwiązanie: https://stackoverflow.com/a/12202218

 

  Cytuj

"utf8mb4 is not vulnerable and yet can support every Unicode character"

Rozwiń  

;) 

Odnośnik do komentarza
Udostępnij na innych stronach

  W dniu 15.10.2019 o 12:05, LolikZabójca napisał(a):

Dlaczego niby? Skoro traktuje zmienne filter_var to czemu get, albo post miałby stanowić problem?

Nie, ogólnie Zelent o tym mówił, że emulacja w PDO się ciągle rozwija i zawsze może ktoś znaleźć jakiś backdoor i lepiej go nie używać tej wbudowanej emulacji.

Rozwiń  

Przecież Ci wyżej podesłałem link jak ten błąd wygląda z PDO. Backdoor to nie tylko nieumiejętne korzystanie z PDO.

To chociaż użyj parametryzacji z mysqli:
https://www.php.net/manual/en/mysqli.prepare.php

Odnośnik do komentarza
Udostępnij na innych stronach

  W dniu 15.10.2019 o 12:44, Konrad-GM napisał(a):

Przecież Ci wyżej podesłałem link jak ten błąd wygląda z PDO. Backdoor to nie tylko nieumiejętne korzystanie z PDO.

To chociaż użyj parametryzacji z mysqli:
https://www.php.net/manual/en/mysqli.prepare.php

Rozwiń  

Nie o to chodzi. Tylko o to, że filter_var jest sprawdzony przez lata a w PDO może okazać się że znajdzie ktoś nowy backdoor. Korzystam z PDO, ale wysyłam zapytania normalnie. Tak jest wszędzie też na stackflow i nikt nie narzeka. Co jest złego w filter_var, bo o to pytam? 

 

używam:

$stmt = $mysql_pdo_object->prepare($sql_query);    
$stmt->execute();

Wcześniej sprawdzając posty filter_varem.

Odnośnik do komentarza
Udostępnij na innych stronach

Nic złego nie jest w filter_var, ale w sposobie w jaki budujesz zapytania.

"SELECT * FROM table WHERE x = $y" nawet jak używasz filter_var, to łatwo błąd popełnić. Dlatego też wymyślono coś takiego jak parametryzacja w mysqli->prepare, czy PDO->prepare, a Twój argument "może okazać się że znajdzie ktoś nowy backdoor" jest po prostu głupi, bo równie dobrze błąd może dotyczyć mysqli, czy nawet serwera apache/nginx... Dużo łatwiej złapać się na SQL Injection Twoją metodą niż używając parametryzacji i PDO. A tak w ogóle to nie uchronisz się w 100% przed błędami, aktualizuj serwer i tyle.

PS. ten błąd PDO dotyczył biblioteki mysql akurat, bo wewnętrznie używa funkcji "mysql_real_escape_string"...

Odnośnik do komentarza
Udostępnij na innych stronach

  W dniu 16.10.2019 o 14:07, Konrad-GM napisał(a):

Nic złego nie jest w filter_var, ale w sposobie w jaki budujesz zapytania.

"SELECT * FROM table WHERE x = $y" nawet jak używasz filter_var, to łatwo błąd popełnić. Dlatego też wymyślono coś takiego jak parametryzacja w mysqli->prepare, czy PDO->prepare, a Twój argument "może okazać się że znajdzie ktoś nowy backdoor" jest po prostu głupi, bo równie dobrze błąd może dotyczyć mysqli, czy nawet serwera apache/nginx... Dużo łatwiej złapać się na SQL Injection Twoją metodą niż używając parametryzacji i PDO. A tak w ogóle to nie uchronisz się w 100% przed błędami, aktualizuj serwer i tyle.

PS. ten błąd PDO dotyczył biblioteki mysql akurat, bo wewnętrznie używa funkcji "mysql_real_escape_string"...

Rozwiń  

Ale podaj przykład jak może to zaszkodzić. "Łatwo o błąd" ale nie słyszałem o tym żeby ktoś miał przez to problem, że używa filter_var.

Używam prepare

$stmt = $mysql_pdo_object->prepare($sql_query);    
$stmt->execute();

 Czy chodzi o inny sposób użycia?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Polecam znaleźć info o dowolnym SQL Injection do dowolnego pluginu do WP i zrobisz wielkie oczy, że takie coś przeszło i udało się włamać i przy okazji zrozumiesz, jak zaawansowanych i nietypowych sposobów używa sie do włamania. Tu nie chodzi o powstrzymanie dopisania przez kogoś znaczka ' czy " w parametrze GET/POST, tylko o naprawdę znacznie bardziej wyrafinowane dziury :)

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...