HTTP报文头—安全问题
Mirror王宇阳
2019-10-01
参考:MDN技术文档;《http头安全相关的选项_by`myh0st》
认识HTTP协议
https://www.cnblogs.com/wangyuyang1016/p/10421073.html
HTTP是一个可扩展的协议~
X-Frame-Options:
X-Frame-Options HTTP响应头是用来给浏览器 指示允许一个页面 可否在
或者
中展现的标记。站点可以通过确保网站没有被嵌入到别人的站点里面,从而避免 点击劫持攻击。
frame标签:框架标签,放置一个HTML文档(页面)
iframe标签:内联框架标签,在一个HTML页面中显示(插入)另一个HTML页面
embed标签:音频元素标签,插入一个音频元素
object标签:定义外部内容的容器标签
语法:
DENY:表示该页面不允许在frame中展示,即便在相同域名的页面中嵌套也不可以。
SAMEORLGIN:表示该页面可以在相同域名页面的frame中展示
ALLOW - FROM:表示该页面可以在指定来源的frame中展示
如果设置DENY,该页面在任何地方的frame中都无法加载;设置SAMEORLGIN那么就可以在同域名页面中的frame标签中嵌套并加载该页面
配置Web容器:
- 配置Apache,所有页面上发送
X-Frame-Options
响应头,需要在site
中配置如下:
Header always append X-Frame-Options SAMEORLGIN
- 配置Nginx,所有页面上发送
X-Frame-Options
响应头,在http
,server
或者location
p配置中添加:
add_header X-Frame-Options SAMEORLGIN;
- 配置IIS,在Web.config文件中添加:
*具体的技术文档请参考:MDN_X-Frame-Options
MDN Web Docs 是一个提供 Web 技术和促进 Web 技术软件的不断发展的学习平台,包括:
- Web 标准(例如:CSS、HTML 和 JavaScript)
- 开放 Web 应用开发
- Firefox 附加组件开发
X-Content-Type-Options:
X-Content-Type-Options HTTP响应首部相当于一个提示标志,服务器用来提示客户端一定要遵循在 Content-Type
首部中对 MIME 类型 的设定,而不能对其进行修改。这就禁用了客户端的 MIME 类型嗅探(防止用户修改MIME上传非法文件类型或利用解析来执行JavaScript……)行为,换句话说,也就是意味着网站管理员确定自己的设置没有问题。
通过X-Content-Type-OptionsHTTP响应头可以禁止浏览器的类型猜测行为;
- 语法:
X-Content-Type-Options:nosniff
指令:(nosniff是固定的)
nosniff:(下面两种情况会被禁止)
请求类型
style
但是MIME类型不是text/css
请求类型
script
但是MIME类型不是application/x-javascript
Access-Control-Allow-Origin:
Access-Control-Allow-Origin
响应头指定了该响应的资源是否被允许与给定的origin共享。跨原始资源共享(CORS)允许网站在它们之间共享内容,为了使网站之间安全的跨域获取资源,可以通过设置Access-Control-Allow-Origin
来允许指定网站来跨域获取本地资源。
当目标页面的
response
中包含Access-Control-Allow-Origin
这个header,并且value有对方的域名,浏览器才允许目标获取页面的数据。
只允许”10.10.10.10“访问自己本地资源
Access-Control-Allow-Origin: http://10.10.10.10
语法
Access-Control-Allow-Origin: * Access-Control-Allow-Origin:
指令
*
对于不需具备凭证(credentials)的请求,服务器会以“
*
”作为通配符,从而允许所有域都具有访问资源的权限。指定一个可以访问资源的URL。
X-XSS-Protection:
HTTP X-XSS-Protection 响应头是Internet Explorer,Chrome和Safari的一个功能,当检测到跨站脚本攻击 (XSS)时,浏览器将停止加载页面。虽然这些保护在现代浏览器中基本上是不必要的,当网站实施一个强大的Content-Security-Policy
来禁用内联的JavaScript ('unsafe-inline'
)时, 他们仍然可以为尚不支持 CSP 的旧版浏览器的用户提供保护。
CSP:内容安全策略
用于检测和减轻用于Web站点的特定类型的攻击,例如XSS和SQL注入;基于
Content-Security-Policy
实现策略
语法:
X-XSS-Protection: 0 X-XSS-Protection: 1 X-XSS-Protection: 1; mode=block X-XSS-Protection: 1; report=
0
禁止XSS过滤。
1
启用XSS过滤(通常浏览器是默认的)。 如果检测到跨站脚本攻击,浏览器将清除页面(删除不安全的部分)。
1;mode=block
启用XSS过滤。 如果检测到攻击,浏览器将不会清除页面,而是阻止页面加载。
1; report=
(Chromium only) 启用XSS过滤。 如果检测到跨站脚本攻击,浏览器将清除页面并使用CSP
report-uri
指令的功能发送违规报告。
HTTP Strict Transport Security(HSTS):
HTTP Strict Transport Security
(通常简称为HSTS)是一个安全功能,它告诉浏览器只能通过HTTPS访问当前资源,而不是HTTP。
一个网站接受一个HTTP的请求,然后跳转到HTTPS,用户可能在开始跳转前,通过没有加密的方式和服务器对话,比如,用户输入http://foo.com或者直接foo.com。
这样存在中间人攻击潜在威胁,跳转过程可能被恶意网站利用来直接接触用户信息,而不是原来的加密信息。
网站通过HTTP Strict Transport Security通知浏览器,这个网站禁止使用HTTP方式加载,浏览器应该自动把所有尝试使用HTTP的请求自动替换为HTTPS请求。
注意: Strict-Transport-Security
在通过 HTTP 访问时会被浏览器忽略; 因为攻击者可以通过中间人攻击的方式在连接中修改、注入或删除它. 只有在你的网站通过HTTPS访问并且没有证书错误时, 浏览器才认为你的网站支持HTTPS 然后使用 Strict-Transport-Security
的值 .
语法:
Strict-Transport-Security: max-age=
Strict-Transport-Security: max-age= ; includeSubDomains Strict-Transport-Security: max-age= ; preload 指令:
max-age=
设置在浏览器收到这个请求后的 秒的时间内凡是访问这个域名下的请求都使用HTTPS请求。
includeSubDomains
[可选]如果这个可选的参数被指定,那么说明此规则也适用于该网站的所有子域名。
preload
[可选]查看 预加载 HSTS 获得详情。不是标准的一部分。
*HTTP Strict Transport Security(HSTS)参考文档
Content Security Policy*
CSP是一个计算机的安全标志,主要用来防止XSS、点击劫持、SQL注入等攻击;CSP通过定义运行加载脚本的位置和内容防止恶意代码的加载。
内容安全策略CSP技术文档
用法:
CSP由HTTP头的
Content-Security-Policy
定义,每一个HTTP请求最多返回一个CSP头部,格式:Content-Security-Policy:policy
小编安利:
一个Web开发技术的优秀文档技术网站:https://developer.mozilla.org/zh-CN/