Tovább a tartalomhoz

Biztonság

Az ElyOS alkalmazás rendszer sandbox-olt környezetben futtatja az alkalmazásokat. A rendszer statikus kódelemzéssel ellenőrzi a feltöltött alkalmazásokat, és visszautasítja azokat, amelyek tiltott mintákat tartalmaznak.


A következő kódminták biztonsági okokból nem engedélyezettek:

MintaMiért tiltott
eval()Tetszőleges kód futtatása
new Function(...)Tetszőleges kód futtatása
innerHTML =XSS támadás lehetősége
outerHTML =XSS támadás lehetősége
document.write()DOM manipuláció, XSS
dangerouslySetInnerHTMLReact-stílusú XSS
fetch() külső domain-reAdatszivárgás
XMLHttpRequest külső domain-reAdatszivárgás
import() külső URL-rőlTetszőleges kód betöltése
Más plugin sémájának eléréseAdatizoláció megsértése
platform.* séma eléréseRendszer adatok elérése
auth.* séma eléréseAutentikációs adatok elérése
// ❌ TILTOTT
eval('console.log("hello")');
new Function('return 1 + 1')();
element.innerHTML = userInput;
document.write('<script>...</script>');
fetch('https://external-api.com/data');
import('https://cdn.example.com/lib.js');
// ✅ ENGEDÉLYEZETT
console.log('hello');
const result = 1 + 1;
element.textContent = userInput; // textContent biztonságos
window.webOS.remote.call('myFunction'); // SDK-n keresztül

A manifest.json dependencies mezőjében csak fehérlistán szereplő package-ek adhatók meg. Más függőség esetén a plugin feltöltése sikertelen lesz.

PackageVerzió
svelte^5.x.x
lucide-svelte^0.x.x
@elyos/*bármely verzió
// manifest.json — engedélyezett
{
"dependencies": {
"svelte": "^5.0.0",
"lucide-svelte": "^0.263.1",
"@elyos/my-package": "^1.0.0"
}
}
// manifest.json — TILTOTT (feltöltés sikertelen)
{
"dependencies": {
"axios": "^1.0.0",
"lodash": "^4.17.0"
}
}

A plugin csak azokat az SDK funkciókat érheti el, amelyekhez a manifest.json-ban jogosultságot kért. A rendszer futásidőben ellenőrzi a jogosultságokat.

JogosultságLeírásÉrintett SDK funkciók
databaseAdatbázis olvasás/írás a plugin sémájábandata.set(), data.get(), data.delete(), data.query(), data.transaction()
notificationsÉrtesítések küldése felhasználóknaknotifications.send()
remote_functionsSzerver oldali függvények hívásaremote.call()
file_accessFájl feltöltés/letöltés(tervezett)
user_dataFelhasználói profil adatok olvasása(tervezett)
manifest.json
{
"permissions": [
"database",
"notifications",
"remote_functions"
]
}

Minden plugin saját adatbázis sémát kap: plugin_{plugin_id}. A séma csak akkor jön létre, ha a plugin manifest.json-jában szerepel a "database" jogosultság — ha a plugin nem használ adatbázist, séma sem keletkezik.

A plugin csak ebben a sémában végezhet adatbázis műveleteket.

// ✅ Saját séma — engedélyezett
const rows = await window.webOS.data.query(
'SELECT * FROM my_table WHERE user_id = $1',
[userId]
);
// A rendszer automatikusan a plugin_{id} sémában futtatja
// ❌ Más séma — TILTOTT, hiba dobódik
const rows = await window.webOS.data.query(
'SELECT * FROM platform.users'
);

Ha a pluginnak saját táblákra van szüksége, a migrations/ mappában SQL fájlokat helyezhetsz el. Részletek: SDK — Data Service.


try {
const result = await window.webOS.remote.call('sensitiveFunction');
} catch (error) {
// Hiba típusok:
// PERMISSION_DENIED — hiányzó jogosultság
// PLUGIN_INACTIVE — plugin nincs aktiválva
// REMOTE_CALL_TIMEOUT — időtúllépés
// ✅ Felhasználóbarát hibaüzenet
window.webOS.ui.toast('Művelet sikertelen', 'error');
// ❌ Ne jelenítsd meg a nyers hibaüzenetet a felhasználónak
// window.webOS.ui.toast(error.message, 'error');
}

  • Validáld a felhasználói inputot mielőtt adatbázisba írod
  • Használj parameterezett lekérdezéseket ($1, $2, …) SQL injection ellen
  • Ne tárolj érzékeny adatokat (jelszó, token) a plugin adatbázisában
  • Ne bízz meg a kliens oldali validálásban — a szerver függvényekben is validálj
  • Minimális jogosultságok elvét kövesd (csak amit tényleg használsz)