-
同源策略
根据mdn文档,可以总结出同源策略的规则
-
同协议
http,https,不同协议不视作同源
-
同域名
域名必须完全相同
-
同端口
端口必须完全相同
-
同源策略的在浏览器中体现就是,对于限制一个源的文档或脚本如何与另一个源的资源进行交互,简单来说就是一个网站无法访问另一网站的内容
- 同源豁免
可以利用部分标签的同源豁免来完成跨域的访问例如
- 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. 的错误,如果暂时关闭安全链接,则效果如下
