在 postMessage
处理程序中缺少来源验证¶
ID: js/missing-origin-check
Kind: problem
Security severity: 5
Severity: warning
Precision: medium
Tags:
- correctness
- security
- external/cwe/cwe-020
- external/cwe/cwe-940
Query suites:
- javascript-security-extended.qls
- javascript-security-and-quality.qls
"message"
事件用于在窗口之间发送消息。不受信任的窗口可以向受信任的窗口发送消息,接收方需要验证消息的合法性。执行此验证的一种方法是检查消息的 origin
,以确保它来自受信任的窗口。
建议¶
始终验证传入消息的来源。
示例¶
以下示例使用收到的消息来执行一些代码。但是,没有检查消息的来源,因此攻击者可能可以执行任意代码。
function postMessageHandler(event) {
let origin = event.origin.toLowerCase();
console.log(origin)
// BAD: the origin property is not checked
eval(event.data);
}
window.addEventListener('message', postMessageHandler, false);
下面的示例已修复,其中检查了来源是否受信任。因此,恶意用户无法使用不受信任的来源执行攻击。
function postMessageHandler(event) {
console.log(event.origin)
// GOOD: the origin property is checked
if (event.origin === 'https://www.example.com') {
// do something
}
}
window.addEventListener('message', postMessageHandler, false);