Vâng, nó không phải là một số nguy cơ bảo mật lớn, mặc dù nó cho thấy một số can thiệp tiềm năng ít nhất.Không phải là JavaScript setTimeout và setInterval có một số lỗ hổng bảo mật tiềm năng
Giả sử chúng tôi có các mô-đun JavaScript được đóng rất tốt được tải vào trang của tôi mà không biết về nhau. Họ là từ "đáng tin cậy" tuy nhiên một số nhà phát triển trong lib2 đã thực hiện một sai lầm, xem mã.
Lib1http://good.site/libs/the-famous-important-lib1.js
setInterval(function(){
alert('I am doing some important stuff');
}, 1000);
Lib2http://not-excelent.site/libs/the-cool-lib2.js
var i = setInterval(function(){}, 0);
for(; i >= 0; i-=1) {
clearInterval(i);
}
Html My
<script src="http://good.site/libs/the-famous-important-lib1.js" type="text/javascript"></script>
<script src="http://not-excelent.site/libs/the-cool-lib2.js" type="text/javascript"></script>
Trong trình duyệt hoặc ít nhất là trên Firefox, Loading Lib2 sẽ thực sự phá hỏng Lib1 hoàn toàn. Một số người có thể nói điều này là không quan trọng, và làm thế nào ngớ ngẩn để làm cho sai lầm như vậy.
Tôi coi đó là hành vi xấu. Vì chúng tôi đang tải nhiều hơn và nhiều hơn nữa libs bên thứ 3 trong các trang web của chúng tôi. Có thể một giải pháp thích hợp là setInterval
và setTimeout
sẽ trả về một Ojbect thực sự độc đáo và không thể thay thế được, thay vì chỉ là số tự động tăng số.
Ai đó có thể cam kết với việc khai thác thực tế cho điều này (vẫn không kiểm tra nếu nó là khung hình chéo, tôi nghi ngờ nó thực sự).
Câu hỏi đặt ra là: Có phải không? và chế độ nghiêm ngặt trong es5 có vượt qua điều đó không?
xóa các thiết lập của người khác? Chắc chắn nó sẽ phá vỡ mọi thứ, nhưng không có gì thảm khốc có thể xảy ra. –
giải pháp dễ dàng .. không sử dụng mã người khác rác;) – musefan
@SergioTulentsev Tôi tuy nhiên đã thấy một trang web có paywall được _triggered_ bởi một 'setTimeout()'. Nếu bộ đếm thời gian đó bị xóa, khách hàng không trả tiền sẽ không bị loại bỏ. Hoàn toàn thiết kế bảo mật _lousy_ ... – Alnitak