此问题涉及在MDN文档中使用网络工作者的example。
在整个这个例子中,有几个"随机查看"字符串用作键:" vo42t30"," rnb93qh"," bk4e1h0"," ktp3fm1",...
oWorker.onmessage = function (oEvent) {
if (oEvent.data instanceof Object && oEvent.data.hasOwnProperty("vo42t30") &&
oEvent.data.hasOwnProperty("rnb93qh")) {
oListeners[oEvent.data.vo42t30].apply(oInstance, oEvent.data.rnb93qh);
} else {
this.defaultListener.call(oInstance, oEvent.data);
}
};
使用此类字符串的理由是什么?
(我可以想象一些真实世界的代码可能会使用这种类型的字符串作为混淆形式,但是因为混淆像这个这样的教学示例是没有意义的,所以我认为必须有其他一些解释。)
或许更好的方法来表达这个问题:使用人类可读的字符串(例如" methodName")是否存在此类网络工作者密钥的问题?
答案 0 :(得分:0)
示例中的代码用于创建特殊类型的Web worker。
此特殊工作者检查消息是否有某个键,如果有,则工作人员以特殊方式处理该消息。
并非所有邮件都有此特殊密钥。应该正常处理没有该密钥的消息。例如,这种其他类型的消息可以具有以用户输入命名的键。
由于我们不知道常规消息会包含哪些密钥,并且我们必须确保常规消息不会使用我们的密钥,因此我们选择一个非常独特的密钥,在这种情况下是乱码,希望它不会被用作常规消息中的密钥。
这种方法的一个问题是,如果密钥来自用户输入,那么用户可以通过发送我们的胡言乱语作为输入来触发意外行为。