2012-06-14 40 views
9

Với mã JavaScript này (mà chỉ là một bình luận đề cập đến một url):JSLint suy giảm "comment nguy hiểm"

// see http://enterprisejquery.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-1/ 

JSLint với "Safe tập hợp con" bật sẽ nói

Dangerous comment. 
// http://enterprisejquery.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-1/ 

thế nào một lời bình có nguy hiểm không? Nhận xét, theo định nghĩa, không được phân tích cú pháp! Hoặc là họ?

Chỉnh sửa: Sử dụng url khác không nhất thiết là nguy hiểm. Ví dụ:

// http://enterprisejquery.com 

không kích hoạt cờ. Làm cách nào để một URL trong nhận xét có thể là 'nguy hiểm', nhưng một URL khác thì không?

Trả lời

3

ý kiến ​​"nguy hiểm" phù hợp với biểu thức chính quy:

/@cc|<\/?|script|\]\s*\]|<\s*!|&lt/i 

Trong trường hợp này, nhận xét của bạn là "nguy hiểm" vì nó có chứa chuỗi "kịch bản".

Tôi nghĩ điều này có thể là dương tính giả.

+0

Bạn nói đúng - đây là [script block paranoia] (http://stackoverflow.com/questions/1474185/what-does-this-mean-document-writescript). Wow, tôi muốn jslint sẽ chỉ nói điều đó. – paleozogt

+0

btw, chỉ cần thực hiện '// script' sẽ kích hoạt nó. Hoặc trong ví dụ câu hỏi, thay thế 'javascript' bằng 'foo' làm cho lỗi biến mất. – paleozogt

2

Bạn có thể thực hiện ý kiến ​​bằng tay sử dụng eval:

http://googlecode.blogspot.com/2009/09/gmail-for-mobile-html5-series-reducing.html

Để kết hợp tất cả các module thành một nguồn duy nhất, chúng tôi đã viết mỗi module vào một thẻ script riêng và giấu các mã bên trong một khối bình luận (/ * * /). Khi tài nguyên đầu tiên tải, không có mã nào được phân tích cú pháp vì nó được nhận xét. Để tải mô-đun, hãy tìm phần tử DOM cho thẻ tập lệnh tương ứng, loại bỏ khối nhận xét và eval() mã .

Ngoài ra, ai đó vô tình có thể bỏ ghi chú mã nguy hiểm và tạo lỗ hổng bảo mật.

Theo mặc định, không, nhận xét JavaScript không được phân tích cú pháp. Nhưng không có một điều tốt đẹp để có nằm xung quanh.

+0

JSLint không nghĩ rằng tất cả các URL trong nhận xét đều nguy hiểm, tho. Tôi đã chỉnh sửa câu hỏi của mình để hiển thị điều này. Tại sao một số URL lại nguy hiểm nhưng những URL khác lại không? – paleozogt

+0

Ngoài ra, vì nhận xét _không thực sự javascript_, làm thế nào nó có thể nguy hiểm? Sẽ không phải là eval chỉ thất bại? – paleozogt

+0

Câu hỏi hay. Tôi đoán Samuel đã trả lời câu hỏi đó. Nhưng câu trả lời của anh chỉ đặt ra một câu hỏi khác về lý do tại sao regex đó thực sự được coi là nguy hiểm. –

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