我有个网站,我的服务器怎么判断别人是不是通过iframe嵌入的方式来访问我网站的资源
要判断是否通过 iframe 嵌入的方式来访问网站资源,可以通过检查请求头中的 Referer 和 X-Frame-Options 字段来实现。具体方法如下:
1.检查请求头中的 Referer 字段,如果该字段的值为空或者不是同域的,那么就可以判断这个请求是通过 iframe 嵌入的方式来访问的。。。
2.使用 X-Frame-Options 字段来限制页面是否可以被嵌入到 iframe 中。如果 X-Frame-Options 字段的值为 DENY,则表示该页面不允许被任何页面嵌入到 iframe 中;如果 X-Frame-Options 字段的值为 SAMEORIGIN,则表示该页面只能被同域页面嵌入到 iframe 中。
在 Nginx 中,可以通过配置 X-Frame-Options 来限制页面是否可以被嵌入到 iframe 中,具体方法如下:
add_header X-Frame-Options SAMEORIGIN;
此配置将会在 HTTP 响应头中添加 X-Frame-Options 字段,并设置其值为 SAMEORIGIN,表示该页面只能被同域页面嵌入到 iframe 中。
另外,还可以使用 JavaScript 在页面加载时检查自身是否被嵌入到 iframe 中,具体方法如下:
if (self !== top) {
// 页面被嵌入到 iframe 中
} else {
// 页面未被嵌入到 iframe 中
}
该代码中,self 表示当前页面的 window 对象,top 表示最顶层的 window 对象。如果两者不相等,则说明当前页面被嵌入到 iframe 中。
浏览器如何给<script>标签请求的资源加refer
浏览器默认会为 <script>
标签发起的资源请求加上 Referer
头部信息,该头部信息会包含当前页面的 URL 作为请求来源。但是,如果资源是通过 HTTPS 请求的,则浏览器不会将来源信息发送给服务器,这是浏览器的安全机制。
需要注意的是,如果在页面中使用了 Content Security Policy (CSP) ,那么 CSP 中定义的规则可能会限制或禁止某些请求来源。
找出注入的非window原生属性
const iframe = document.createElement("iframe");
document.body.appendChild(iframe);
const originWindow = iframe.contentWindow;
const currentWindow = window;
const extendAttr = {};
for (const key of Object.keys(currentWindow)) {
if (originWindow[key] === undefined) {
extendAttr[key] = currentWindow[key];
}
}
console.log(
`origin window: ${Object.keys(originWindow).length}, current window: ${Object.keys(
currentWindow
).length}, extentAttr: ${Object.keys(extendAttr).length}`
);
console.log("extendAttr:", extendAttr);