Angular translate útmutató – biztonsági megfontolások

Hagyományos kimenet esetében az AngularJS helyesen kezeli a tartalmakat, a megfelelő escape-elést alkalmazza. Ha viszont az angular-translate-et használjuk változó tartalommal az eredmény nem lesz helyesen kezelve. Ez azt jelenti, hogy az alkalmazás súlyos támadási felületet hagy szabadon.

(Az Angular Translate online útmutató “Escaping of variable content” cikkének fordítása)

Változó tartalmak megfelelő kezelése (escape-elése)

Hagyományos kimenet esetében az AngularJS helyesen kezeli a tartalmakat, a megfelelő escape-elést alkalmazza. Ha viszont az angular-translate-et használjuk változó tartalommal az eredmény nem lesz helyesen kezelve. Ez azt jelenti, hogy az alkalmazás súlyos támadási felületet hagy szabadon. (Lásd OWASP).

Általános használat

A useSanitizeValueStrategy(strategy) metódus határozza meg, hogy az escape-elésnél milyen stratégia hajtódik végre, ez globálisan érvényesül.

Jelenleg az alábbi stratégiák vannak beépítve:

  • sanitize: a fordítandó szövegben a $sanitize segítségével tisztítja ki a HTML-t
  • escape: a fordítandó szövegből kiveszi a HTML-t
  • sanitizeParameters: az interpolációs paraméterek értékei alapján tisztítja ki a HTML-t a $sanitize segítségével
  • escapeParameters: az interpolációs paraméterek értékei alapján veszi ki a HTML-t

Jelenleg a sanitize móddal az a probléma, hogy duplán kódolja az UTF-8 karaktereket és a speciális karaktereket. Javaslat: az “escape” stratégiát használd, amíg ez a probléma meg nem oldódik.

Mindezek mellett az alábbi alapértelmezett értékek csak a 2-es verziónál érvényesek:

  • null: semmi, nem biztonságos alapértelmezés (a 3.0-ban ez el lesz távolítva)
  • escaped: ez az “escapeParameters” alias-a a visszafelé működő kompatibilitás miatt (a 2.7.0-tól kezdve, a 3.0-ban ez el lesz törölve)

Hogy megfeleljünk a visszafelé menő teljes kompatibilitásnak az escape-elés alapértelmezett esetben kikapcsolt állapotban van.

$translateProvider.useSanitizeValueStrategy(null);

A jövőben azonban a sokkal biztonságosabb “sanitize”-ot alapértelmezettként bekapcsoljuk.

$translateProvider.useSanitizeValueStrategy(‘sanitize’);

Javaslatunk, hogy nagyon biztonságos stratégiát használj. Ezért, ha nincs kiválasztott stratégia, hibaüzenetet adunk.

Bemutatók

Nem escape-elt és nem is kitisztított változat

Források

Az eredmény:

XSS possible!

Hello HACKED!

Escape-elt változat

Források

Az eredmény:

XSS possible!

Hello <span style=’color:red;’>HACKED</span>!

Escape-elt változat (csak paraméterekkel)

Források

Az eredmény:

XSS possible!

Hello <span style=’color:red;’>HACKED</span>!

A “kitisztított” változat

Források

Az eredmény:

XSS possible!

Hello HACKED!