1. 同源策略

    根据mdn文档,可以总结出同源策略的规则

    • 同协议

      http,https,不同协议不视作同源

    • 同域名

      域名必须完全相同

    • 同端口

      端口必须完全相同

同源策略的在浏览器中体现就是,对于限制一个源的文档或脚本如何与另一个源的资源进行交互,简单来说就是一个网站无法访问另一网站的内容

  1. 同源豁免

可以利用部分标签的同源豁免来完成跨域的访问例如

  • img
  • link
  • script
  • iframe
  • video

这些标签可以移动程度上获取不同源的资源

内网探测

<!DOCTYPE html>
<html>
<head>
    <title>Fetch Scanner</title>
</head>
<body>
    <h1>Fetch-based Network Scanner</h1>
    <div id="results"></div>

    <script>
        const resultsDiv = document.getElementById('results');
        function scan(onOpen, timeout = 3000) {
            // 遍历 1 到 254
            for (let i = 1; i < 255; i++) {
                const ip = `192.168.1.${i}`;
                const controller = new AbortController();
                const timeoutId = setTimeout(() => controller.abort(), timeout);

                fetch(`http://${ip}:8000`, {
                    mode: 'no-cors',
                    cache: 'no-store',
                    // 使用 controller.signal
                    signal: controller.signal
                })
                .then(() => {
                    // 请求成功=
                    onOpen(ip);
                })
                .catch(() => {
                    // 捕获所有错误
                })
                .finally(() => {
                    // 清除定时器,防止在请求成功后还执行 abort
                    clearTimeout(timeoutId);
                });
            }
        }

        // --- 使用示例 ---
        console.log("扫描开始...");
        scan(ip => {
            const resultText = `[+] 发现开放主机: ${ip}<br>`;
            console.log(resultText.replace('<br>', ''));
            resultsDiv.innerHTML += resultText;
        });
    </script>
</body>
</html>

这是一个简单示例,关键在于使用mode: 'no-cors’ 来实现绕过同源策略,但他还有一个问题就是,其无法在https的网站上使用会报告Mixed Content: The page at '<URL>' was loaded over HTTPS, but requested an insecure resource '<URL>'. This request has been blocked; the content must be served over HTTPS. 的错误,如果暂时关闭安全链接,则效果如下