실용적인 접근 방법입니다. 이론적으로 (이것이 관련이 있는지 없는지, 예를 들어 취약성을 제공하는지는 확실하지 않음) 매우 쉽게 스푸핑 될 수 있습니다. 나는 당신의 맥락에 얼마나 관련이 있는지에 달려 있다고 생각합니다.
여기에 약간 강한 생각 : AFAIK 객체가 함수가 될 필요와 가진 이후가 약간 더 강한 있지만,
if (chrome &&
chrome.windows &&
chrome.windows.get &&
typeof chrome.windows.get === 'function' &&
chrome.windows.get.toString() === 'function get() { [native code] }')
아이디어는 당신과 동일 그것의 toString()
값은 이후 그 값이 불가능있다 유효한 구문이 아니므로 네이티브 코드 (완전히 다른 수준의 해커가 필요함)를 변경하지 않으면 해당 값을 스푸핑하려고해도 작동하지 않습니다.
위와 같은 사항을 확인하는 데 사용 권한이 필요한지 여부를 기억하지 마십시오. 그러나 아이디어는 분명합니다.
UPDATE는
난 그냥 "네이티브 코드"구문 아이디어는 기존의 기능을 앨리어싱에 의해, 속지 될 수 있다는 것을 깨달았다. 예 :
var FakeFn = Object.create;
FakeFn.toString(); // "function create() { [native code] }"
하지만 문자열에 이름이 표시되므로 사용하는 기능을 신중하게 선택하여 처리 할 수 있습니다. get
이 너무 일반적이지만, 크롬 확장으로 만 구현되는 애매한 함수 이름 (예 : captureVisibleTab
:)을 취하면 다른 로컬 사용자가 코드를 속일 수있는 기본 체크와 달리 매우 휴대하기 쉬운 솔루션입니다 코드는 브라우저가이 이름으로 기본 함수를 구현하지 않는다는 것을 미리 알기 때문에 모든 브라우저와 모든 사용자 코드에서 여전히 안전합니다.
@Mathew는 지적 UPDATE
,이 아이디어는 (비록 겉으로 만 악의적으로) foolable입니다. Function.prototype.toString
과 비교하여 문제를 패치 할 수 있다고 생각했지만 원래 toString
메서드의 별칭을 지정하여 속일 수 있고 특정 함수에 대해 false 문자열을 반환하고 다른 문자열은 원래 문자열을 반환하는 새 함수를 만드는 것으로 생각했습니다.
결론적으로, 내 생각은 의도하지 않은 충돌의 가능성을 거의 배제 할 것이라고 생각했지만 (OP의 아이디어보다 약간), 처음에는 생각한대로 악의적 인 공격에 대한 방어력은 분명하지 않습니다. 그것은 수 있습니다.
You co 확장 상태를 확인하는 것이 의도 된 목적은 아니지만 uld를 사용해 국제화 된 문자열을 가져 오십시오. http://code.google.com/chrome/extensions/i18n.html –