Tôi có một phím dịch thực sự là một mã HTML, cả hai đều được mã hóa cũng như không được mã hóa.Hướng dịch trực tiếp vs bộ lọc: XSS có thể thực hiện được không?
$scope.translations = {
"html_code" : "<script>alert('Alert!');</script>",
"html_code_full" : "<script>alert('Alert!');</script>",
"greeting" : "Welcome!"
}
Khi tôi sử dụng những giá trị này để hiển thị văn bản dịch trong quan điểm, tôi sử dụng hai phương pháp:
- Như chỉ
<span translate>{{translations.html_code}}</span>
- Như lọc
{{translations.html_code|translate}}
tôi cố gắng cùng cho translations.html_code_full
. Dưới đây là đoạn code để xem:
translations.html_code = {{translations.html_code|translate}}
translations.html_code = <span translate>{{translations.html_code}}</span>
translations.html_code_full = {{translations.html_code_full|translate}}
translations.html_code_full = <span translate>{{translations.html_code_full}}</span>
Đây là sản phẩm tôi nhận được:
translations.html_code = <script>alert('Alert!');</script>
translations.html_code = <script>alert('Alert!');</script>
translations.html_code_full = <script>alert('Alert!');</script>
translations.html_code_full =
Vì nó là rõ ràng rằng việc thực hiện chỉ thị được mã hóa khóa dịch sang HTML, nhưng bộ lọc không phải là. Tại sao sự khác biệt này trong đầu ra giữa triển khai chỉ thị vs bộ lọc? Và tại sao tôi không nhận được cảnh báo nếu nó hiển thị HTML?
Here is the plunk Tôi đã tạo bản trình diễn.
Đó chính xác là những gì tôi đang cố gắng làm. Trong một ứng dụng web khác, tôi có thể nhận được cảnh báo, nhưng bằng cách nào đó tôi không thể tái tạo trong bản trình diễn. Tôi chỉ muốn biết cách * an toàn hơn * để sử dụng dịch bộ lọc vs chỉ thị, để ngăn chặn XSS. –
Một nơi tốt để bắt đầu là [Hướng dẫn dành cho nhà phát triển AngularJS - Bảo mật] (https://docs.angularjs.org/guide/security). Sau đó xem [Tham khảo API AngularJS $ sce] (https://docs.angularjs.org/api/ng/service/$sce). SCE hỗ trợ viết mã theo cách (a) được bảo mật theo mặc định và (b) kiểm tra các lỗ hổng bảo mật như XSS, nhấp chuột, vv dễ dàng hơn rất nhiều. – georgeawg
tôi có cùng một vấn đề. tôi có thể tái tạo một tấn công css cục bộ trong ứng dụng của tôi với dịch TRỰC TIẾP trong khi bộ lọc có vẻ an toàn - nhưng nếu tôi cố gắng tạo một plunkr phản ánh vấn đề này thì css không hoạt động và tập lệnh được lọc ra chính xác. đã thử phiên bản 2.8.1 và 2.9.0 của ng-dịch. đã thử các chiến lược vệ sinh khác nhau, nhưng cũng không hiệu quả. tôi tự hỏi nếu có một lỗ hổng bảo mật cho các dịch chỉ thị ra khỏi đó. –