2010-08-16 17 views
12

nếu tôi không nhầm eval thực thi mã hợp lệ trong một chuỗi cho trướcTại sao mọi người nói rằng javascript eval() là điều ác nhưng bạn không nhận được phản đối nào đối với setTimeout và setInterval etc?

eval("alert('hey')"); 

setTimeout("alert('hey')",1000); 

không chỉ là về những điều tương tự, chỉ với một bộ đếm thời gian. được đặt thời gian chờ chỉ là rủi ro như eval?

+3

Câu hỏi :) Và tôi đoán câu trả lời là có More đây http://stackoverflow.com/questions/197769/when-is-javascripts-eval-not- ác – mplungjan

Trả lời

20

Tôi muốn nói rằng bạn nghe thấy những phản đối tương tự. setTimeout (với chuỗi và không tham số chức năng) là khá nhiều giống như eval.

Nếu có thể,

setTimeout(function(){ alert ("hey") ; }, 1000); 
+0

Không có lý do gì không thể là –

+8

+1 để cung cấp một ví dụ về việc sử dụng đúng 'setTimeout'. Khả năng vượt qua đối số chuỗi có thể gây hại nhiều hơn là cách mọi người sử dụng javascript –

+0

+1 Có vẻ như mã của tôi cần một số thay đổi bảo mật;) cảm ơn, hmm Tôi không biết chính xác rằng bạn có thể sử dụng timeouts theo cách này cũng như hmmm –

4

Vì khi mọi người nói "eval", nghĩa là "eval và bất kỳ hàm nào tương đương với eval", nhưng trước đây ngắn hơn nhiều. Vì vậy, câu trả lời cho câu hỏi của bạn là có, nó là nguy hiểm.