W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
1.12.1【必須】限定跳轉(zhuǎn)目標地址
<script>location.href=__Redirection_URL__</script>
// 使用express實現(xiàn)的登錄成功后的回調(diào)跳轉(zhuǎn)頁面
// bad: 未校驗頁面重定向地址
app.get("/login", (req, res) => {
// 若未登錄用戶訪問其他頁面,則讓用戶導向到該處理函數(shù)進行登錄
// 使用參數(shù)loginCallbackUrl記錄先前嘗試訪問的url,在登錄成功后跳轉(zhuǎn)回loginCallbackUrl:
const { loginCallbackUrl } = req.query;
if (loginCallbackUrl) {
res.redirect(loginCallbackUrl);
}
});
// good: 白名單限定重定向地址
function isValidURL(sUrl) {
return !!((/^(https?:\/\/)?[\w\-.]+\.(qq|tencent)\.com($|\/|\\)/i).test(sUrl) || (/^[\w][\w/.\-_%]+$/i).test(sUrl) || (/^[/\\][^/\\]/i).test(sUrl));
}
app.get("/login", (req, res) => {
// 若未登錄用戶訪問其他頁面,則讓用戶導向到該處理函數(shù)進行登錄
// 使用參數(shù)loginCallbackUrl記錄先前嘗試訪問的url,在登錄成功后跳轉(zhuǎn)回loginCallbackUrl:
const { loginCallbackUrl } = req.query;
if (loginCallbackUrl && isValidUrl(loginCallbackUrl)) {
res.redirect(loginCallbackUrl);
}
});
// good: 白名單限定重定向地址,通過返回html實現(xiàn)
function isValidURL(sUrl) {
return !!((/^(https?:\/\/)?[\w\-.]+\.(qq|tencent)\.com($|\/|\\)/i).test(sUrl) || (/^[\w][\w/.\-_%]+$/i).test(sUrl) || (/^[/\\][^/\\]/i).test(sUrl));
}
app.get("/login", (req, res) => {
// 若未登錄用戶訪問其他頁面,則讓用戶導向到該處理函數(shù)進行登錄
// 使用參數(shù)loginCallbackUrl記錄先前嘗試訪問的url,在登錄成功后跳轉(zhuǎn)回loginCallbackUrl:
const { loginCallbackUrl } = req.query;
if (loginCallbackUrl && isValidUrl(loginCallbackUrl)) {
// 使用encodeURI,過濾左右尖括號與雙引號,防止逃逸出包裹的雙引號
const redirectHtml = `<script>location.href = "${encodeURI(loginCallbackUrl)}";</script>`;
res.end(redirectHtml);
}
});
關(guān)聯(lián)漏洞:中風險 - 任意URL跳轉(zhuǎn)漏洞
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: