Fotify掃描結果Open Redirection解決方案

GirlsBoy發表於2024-08-12

  URL任意跳轉漏洞,又叫開放重定向漏洞,是一種常見的安全漏洞。當訪問時用widow.href或者window.localtion指定跳轉地址時,會報此漏洞。

  網上的解決方案大致分為兩種。

  方法一:種是對跳轉URL進行加密,使用方法

        function validateURL(surl) {  
            var url = parseURL(surl);  
            var urlHostname = url.hostname.trim();  
  
            if (urlHostname == '') {  
                return true;  
            }  
            else {  
                if (urlHostname.toUpperCase() == location.hostname.trim().toUpperCase()) {  
                    return true;  
                }  
                else  
                    return false;  
            }  
        }  
  
        function parseURL(url) {  
            var a = document.createElement('a');  
            a.href = url;  
            return {  
                source: url,  
                protocol: a.protocol.replace(':', ''),  
                hostname: a.hostname,  
                host: a.host,  
                port: a.port,  
                query: a.search,  
                params: (function () {  
                    var ret = {},  
                        seg = a.search.replace(/^\?/, '').split('&'),  
                        len = seg.length, i = 0, s;  
                    for (; i < len; i++) {  
                        if (!seg[i]) { continue; }  
                        s = seg[i].split('=');  
                        ret[s[0]] = s[1];  
                    }  
                    return ret;  
                })(),  
                file: (a.pathname.match(/\/([^\/?#]+)$/i) || [, ''])[1],  
                hash: a.hash.replace('#', ''),  
                path: a.pathname.replace(/^([^\/])/, '/$1'),  
                relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [, ''])[1],  
                segments: a.pathname.replace(/^\//, '').split('/')  
            };  
        } 

  此方法參考連結https://www.c-sharpcorner.com/article/preventing-open-redirection-attacks-in-c-sharp-and-javascript/

  方法二:修改方案為模擬a標籤點選跳轉,同時也需要對URL進行加密處理可生效。

function createAElement(url) {
    let a = document.createElement('a')//建立一個a標籤
    let urlObj = new URL(url, window.location.href);
    let href = (encodeUrlParams(urlObj));
    a.setAttribute("href", href);
    a.setAttribute('target', "_self")//設定target屬性,_blank開啟新標籤,_self在本標籤開啟// 模擬點選事件
    a.click();
    document.body.appendChild(a);
    a.remove();
}
function encodeUrlParams(url) {
    // 解析 URL
    let urlObj = new URL(url);
    // 獲取查詢引數
    let params = new URLSearchParams(urlObj.search);
    // 遍歷查詢引數
    for (let [key, value] of params.entries()) {
        params.delete(key);
        params.set(encodeURIComponent(key), encodeURIComponent(value));
    }
    // 更新 URL 的查詢部分
    urlObj.search = params.toString();
    // 返回更新後的 URL
    return urlObj.href;
}

  使用方法二的處理方案,成功解決了fotify掃描的問題。

相關文章