Skocz do zawartości
LolikZabójca

[PHP] dziwny błąd o whitespace

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ć?

Udostępnij tego posta


Odnośnik do posta
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

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
12 minut temu, Konrad-GM napisał:

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

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

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
9 minut temu, LolikZabójca napisał:

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

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

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
5 minut temu, Konrad-GM napisał:

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

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

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
18 minut temu, LolikZabójca napisał:

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

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"

;) 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
44 minuty temu, LolikZabójca napisał:

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.

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

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
Dnia 15.10.2019 o 14:44, Konrad-GM napisał:

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

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.

Udostępnij tego posta


Odnośnik do posta
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"...

  • Lubię (+1) 1

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
6 godzin temu, Konrad-GM napisał:

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"...

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?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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 :)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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

Tylko 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ę tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×