是保护覆盖原生Date对象的方法吗?或检测执行环境是否已更改?
例如,某人破解我的代码并覆盖日期,如下所示:
function Date() {
this.getMonth = function() {
return 13;
};
}
提前感谢!
答案 0 :(得分:1)
是的,你可以做一些事来保护内置插件;但是没有,你无法阻止用户控制浏览器的黑客攻击。他们可以做任何他们想要的事情。添加任何代码来保护内置函数并不会阻止它们在运行代码之前使用代码来破坏保护内置函数的尝试。
由于用户只能以这种方式影响自己,所以不要担心。
请记住基本规则:您不能信任客户发送给您的任何信息。验证服务器端的所有内容。 “客户”甚至可能不是网络浏览器;有人可能会向您发送自定义的HTTP消息。
答案 1 :(得分:0)
您无法阻止其他脚本覆盖客户端的全局对象。
但如果您怀疑第三方脚本可能会这样做,您可以创建Date
的本地引用并改为使用它:
var mySuperSecretObject = Date;
var today = new mySuperSecretObject();
var month = today.getMonth();
当然,如果第三方脚本在之前执行运行,那么您的脚本可能无法获得正确的Date
对象以及您的新对象({{1} })也不会按预期工作。在这种情况下,你无能为力。