[原创]X-Frame-Options ALLOW-FROM 无效
发布日期:2022/8/30 作者:
浏览:994
这个特性主要是为了防止黑客对网站XSS攻击,伪造一个假的iframe欺骗客户点击或提交数据,从而获得敏感数据的。但是搞不好,会将本网站的IFRAME也会屏蔽掉,非常讨厌。如下的代码就会出现这个问题。
context.HttpContext.Response.Headers.Add("X-Frame-Options", "allow-from http://zj.qhwins.com");
//同时,这种写法在Edge浏览器中报如下错误
谷歌浏览器较新版不支持ALLOW-FROM,我们更好的写法是将允许的站点添加进去,如下所示
app.Use(async (context, next) =>
{
context.Response.Headers.Add("X-Frame-Options", "ALLOW-FROM http://localhost:8080 http://localhost:8088");
await next();
});
其实以上是老式淘汰的写法,用以下新的方法代替
//解决iframe安全问题
app.Use(async (context, next) =>
{
string host= context.Request.Host.Host+context.Request.Host.Port;
context.Response.Headers.Add("Content-Security-Policy", "frame-ancestors *."+host+":80 "+host+":*;");
await next();
});
注意:如果只放新式的,可能安全扫描器依然会报警,如下图:
可以将两个同时放上,
//解决iframe安全问题 app.Use(async (context, next) => { try { string host = context.Request.Host.Host; var kv = new KeyValuePair<string,Microsoft.Extensions.Primitives.StringValues>("X-Frame-Options", "ALLOW-FROM http://"+host+":*"); if (context.Response.Headers.Contains(kv)==false) { context.Response.Headers.Add(kv); } kv = new KeyValuePair<string, Microsoft.Extensions.Primitives.StringValues>("Content-Security-Policy", "frame-ancestors *."+host+":* "+host+":*;"); if (context.Response.Headers.Contains(kv)==false) { context.Response.Headers.Add(kv); } } catch (Exception ex) { throw new Exception(ex.Message+ex.InnerException); } await next(); });
放上以后在浏览器中打开URL请求,查看报文,有以下返回
注意,Response Header中多了两行:
Content-Security-Policy 和 X-Frame-Options
现在同域名下iframe已经可以打开了,安全扫描器也不报警了,安全扫描结果如下:
另一个Session Cookie without Secure flag set 安全警告则是因为没有使用HTTPS协议引起的,那是另一个问题,与这个没关系了。问题已完全解决。
下拉加载更多评论