Thực tế đó là một cách tiếp cận tốt. Về mặt lý thuyết (không chắc chắn nếu điều này có liên quan hay không, ví dụ như có thể cung cấp các lỗ hổng) nó có thể được giả mạo rất dễ dàng. Tôi cho rằng nó phụ thuộc vào ngữ cảnh của bạn.
Dưới đây là một ý tưởng hơi mạnh:
if (chrome &&
chrome.windows &&
chrome.windows.get &&
typeof chrome.windows.get === 'function' &&
chrome.windows.get.toString() === 'function get() { [native code] }')
Ý tưởng là giống như bạn, mặc dù nó hơi mạnh hơn, kể từ AFAIK có một đối tượng là một chức năng và có nó toString()
giá trị có giá trị đó là không thể vì nó không hợp lệ cú pháp, vì vậy ngay cả khi cố gắng giả mạo giá trị đó sẽ không hoạt động trừ khi bạn thay đổi mã gốc (yêu cầu cấp độ hoàn toàn khác của hacker).
Đừng quên nếu kiểm tra những thứ như thế này yêu cầu quyền hay không, nhưng ý tưởng rõ ràng là tôi hy vọng.
CẬP NHẬT
Tôi chỉ nhận ra rằng "có nguồn gốc mã" cú pháp ý tưởng có thể bị lừa, bởi aliasing một chức năng hiện có. Ví dụ.
var FakeFn = Object.create;
FakeFn.toString(); // "function create() { [native code] }"
Nhưng có thể được quan tâm bằng cách chọn cẩn thận chức năng chúng tôi sử dụng, vì tên xuất hiện trong chuỗi. get
có lẽ là quá phổ biến, nhưng nếu chúng ta có một tên hàm tối nghĩa (như captureVisibleTab
của) được triển khai chỉ trong phần mở rộng chrome, nó vẫn là một giải pháp rất di động, vì không giống như kiểm tra cơ bản nơi mã có thể bị lừa bởi người dùng cục bộ khác mã, nó được biết trước rằng các trình duyệt không thực hiện bất kỳ chức năng gốc với tên này, do đó, nó vẫn an toàn trong tất cả các trình duyệt và với tất cả các mã người dùng.
CẬP NHẬT
Như @Mathew chỉ ra, ý tưởng này là foolable (mặc dù dường như chỉ cố). Tôi nghĩ rằng tôi có thể vá vấn đề bằng cách so sánh với Function.prototype.toString
nhưng thấy rằng thậm chí có thể bị lừa bằng cách đánh dấu phương thức gốc toString
và tạo một phương thức mới cho một số hàm trả về chuỗi sai và cho các hàm khác trả về chuỗi gốc.Tóm lại, ý tưởng của tôi hơi mạnh hơn bản gốc, trong đó nó sẽ loại trừ tất cả khả năng xảy ra va chạm không chủ ý (hơi hơn ý tưởng của OP), nhưng chắc chắn không phòng thủ chống lại một cuộc tấn công nguy hiểm như tôi nghĩ lúc đầu có thể là.
Bạn đồng hãy thử và nhận các chuỗi được quốc tế hóa, mặc dù việc kiểm tra trạng thái tiện ích mở rộng không phải là mục đích dự định của nó: http://code.google.com/chrome/extensions/i18n.html –