威势网络,为您的企业和团队注入互联网活力!
服务热线:138-9741-0341

[原创]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协议引起的,那是另一个问题,与这个没关系了。问题已完全解决。


下拉加载更多评论
最新评论
暂无!