Http请求头安全策略
今天在网上浪了许久,只是为了找一个很简单的配置,却奈何怎么都找不到。
好不容易找到了,我觉得还是记录下来的好,或许省得许多人像我一样浪费时间。
1.X-Frame-Options
如果网站可以嵌入到IFRAME元素中,则攻击者可以在社交场合设计一种情况,即受害者被指向攻击者控制的网站,该网站构成目标网站的框架。然后攻击者可以操纵受害者在目标网站上不知不觉地执行操作。即使有跨站点请求伪造保护,这种攻击也是可能的,并且被称为“clickjacking”,有关更多信息,请参阅https://www.owasp.org/index.php/Clickjacking。为了避免这种情况,创建了“X-Frame-Options”标题。此标题允许网站所有者决定允许哪些网站构建其网站。
通常的建议是将此标头设置为“SAMEORIGIN”,它只允许属于同源策略的资源构成受保护资源的框架,或者设置为“DENY”,它拒绝任何资源(本地或远程)尝试框架也提供“X-Frame-Options”标头的资源。如下所示:
X-Frame-Options:SAMEORIGIN
请注意,“X-Frame-Options”标题已被弃用,将由内容安全策略中的Frame-Options指令替换,该指令仍处于活动开发阶段。但是,“X-Frame-Options”标题目前具有更广泛的支持,因此仍应实施安全措施。
说白了呢,就是让你的网站禁止被嵌套。
其实也很简单(我还在网上搜罗了半天)
配置文件config
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="SAMEORIGIN" />
</customHeaders>
</httpProtocol>
</system.webServer>
2.Content-Security-Policy
内容安全策略(CSP)旨在允许Web应用程序的所有者通知客户端浏览器有关应用程序的预期行为(包括内容源,脚本源,插件类型和其他远程资源),这允许浏览器更多智能地执行安全约束。虽然CSP本质上是复杂的,如果没有适当部署它可能会变得混乱,一个应用良好的CSP可以大大降低利用大多数形式的跨站点脚本攻击的机会。
需要整个帖子来深入了解CSP允许的功能和不同设置,因此建议进一步阅读。以下是Mozilla开发者网络对CSP的精彩介绍性帖子:https://developer.mozilla.org/en-US/docs/Web/Security/CSP
下面的简要示例显示了如何使用CSP指定您的网站希望从任何URI加载图像,从受信任的媒体提供商(包括内容分发网络)列表中插入插件内容,以及仅从您控制的服务器加载脚本:
Content-Security-Policy:default-src'self'; img-src *; object-src media1.example.com media2.example.com * .cdn.example.com; script-src trustedscripts.example.com
请注意,使用CSP的主要问题涉及策略错误配置(即使用“不安全内联”),或使用过于宽松的策略,因此在实施CSP时应特别注意。
这个呢,是将你引入的一切,加一个限制,这样如果别人想通过一些手段在你的网站加一些不好的东西,我们就可以有效地防止了
<httpProtocol>
<customHeaders>
<add name="Content-Security-Policy" value="script-src 'unsafe-inline' http://localhost:56504; object-src 'none'; style-src 'unsafe-inline' http://localhost:56504;" />
</customHeaders>
</httpProtocol>
</system.webServer>
其中预设值有以下这些:
none不匹配任何东西。self匹配当前域,但不包括子域。比如example.com可以,api.example.com则会匹配失败。unsafe-inline允许内嵌的脚本及样式。是的,没看错,对于页面中内嵌的内容也是有相应限制规则的。unsafe-eval允许通过字符串动态创建的脚本执行,比如eval,setTimeout等。
3.X-Content-Type-Options
一种称为MIME类型混淆的漂亮攻击是创建此标头的原因。大多数浏览器采用称为MIME嗅探的技术,其中包括对教育服务器响应的内容类型进行教育猜测,而不是信任标头的内容类型值。在某些情况下,浏览器可能会被欺骗做出错误的决定,允许攻击者在受害者的浏览器上执行恶意代码。有关更多信息,请参阅https://en.wikipedia.org/wiki/Content_sniffing。
“X-Content-Type-Options”可用于通过将此标头的值设置为“nosniff”来防止发生这种“受过教育”的猜测,如下所示:
X-Content-Type-Options:nosniff
请注意,Internet Explorer,Chrome和Safari都支持此标题,但Firefox团队仍在辩论它:https://bugzilla.mozilla.org/show_bug.cgi? id = 471020
<httpProtocol>
<customHeaders>
<add name="X-Content-Type-Options" value="nosniff" />
</customHeaders>
</httpProtocol>
</system.webServer>
4.X-XSS-Protection
现代浏览器包括一项有助于防止反映跨站点脚本攻击的功能,称为XSS过滤器。“X-XSS-Protection”标头可用于启用或禁用此内置功能(目前仅在Internet Explorer,Chrome和Safari中支持此功能)。
建议的配置是将此标头设置为以下值,这将启用XSS保护并指示浏览器在从用户输入插入恶意脚本时阻止响应,而不是清理:
X-XSS-Protection:1; mode = block。
如果没有从服务器发送“X-XSS-Protection”标头,Internet Explorer和Chrome将默认清理任何恶意数据。
请注意,X-XSS-Protection标头已被弃用,将被内容安全策略中的Reflected-XSS指令取代,该指令仍处于活动开发阶段。但是,“X-XSS-Protection”标题目前有更广泛的支持,因此仍应实施安全措施。
0 – 关闭对浏览器的xss防护
1 – 开启xss防护
1; mode=block – 开启xss防护并通知浏览器阻止而不是过滤用户注入的脚本。
1; report=http://site.com/report – 这个只有chrome和webkit内核的浏览器支持,这种模式告诉浏览器当发现疑似xss攻击的时候就将这部分数据post到指定地址。
配置方法
<httpProtocol>
<customHeaders>
<add name="X-XSS-Protection" value="1;mode=block" />
</customHeaders>
</httpProtocol>
</system.webServer>
这就是困扰了我许久,网上又找不到的几个安全配置
文中介绍引自 : https://www.dionach.com/blog/an-overview-of-http-security-headers
如果大家想要更深入了解,这是我一下午找的资料
https://www.cnblogs.com/alisecurity/p/5924023.html
https://www.cnblogs.com/Wayou/p/intro_to_content_security_policy.html
https://www.cnblogs.com/doseoer/p/5676297.html
网址安全型检测
https://tools.geekflare.com/report/xss-protection-test/http://hgwebsite.cn/
学习的道路是漫长的
Http请求头安全策略的更多相关文章
- 前端必备HTTP技能之HTTP请求头响应头中常用字段详解(转)
作为一名前端开发人员,肯定少不了要和网络打交道,因为要从服务器端拉取数据,从服务端获取数据最常用的方式还是通过HTTP请求.给服务器发请求的时候有请求头,接受服务器响应的时候有响应头,客户端和服务器端 ...
- Http消息头中常用的请求头和响应头
作为Web开发对常用http的请求头和响应头熟悉了解一下还是很有必要的.比如请求头中Content-type指定了请求的内容,若类型是application/x-www-form-urlencoded ...
- HTTP常用标准请求头字段
常用标准请求头字段 Accept 设置接受的内容类型 Accept: text/plain Accept-Charset 设置接受的字符编码 Accept-Charset: utf-8 Accept- ...
- HTTP消息头(HTTP headers)-HTTP请求头与HTTP响应头
感谢大佬:https://itbilu.com/other/relate/E1T0q4EIe.html HTTP协议将传输的信息分隔为两部分:HTTP信息头.HTTP信息体.通过HTTP头信息,使客户 ...
- js获取HTTP的请求头信息
以下为js获取HTTP的全部请求头信息: var req = new XMLHttpRequest(); req.open('GET', document.location, false); req. ...
- 在AngularJs中怎么设置请求头信息(headers)及不同方法的比较
在AngularJS中有三种方式可以设置请求头信息: 1.在http服务的在服务端发送请求时,也就是调用http()方法时,在config对象中设置请求头信息:事例如下: $http.post('/s ...
- Retrofit2 + OkHttp3设置Http请求头(Headers)方法汇总
在构建网络层时会遇到一个问题就是要手动配置Http请求的Headers,写入缓存Cookie,自定义的User-Agent等参数,但是对于有几十个接口的网络层,我才不想用注解配置Headers,目前网 ...
- selenium.Phantomjs设置浏览器请求头
from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCap ...
- iOS开发——网络篇——文件下载(NSMutableData、NSFileHandle、NSOutputStream)和上传、压缩和解压(三方框架ZipArchive),请求头和请求体格式,断点续传Range
一.小文件下载 NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion ...
随机推荐
- C#中的?操作符
一.1个?的用法 1. 表示可空数据类型,如 int? bool? 2. 跟在对象后,如该对象为null,则不会触发空值异常,且整个表达式返回null,如: string kk = "123 ...
- 洛谷P5022 旅行 题解 去环/搜索
题目链接:https://www.luogu.org/problem/P5022 这道题目一开始看的时候没有思路,但是看到数据范围里面有一个: \(m = n-1\) 或 \(m = n\) ,一下子 ...
- MATLAB常用函数, 常见问题
MATLAB常用函数 1.常用取整函数 round(x):四舍五入函数 floor(x) : 向下取整, 即 floor(1.2)=1, floor(1.8) = 1 ceil(x) : 向上取整, ...
- vue v-for循环中key属性的使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 解决:javac: 无效的目标发行版: 1.8
原 解决:javac: 无效的目标发行版: 1.8 2017年06月14日 16:21:12 代码也文艺 阅读数 44795 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...
- P1054 全组合
题目描述 给定n,m,按字典序输出所有从1-n里面取出m个数的组合.比如从1-3里面取出2个的组合是: 1 2 1 3 2 3 输入格式 输入两个数n,m.其中 \(0<n<=10,0&l ...
- H3C IPv6地址配置命令
- 大众点评实时监控系统CAT的那些坑
首先,感谢大众点评开源监控系统CAT.CAT是一款非常使用的功能建全的监控系统.作为一个知名的开源软件,真的是太差了. 想把CAT用起来,没有多年的Java经验是不行的.先吐槽一下,再写一篇如何用的文 ...
- Linux 内核PCI去除一个驱动
去除一个驱动是一个非常容易的动作. 对于一个 PCI 驱动, 驱动调用 pci_unregister_driver 函数. 这个函数只调用驱动核心函数 driver_unregister, 使用 一个 ...
- vue-learning:27 - component - 组件三大API之二:event
组件三大API之二: event 在上一节中讲到prop单向下行数据绑定的特征,父组件向子组件传值通过prop实现,那如果有子组件需要向父组件传值或其它通信请求,可以通过vue的事件监听系统(触发事件 ...