文章目录
安全相关的HTTP Response Header
- X-Frame-Options
- X-Content-Type-Options
- X-XSS-Protection
X-Frame-Options
X-Frame-Options响应头,可以阻止站点内的页面被其他页面嵌入从而防止点击劫持。
漏洞分析
点击劫持是一种视觉上的欺骗手段,攻击者使用一个透明的、不可见的iframe,覆盖在一个当前网页上。然后诱使用户在该网页上进行点击操作,此时用户在不知情的情况下点击了透明的iframe页面。如果用户恰好点击在iframe页面的一些功能性按钮上(如点赞按钮),就能达成攻击者想要的目的(获取点赞)。
解决方案与配置
使用 X-Frame-Options 有三个可选的值:
- DENY:浏览器拒绝当前页面加载任何Frame页面
- SAMEORIGIN:frame页面的地址只能为同源域名下的页面
- ALLOW-FROM:origin为允许frame加载的页面地址
一般来说,允许同源域名下加载的配置是较为合适的选择。
Nginx配置:
add_header X-Frame-Options SAMEORIGIN;
X-Content-Type-Options
X-Content-Type-Options响应头主要用来防止在IE9、chrome和safari中的MIME类型混淆攻击。
漏洞分析
互联网上的资源有各种类型,通常浏览器会根据响应头的Content-Type字段来分辨它们的类型。例如:”text/html”代表html文档,”image/png”是PNG图片。然而,有些资源的Content-Type是错的或者未定义。这时,某些浏览器会启用MIME-sniffing(嗅探)来猜测该资源的类型,解析内容并执行。这会让某些攻击者利用浏览器嗅探内容机制的漏洞,把有危害的文件伪装成能通过浏览器嗅探的类型,进行攻击。
解决方案与配置
通过设置 X-Content-Type-Options:nosniff 。如果content-type和期望的类型匹配,则不需要嗅探,只能从外部加载确定类型的资源。如果不匹配,那么返回的资源会被浏览器阻止加载。
Nginx配置:
add_header X-Frame-Options SAMEORIGIN;
X-XSS-Protection
X-XSS-Protection响应头设置了浏览器的XSS防护机制,明确地告诉浏览器XSS filter/auditor该如何工作。
漏洞分析
XSS跨站脚本攻击比较常见的漏洞,这里的介绍引用作者“那一叶随风”的文章《XSS跨站脚本攻击》,地址为:https://www.cnblogs.com/phpstudy2015-6/p/6767032.html
更加详细的关于XSS的介绍,请看上述文章。
解决方案与配置
XSS防护机制的目的都很简单,如果浏览器检测到了含有恶意代码的输入被呈现在HTML文档中,那么这段呈现的恶意代码要么被删除,要么被转义,恶意代码不会被正常的渲染出来,当然了,浏览器是否要拦截这段恶意代码取决于浏览器的XSS防护设置。
X-XSS-Protection 的字段有三个可选配置值:
- 0: 表示关闭浏览器的XSS防护机制
- 1:删除检测到的恶意代码, 如果响应报文中没有看到X-XSS-Protection 字段,那么浏览器就认为X-XSS-Protection配置为1,这是浏览器的默认设置
- 1; mode=block:如果检测到恶意代码,则不渲染恶意代码
我认为,设置为XSS-Protection: 1; mode=block是比较合适的。
设置为0,那么防护机制就没有;设置为1,则容易被恶意输入把正常代码或者防御代码给删除掉。
Nginx配置:
add_header X-XSS-Protection "1; mode=block"