Politika skriptů

Vlastní skripty jsou ve výchozím stavu vypnuté a povoluje je správce tenantu.

Proč jsou skripty opt-in

Vlastní skript (onFormLoad, onBeforeSave a funkce volané z pravidel a tlačítek) je JavaScript, který běží v prohlížeči každého uživatele formuláře s jeho oprávněními a není izolovaný. Kdo smí měnit konfiguraci formuláře, mohl by tedy spustit libovolný kód v cizích relacích. Proto skripty nefungují, dokud je správce tenantu výslovně nepovolí.

Výrazy zůstávají bezpečné bez povolení. Vzorce v akci pravidla setExpression a v akcích tlačítek počítá vlastní parser, který nepoužívá eval ani new Function a nemá přístup k window, fetch ani ničemu mimo hodnoty polí. Výrazy, pravidla a tlačítka proto fungují i při vypnuté politice. Viz Výrazy a funkce.

Politika a její hodnoty

Politika je tenantová Storage Entity v tenantovém App Catalogu. Primární klíč je FormCraft365_ScriptsPolicy (hodnoty allow / deny). Čte se i starší klíč SpfxFormCustomizer_ScriptPolicy (hodnoty enabled / disabled), ale jen když nový klíč v tenantu vůbec není. Nový klíč má vždy přednost: deny v novém klíči vypne skripty i při enabled ve starém.

HodnotaVýsledek
allow nebo enabled (na velikosti písmen a okolních mezerách nezáleží)Skripty jsou povolené.
deny, disabled, jakákoli jiná hodnota (i překlep jako off nebo no)Skripty jsou vypnuté.
Hodnota chybí (ani jeden klíč)Skripty jsou vypnuté (výchozí stav, opt-in).
Chyba při čteníSkripty jsou vypnuté (fail closed).

Povolení skriptů je vždy výslovné rozhodnutí správce. Tenant, který politiku nikdy nenastavil, má skripty vypnuté.

Zapnutí a vypnutí

V návrháři

  1. V návrháři otevřete Zabezpečení a sekci Vlastní skripty.
  2. Přepínač Povolit vlastní skripty pro celý tenant vidí a může použít jen ten, kdo smí zapisovat do tenantového App Catalogu (správa webu katalogu). Ostatní vidí jen stav a příkaz, který předají správci.
  3. Změnu potvrďte v dialogu s upozorněním na riziko (Potvrdit změnu). Zapíše se hodnota allow nebo deny do klíče FormCraft365_ScriptsPolicy.
  4. Zobrazí se hláška „Změna se projeví po opětovném načtení formuláře (nejpozději do 15 minut)“.
Návrhář, Zabezpečení, sekce „Vlastní skripty“: stav „skripty jsou na tomto tenantu vypnuté (výchozí)“ a přepínač „Povolit vlastní skripty pro celý tenant“
Potvrzovací dialog před zapnutím skriptů s textem o riziku a tlačítky Potvrdit změnu a Zrušit
Sekce „Vlastní skripty“ u uživatele bez práv k App Catalogu: zpráva „Nastavení smí měnit jen správce tenantu“ a zobrazený příkaz Set-PnPStorageEntity

PowerShellem

Connect-PnPOnline -Url "https://<tenant>.sharepoint.com/sites/appcatalog" -Interactive

# Povolit
Set-PnPStorageEntity -Key FormCraft365_ScriptsPolicy -Value allow -Scope Tenant

# Zakázat (přebíjí i starší klíč)
Set-PnPStorageEntity -Key FormCraft365_ScriptsPolicy -Value deny -Scope Tenant

# Návrat do výchozího stavu (vypnuto): odstranit oba klíče
Remove-PnPStorageEntity -Key FormCraft365_ScriptsPolicy
Remove-PnPStorageEntity -Key SpfxFormCustomizer_ScriptPolicy

Návrhář u správce bez práv zapisovat do App Catalogu nabízí k předání příkazy pro allow i deny.

Cache 15 minut

Prohlížeč si výsledek posledního úspěšného čtení pamatuje 15 minut (localStorage, klíč _fc_scrpol_<tenantId>). Změna se proto může u uživatelů projevit až po 15 minutách. Okamžitě ji uvidíte po odstranění klíčů _fc_scrpol_* z localStorage a načtení stránky znovu. Chyba čtení cache dobu neprodlužuje: při chybě jsou skripty vypnuté.

Chování při vypnutí

Formulář otevřený správcem s vypnutou politikou: informační pruh „Vlastní skripty jsou na tomto tenantu vypnuté, proto se nespouští“

Rizika po zapnutí

Politika platí pro celý tenant a všechny formuláře. Skript spuštěný ve formuláři může číst a měnit data v relaci uživatele, který formulář otevřel. Zapněte ji až poté, co ověříte, že konfiguraci formulářů smějí měnit jen důvěryhodní návrháři (viz Oprávnění: zamčené úložiště a role „vlastníci webu“).

Akceptované riziko: App Catalog site collection

Storage Entity se čte přes /_api/web/GetStorageEntity. Ten může vrátit hodnotu z App Catalogu site collection dříve než tenantovou. Správce site collection s vlastním App Catalogem tak může skripty povolit jen pro svůj web. Totéž platí pro čtení licenčního klíče. Tenantový katalog se záměrně nečte přímo, protože ho běžní uživatelé číst nemohou. Je to přijaté riziko: nepoužívejte App Catalogy site collection tam, kde by to bylo nepřijatelné.

Chyby CSP a unsafe-eval

Je-li politika zapnutá, ale skript se nespustí a ve formuláři (nebo v konzoli) se objeví hláška, použijte tabulku:

HláškaPříčina
Bezpečnostní politika (CSP) tenanta nebo prohlížeče blokuje dynamické spouštění skriptů (unsafe-eval).Prostředí zakazuje new Function. Skripty zde fungovat nebudou, použijte pravidla a výrazy.
Chyba při kompilaci skriptu (neplatná syntaxe).Chyba v kódu skriptu. Opravte ji v editoru skriptů v návrháři.
Chyba skriptu: …Výjimka za běhu skriptu. Podrobnosti vypíše ladicí režim.

Postup při potížích: Řešení problémů, skripty nefungují. Psaní skriptů popisuje Skripty.