2016-08-31 22 views
5

Trong dự án của tôi, tôi đang sử dụng 'escape' làm chiến lược giá trị vệ sinh. Và tôi đang sử dụng dịch chỉ thị (thuộc tính) ở một số nơi. Một số nơi khác tôi đang sử dụng bộ lọc dịch.XSS trong Chỉ thị Dịch Angular

Với Chỉ thị:

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

Đây là vulnarable để XSS. Nếu giá trị của vm.text<script>alert()</script> thì tập lệnh được thực thi và cửa sổ bật lên được hiển thị.

với Lọc:

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

Giá trị của vm.text đang trốn thoát và html được hiển thị như &lt;script&gt;alert()&lt;/script&gt;

Trong dịch tài liệu góc (https://angular-translate.github.io/docs/#/guide/19_security) họ khuyên bạn nên sử dụng 'thoát' như giá trị Sanitize chiến lược nói 'Hiện tại có sự cố với chế độ vệ sinh, nó sẽ mã hóa đôi ký tự UTF-8 hoặc ký tự đặc biệt. Đề xuất: sử dụng chiến lược 'thoát', cho đến khi giải pháp này được giải quyết '.

Có cách nào thích hợp để hiển thị html dưới dạng <script>alert()</script> mà không thực thi không?

+0

Tôi đã tìm thấy khi sử dụng bộ lọc nó thoát đúng cách nhưng sẽ không thoát khỏi loại tấn công này: #/{{{}. "))); Cảnh báo (1) //";}} Sử dụng chỉ thị sẽ thoát đúng cách loại tấn công này nhưng sau đó nó không thành công trên kịch bản tấn công mà bạn minh họa. Vì vậy, đối với tôi đây là một lỗ hổng lớn trong thư viện dịch. – Gurnard

Trả lời

0

Với bộ lọc (ống), bạn luôn có thể liên kết với các yếu tố textContent tài sản như sau:

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

Không tay thoát hoặc lọc cần thiết bởi vì không có gì trong textContent là bao giờ phân tích cú pháp afaik.

+0

Phiên bản góc này là gì? – Gurnard

Các vấn đề liên quan