PHP 2021 - merita sau nu

https://bulletproofphp.dev/yes-php-is-worth-using

Pentru cei care se intreaba, cat si pentru cei care il deaconsidera direct.

1 Like

O sa dau eu un argument pentru “De ce nu PHP” in 2021, vad ca nu e mentionat in articol.
PHP e teren minat pentru tot ce inseamna securitate, foarte multe functii magice care inofensive dar au impact foarte mare asupra securitatii.

Type juggling, frameworkuri (chiar moderne) au validari pe baza de in_array, array_key_exists:

php > echo var_dump(in_array(true, [1,2,3]));
bool(true)

php > echo var_dump(in_array("2 bottles", ["1","2","3"]));
bool(false)

php > echo var_dump(in_array("2 bottles", [1,2,3]));
bool(true)

php > echo var_dump(in_array("", [0,2,3]));
bool(true)

php > echo var_dump(md5('240610708') == md5('QNKCDZO'));
bool(true)

Chiar daca nu le folosesti, file_get_contents, phar://, getimagesize tot exista si cresc masiv suprafata de atac. Au mai incercat si altii sa faca o varianta de PHP care sa fie “security hardened” si nu au reusit.

In ultimii ani, am auditat mai multe codebase-uri si cele in PHP au fost de departe cele mai slabe ca postura security-wise. Si nu e vorba doar de proiecte legacy, chiar si noi scrise in Lumen au hibele astea.

Sincer nu cred ca merita riscul sa dezvolti in PHP daca securitatea e cat de cat importanta. Laravel nu mi se pare mult mai bun decat Django sau Rails.

4 Likes

It multumesc pentru argumente dar sunt oarecum invalide pentru ca :

  • in_array are un al 3-lea parametru denumit “strict” care rezolva tot ce mentionezi ca problema
  • la fel pentru egalitate trebuie folosit === in loc de ==

Pentru partea de securitate cred ca probleme gasesti in toate limbajele.

1 Like

Daca stii de toate minele, da, e sigur.
Argumentul era ca o echipa (ex. 10 oameni) care dezvolta in PHP trebuie sa evite mai multe decat una care are acelasi nivel de competenta si dezvolta in Python, nu ca acolo nu ar fi vulnerabilitati.

Degeaba exista parametrul “strict” daca e optional, nu toti pot aprecia cu adevarat riscul cand lipseste.
Nu pot recomanda PHP pentru ca are mai multe probleme sistemice de genul asta si e inevitabil sa nu apara si in bibliotecile si frameworkurile pe care le folosesti.

1 Like

daca-ar fi sa te iei dupa aberatii de genul celor de mai sus scoatem de pe piata mai multe limbaje, nu doar php.

ps: echo var_dump?

Nu am intalnit alt limbaj sa aiba atatea aberatii cat are PHP.

2 Likes

nimic despre js? :slight_smile:

de ce da true?
Ca au hash-uri diferite.

le: mi-a explicat @IceRidder

are impresia ca primul hash e de fapt numar. si de acolo toata balaria.

ps, o sa dea true cu orice i-ai da la al 2-lea hash

merge si cu alte valori, nu doar alea doua

pentru ca aecele hash-uri arata asa “0e462097431906509019562988736854” si “0e830400451993494058024219903391” iar daca folosesti == php incearca sa faca si type coercion, iar ca numere sunt egale, de aia e important ca mereu sa folosesti ===

2 Likes

Pentru ca pe undeva a fost intentionat (a fost un trade-off as putea spune).

Si desi sunt de acord cu cele mentionate de tine, tot as recomanda PHP incepatorilor.

chiar va place sa apelati o metoda cu -> ? :sweat_smile:

1 Like

Pentru că succesul limbajului a fost accidental. De fapt, inițial nici măcar nu era un limbaj per se.

Uită-te la istoria/motivația din spatele PHP și o să te lămurești de unde atâtea aberații: PHP a fost scris pentru că lui Rasmus nu-i plăcea Perl în mod deosebit, dar avea nevoie de niște utilitare să afișeze informații dinamice în pagină.

1 Like

Stiu, si de aceea am spus ca a fost intentionat. Iar successul nu a venit accidental ci a venit ca urmare a acestor decizii (luate pentru usurinta utilizarii). Tin si acum minte ce fericit eram ca nu mai trebuie sa declar marimea vectorilor la initializare + faptul ca puteam sa adaug orice in ei :slight_smile:

Exista si in C si C++ acel operator :slight_smile:


Thread relevant

Dacă tot vorbim despre tâmpenii din PHP: number_format face round dacă vrei zero decimale.

echo number_format( 1000000.5, 0, '.', ','); // 1,000,001

ala-i un comportament corect

pentru ca-i mult mai rau decat a apela o metoda cu .
pe bune, daca singurele tale probleme cu un limbaj de programare sunt simbolurile mai bine abtine-te.

1 Like

Care? round? Glumești, nu?

Pe mine mă disperă inconsistențele de genul asta, strstr(string $haystack, string $needle) și array_search(mixed $needle, array $haystack), din cauza lor tot timpul când am haystack și needle trebuie să mă uit în documentație să văd ordinea parametrilor.

daca ai avea 1000000.4 si ti-ar spune ca-i 1000000, ala n-ar mai fi round?
ar fi frumos sa ma lase sa-i spun cum vreau sa faca rotunjire, da de facut tot face.

1 Like

Depinde ce te aștepți să facă acel number_format(), truncate, floor, ceil sau round. Au ales și ei ce-au putut :slight_smile:

LE Cred că și eu m-aș aștepta la truncate. Din moment ce am ales zero zecimale, înseamnă că nu mă interesează ce-i după virgulă.

1 Like