2016-08-31 16 views
5

W moim projekcie używam „uciec” jako strategia wartości Sanitize. I używam dyrektywy translate (atrybut) w pewnym miejscu. Niektóre inne miejsca, w których używam filtra tłumaczenia.XSS w kątowym Przekłada dyrektywę

Z dyrektywy:

<span translate="{{vm.text}}"><span> 

To vulnarable do XSS. Jeśli wartość vm.text to <script>alert()</script>, to skrypt jest wykonywany i wyświetlane jest okno podręczne.

z filtrem:

<span>{{vm.text | translate}}<span> 

Wartość vm.text jest uciekł i html jest pokazany jako &lt;script&gt;alert()&lt;/script&gt;

W kątowym przełożenia dokumentacji (https://angular-translate.github.io/docs/#/guide/19_security) one zalecamy skorzystanie „ucieczkę” jako wartość zdezynfekować strategia mówi: "Obecnie występuje problem z trybem odkażania, spowoduje on podwójne kodowanie znaków UTF-8 lub znaków specjalnych. Zalecenie: użyj strategii "escape", dopóki nie zostanie rozwiązana ".

Czy istnieje właściwy sposób, aby pokazać HTML jako <script>alert()</script> bez wykonywania go?

+0

znalazłem przy użyciu filtra ucieka poprawnie, ale nie uniknie tego rodzaju ataku: #/Korzystanie z dyrektywy będzie prawidłowo uciec {{{} „)));; alert (1) //”}.} ten rodzaj ataku, ale potem kończy się niepowodzeniem podczas ataku skryptów, który zilustrowałeś. Dla mnie jest to wielka dziura w bibliotece tłumaczeń. – Gurnard

Odpowiedz

0

z filtrem (rury) można zawsze wiążą się z elementów textContent właściwość tak:

<span [textContent]="vm.text | translate"></span>

Brak obsługi Cytowanie lub filtrowanie potrzebne, ponieważ nic nie jest nigdy w textContent analizowany AFAIK.

+0

w jakiej wersji kątowej to jest? – Gurnard