La nivelul unui sistem de operare avem tot felul de mecanisme de izolare a unui proces fata de altele, putand controla totul: ce fisiere poate accesa, cu ce retele poate comunica, chiar si cat timp poate petrece pe CPU sau cata memorie poate aloca.
Cu cat mai putine drepturi, cu atat mai redusa sansa ca un proces cu probleme (vreun bug sau exploatare de securitate) sa poata cauza probleme intreg sistemului.
In cazul Wordpress, unde lumea instaleaza fel de fel de plugins, exista astfel de mecanisme de izolare? Cum sunt ele implementate?
De exemplu un plugin vulnerabil sa SQL injection sa nu poata atinge baze de date/tabele cu care n-ar avea in mod normal treaba, sau sa nu poata sterge fisiere de pe disc care nu-i apartin.
Te referi la o soluție existentă sau la o arhitectură pentru asta ?
De rezolvat sigur se poate rezolva cu fatade la ce apelează plugin-urile. Problema e că cine ti-ar lua la puricat fiecare plugin ca să vadă ce poate accesa/scrie. Un third party posibil introduce bug-uri dacă nu cunoaște fiecare edge case. Plugin-urile trebuie actualizate și s-ar tot schimba permisiunile.
Baza de date e tranzacționala, poți pur și simplu refuza tranzacția dacă query-ul atinge ceva interzis sau scrie pe ceva ce nu ar trebui…
Totuși dacă pui un plugin care are acces la tot și are o vulnerabilitate după nu ai rezolvat nimic. (e.g. 90% din pluginuri de site building/low code/ecommerce pe WP)
Soluția e să ai un sistem care scanează constant ce pluginuri/cod (librării) ai în productie și dacă apare o vulnerabilitate critică publică dezactivezi acel plugin/inchizi automat până e rezolvat.
Vezi snyk sau sonar, în AWS ai scanner de vulnerabilități pe lambda.
Nu poți face asta în WP. M-aș hazarda să spun că nu poți face asta în PHP.
Ca să blochezi accesul unui plugin la fișierele altor plugin-uri, PHP trebuie să ruleze în proces separat, ca user separat, ceea ce este imposibil.
Ca să blochezi accesul unui plugin la DB trebuie să ai câte un user de DB pentru fiecare plugin. Apoi, fiecare plugin trebuie să fie scris/modificat în așa fel încât să nu folosească conexiunea WP ci o conexiune proprie.