比如 XMLHttpRequest,有没有什么手段可以知道这个东西有没有被人为重写?
网站找了不少方法都做不到
下面是我做的一些尝试,这些检测方法都能被绕过
{
function isNative(api) {
return /native code/.test(api.toString()) && typeof api !== 'undefined'
}
let test = function (input, fake) {
console.log("------------------------")
console.log("是否是伪造:", fake)
console.log("toString:", input.toString())
console.log("toString.toString:", input.toString)
console.log("prototype 方法", input.hasOwnProperty("prototype"))
console.log("toString.call","方法",Function.prototype.toString.call(input))
console.log("网传最不靠谱方法:isNative", isNative(input))
}
test(XMLHttpRequest, false)
{
let XMLHttpRequest = function () {
"[native code]"
}
XMLHttpRequest.toString = function () {
return "function XMLHttpRequest() { [native code] }"
}
let toString = function () {
return "function toString() { [native code] }"
}
toString.toString = toString
XMLHttpRequest.toString.toString = toString
Function.prototype.toString = toString
delete XMLHttpRequest.prototype
test(XMLHttpRequest, true)
// XMLHttpRequest.prototype = undefined
// test(XMLHttpRequest, true)
}
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.