关于 Web 安全,99% 的网站都忽略了这些

news/2024/4/28 6:15:48/文章来源:https://blog.csdn.net/weixin_34342905/article/details/89518737

作者:肖光宇
野狗科技联合创始人,先后在猫扑、百度、搜狗任职,爱折腾的前端工程师。
野狗官博:https://blog.wilddog.com/
野狗官网:https://www.wilddog.com/
公众订阅号:wilddogbaas

图片描述

Web安全是一个如何强调都不为过的事情,我们发现国内的众多网站都没有实现全站https,对于其他安全策略的实践更是很少,本文的目的并非讨论安全和攻击的细节,而是从策略的角度引发对安全的思考和重视。

1. 数据通道安全

http协议下的网络连接都是基于明文的,信息很有可能被泄露篡改,甚至用户都不知道通信的对方是否就是自己希望连接的服务器。因此,信息通道安全有以下两个目标:

  • 身份认证

  • 数据不被泄漏和篡改

幸运的是https解决了上述问题的(更多关于https的细节可以看下上一篇干货扒一扒https网站的内幕)。理论上https是安全的,即使如此,https依然应该被重视,因为理论上理论和实践是一样的,但实践中又是另外一回事。前段时间爆发的心血漏洞就是一个例子。

2. 浏览器安全

https解决了点到点的安全问题和身份认证问题,接下来会出现问题的地方就只有2个:浏览器和服务器,这个层面上的安全问题并没有https一样的银弹可以一次性解决。

2.1 origin 源

了解浏览器安全,有一个概念特别重要,那就是源(origin) 什么是源呢?

  • 相同的HOST

  • 相同的协议

  • 相同的端口

举栗子:

  • https//www.wilddog.com和http//www.wilddog.com非同源,因为协议不同。

  • http//wilddog.com和http//www.wilddog.com非同源,因为域名不同。

  • http//wilddog.com和http//wilddog.com:8080非同源,因为端口不同。

源这个概念为甚这么重要,这要从同源策略说起。

2.2 同源策略

同源策略限制了一个源(origin)中加载文本或脚本与来自其它源(origin)中资源的交互方式。简单的说就是一个源的页面上的js只能访问当前源的资源,不能访问其他源的资源。那么资源是什么呢?

  • DOM

  • 通过AJAX请求的网络资源

  • Cookie

  • WebStorage,webSql

  • ...

很显然,同源策略以源为单位,把资源天然分隔,保护了用户的信息安全。

同源策略是一堵墙,然而墙并非不透风。有很多方法可以绕过同源策略让javascript访问其他源的资源。比如:

  • JSONP:基于iframe的方法(iframe+window.name iframe+window.domain iframe+webMessage)

  • CORS:我认为只有CORS是"正当的"绕过同源策略的方法 同源策略是浏览器安全策略的基础,但同源策略面对很多攻击是无能为力的,比如XSS

2.3 XSS (Cross-Site Script)

跨站脚本攻击,名字跟同源策略很像,事实上他们之间基本没有关系。跨站脚本攻击本质上是一种注入攻击(有兴趣了解更多注入攻击可以看Injection Theory)。其原理,简单的说就是利用各种手段把恶意代码添加到网页中,并让受害者执行这段脚本。XSS的例子只要百度一下有很多。XSS能做用户使用浏览器能做的一切事情。可以看到同源策略无法保证不受XSS攻击,因为此时攻击者就在同源之内。

图片描述

XSS攻击从攻击的方式可以分为:

  • 反射型

  • 存储型

  • 文档型

这种分类方式有些过时,长久以来,人们认为XSS分类有以上三种,但实际情况中经常无法区分,所以更明确的分类方式可以分为以下两类:

  • client(客户端型)

  • server(服务端型)

当一端XSS代码是在服务端被插入的,那么这就是服务端型XSS,同理,如果代码在客户端插入,就是客户端型XSS。

2.4 防止XSS攻击--转义

无论是服务端型还是客户端型XSS,攻击达成需要两个条件:

  • 代码被注入

  • 代码被执行

其实只要做好无论任何情况下保证代码不被执行就能完全杜绝XSS攻击。详情可以看下XSS (Cross Site Scripting) Prevention Cheat Sheet这篇文章。
这里简单说下结论:任何时候都不要把不受信任的数据直接插入到dom中的任何位置,一定要做转义。

2.4.1 对于某些位置,不受信任的数据做转义就可以保证安全:

  • div body的内部html

  • 一般的标签属性值

2.4.2 对于某些位置,即使做了转义依然不安全:

  • <script>中

  • 注释中

  • 表签的属性名名

  • 标签名

  • css标签中

2.4.3 使用JSON.parse 而不是eval,request 的content-type要指定是Content-Type: application/json;

2.4.4 如果链接的URL中部分是动态生成的,一定要做转义。

2.5 HTML 转义

图片描述

2.6 使用浏览器自带的 XSS-filter

图片描述

现代浏览器都对反射型XSS有一定的防御力,其原理是检查url和dom中元素的相关性。但这并不能完全防止反射型XSS。另外,浏览器对于存储型XSS并没有抵抗力,原因很简单,用户的需求是多种多样的。所以,抵御XSS这件事情不能指望浏览器。

可以通过http头控制是否打开XSS-filter,当然默认是打开的.X-XSS-Protection

2.7 CSP(Content Security Policy)

从原理上说防止XSS是很简单的一件事,但实际中,业务代码非常多样和复杂,漏洞还是时不时会出现。CSP并不是用来防止XSS攻击的,而是最小化XSS发生后所造成的伤害。事实上,除了开发者自己做好XSS转义,并没有别的方法可以防止XSS的发生。CSP可以说是html5给Web安全带来的最实惠的东西。CSP的作用是限制一个页面的行为不论是否是javacript控制的。

如何引入CSP呢?

图片描述

2.7.1 通过response头

//只允许脚本从本源加载Content-Security-Policy: script-src 'self'

2.7.2 通过html的meta标签

//作用同上<meta http-equiv="Content-Security-Policy" content="script-src 'self'">

那么CSP除了限制script-src之外还能限制什么呢?

  • base-uri: 限制这篇文档的uri;

  • child-src: 限制子窗口的源(iframe、弹窗等),取代frame-src;

  • connect-src: 限制脚本可以访问的源;

  • font-src: 限制字体的源;

  • form-action: 限制表单能够提交到的源;

  • frame-ancestors: 限制了当前页面可以被哪些页面以iframe,frame,object等方式加载;

  • frame-src: deprecated with child-src,限制了当前页面可以加载哪些源,与frame-ancestors对应;

  • img-src: 限制图片可以从哪些源加载;

  • media-src: 限制video,audio, source,track能够从哪些源加载;

  • object-src: 限制插件可以从哪些源加载;

  • sandbox: 强制打开沙盒模式;

可以看出,CSP是一个强大的策略,几乎可以限制了所有能够用到的资源的来源。使用好CSP可以很大成都降低XSS带来的风险。另外,CSP还提供一个报告的头Content-Security-Policy-Report-Only,使用这个头浏览器向服务器报告CSP状态,细节先不讨论。

Content-Security-Policy-Report-Only:script-src'self';report-uri/csp-report-endpoint/

CSP 目前有两版:CSP1和CSP2。

两版的支持状态可以在http://caniuse.com/#search=csp中查到。

CSP1:

图片描述

CSP2:

图片描述

2.8 X-Frame-Options

这是response头,现在正在使用,但以后可以被CSP的frame-ancestors取代。目前支持的状态比起CSP frame-ancestors要好,使用的方式:

  • X-Frame-Options:DENY//这个页面不允许被以frame的方式加载

  • X-Frame-Options:SAMEORIGIN//这个页面只允许同源页面加载

  • X-Frame-Options:<uri> //这个页面只能被特定的域加载

2.9 Http-Only

使用Http-only保护cookie,可以保证即使发生了XSS,用户的cookie也是安全的。使用Http-only保护的cookie是不会被javascript读写的。

2.10 iframe沙箱环境

虽然有同源策略,iframe的问题还是有很多的,比如各种利用iframe进行跨源。HTML5为iframe提供了安全属性sandbox,如果使用此属性,iframe的能力将会被限制,细节我们将会在以后的文章中详细讨论。

2.11 其他安全相关的HTTP头

X-Content-Type-Options阻止浏览器进行content-type 嗅探。告诉浏览器相信此服务器下发的资源的类型,防止类型嗅探攻击。

HPKP(Public Key Pinning)Public Key Pinning是一个response头,用来检测一个证书的公钥是否发生了改变,防止中间人攻击。

HSTS (HTTP Strict-Transport-Security) 强制使用TSL作为数据通道,在扒一扒HTTPS网站的内幕中也有详细介绍。

说了这么多我们看以下一些各个网站实现的情况:

图片描述

谷歌是行业的标杆,在互联网无出其右,学习Google就对了!

图片描述

我们野狗的官网https://www.wilddog.com/同样也实现了几个重要的http头。

图片描述

百度做的就比较差了,一家如此大规模的互联网公司,对于安全,对于技术如此不敏感,只能说是很悲哀,充分说明中国互联网企业对安全的重视是非常低的!值得注意的是,百度的http到https的跳转居然是服务端做的。

我们再来看下行业笑话12306。

图片描述

3. HTML5 对 Web 安全的影响

HTML5带来了很多新的特性,让浏览器和javascript获得了更大的能力。然而能力越大,被攻破后的危险就越大。

HTML5对XSS的影响主要体现在:

更大的攻击面,HTML5带来来更多的标签和更多的属性,XSS发生的可能性更大。
更大的危害,HTML5更多的资源可以被XSS利用。黑客可以利用浏览器的一切权限,比如本地存储,GEO,WebSocket,Webworker。

遗憾的是HTML并没有针止XSS和XSRF带来系统性解决方案。在这个前提下,CSP变得非常重要,可以大大降低XSS后的危害。

HTML5时代实际对开发者提出来更高的要求,因为有更多的交互,更多的前端行为,HTML5有更多的API。希望共勉,不做蒙古大夫,与广大的开发者一同提高中国互联网的用户体验!

4. references

  • 安全相关的HTTP头 https://www.owasp.org/index.php/List_of_useful_HTTP_headers

  • 同源策略 https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy

  • CSP http://www.w3.org/TR/CSP/

  • HPKP https://developer.mozilla.org/en-US/docs/Web/Security/Public_Key_Pinning

  • w3c iframe element http://www.w3.org/TR/2011/WD-html5-20110525/the-iframe-element.html

  • MDN web security https://developer.mozilla.org/en-US/docs/Web/Security

  • XSS cheet sheet https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

  • 野狗科技官网 https://www.wilddog.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_779265.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网站】python的Windows平台的扩展包

这个网站中收纳了许多的Python在Windows平台下的扩展包&#xff0c;下载安装起来很是方便。 https://www.lfd.uci.edu/~gohlke/pythonlibs/ 点此链接 下面都是这个网站提供的&#xff1a; 转载于:https://www.cnblogs.com/to-red/p/9915778.html

python能爬取js写的网站吗_可以爬取js里面的内容吗

广告关闭 腾讯云11.11云上盛惠 &#xff0c;精选热门产品助力上云&#xff0c;云服务器首年88元起&#xff0c;买的越多返的越多&#xff0c;最高返5000元&#xff01; seleniumphantomjs爬取京东商品信息今天自己实战写了个爬取京东商品信息&#xff0c;和上一篇的思路一样&am…

一个帮助可以验证服务器证书链的网站

2019独角兽企业重金招聘Python工程师标准>>> Android trust store 和iOS的trust store不同&#xff0c;所以在验证证书链的时候结果会有不同。Android可能会拿到比iOS更多的证书链。 一个帮助可以验证服务器证书链的网站: https://www.sslabs.com/ssltest/analyze.h…

aspxspy mysql_网站管理软件 AspxSpy2014 Final最终版

受bin牛委托修改并发布&#xff0c;版权归bin牛所有。Bug/建议提交&#xff1a;zcgonvhrootkit.net.cn祝各位马年大吉&#xff0c;财源滚滚。免责声明&#xff1a;本程序只用于管理员安全检测&#xff0c;使用前请注意环境与法律法规&#xff0c;因使用不当造成的后果本人不承担…

电子商务网站SQL注入项目实战一例

故事A段&#xff1a;发现整站SQL对外输出&#xff1a; 有个朋友的网站&#xff0c;由于是外包项目&#xff0c;深圳某公司开发的&#xff0c;某天我帮他检测了一下网站相关情况。 我查看了页面源代码&#xff0c;发现了个惊人的事情&#xff0c;竟然整站打印SQL到Html里&#x…

优秀网站--ITNOSE

2019独角兽企业重金招聘Python工程师标准>>> 不错的网站 http://www.itnose.net/ 转载于:https://my.oschina.net/u/2312022/blog/682287

java并发编程学习网站

2019独角兽企业重金招聘Python工程师标准>>> http://www.tuicool.com/articles/JNRNJbR 转载于:https://my.oschina.net/u/1178126/blog/736219

大型网站技术架构(七)网站的可扩展性架构

2019独角兽企业重金招聘Python工程师标准>>> 扩展性是指对现有系统影响最小的情况下&#xff0c;系统功能可持续扩展或提升的能力。 设计网站可扩展架构的核心思想是模块化&#xff0c;并在此基础上&#xff0c;降低模块间的耦合性&#xff0c;提供模块的复用性。模…

ASP.NET 快乐建站系列 -- 如何真正提高ASP.NET网站的性能[1]

前言 怎么才能让asp.net 网站飞得更快&#xff0c;有更好的性能&#xff1f; -- 这是很多开发者常常思考的一个问题。我有时候会做大量的测试&#xff0c;或请求别人帮忙采集一些数据&#xff0c;希望能够验证网上一些专家的建议或证明自己的一些猜想。 理论上讲&#xff0c;我…

分析网站总是跳出率高留不住用户咋回事

为什么80%的码农都做不了架构师&#xff1f;>>> 网站跳出率简单理解为即用户停留时间短&#xff0c;一个网站跳出率过高不但影响用户体验&#xff0c;也会影响网站的排名。下面花仙网(http://www.ihuaxian.net/)告诉你是哪些原因导致你的网站高跳出率&#xff1f; …

30分钟搞定后台登录界面(103个后台PSD源文件、素材网站)(转)

出处&#xff1a;http://www.cnblogs.com/best/p/6582294.html 目录 一、界面预览二、PSD源文件预览三、工具分享四、资源说明五、素材下载网站六、下载去年八月时要做一个OA系统为了后台界面而烦恼&#xff0c;后来写了一篇博客&#xff08;《后台管理UI的选择》&#xff09;介…

校园心理网站html模板,校园心理微电影剧本

微电影剧本名 如果 剧情概述 一段青葱岁月 一首无意的插曲 在这最美的季节 微电影主题曲 插曲 待定 主要角色 女一号 雨落 20岁 在校大学生 性格安静 男一号 杜宇生 20岁 在校大学生 男二号 A 雨落前男友 在校大学生---------------------------------------------------------…

vue网站打包后报错:net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK)

vue开发的网站&#xff0c;打包上线后&#xff0c;经常有两个大点的js文件报错&#xff1a;&#xff08;一个1M多点&#xff0c;一个650K&#xff09; net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK)在网上搜索&#xff0c;答案基本上都说是nginx的proxy_temp目录权限的问题&…

修改默认端口号_搭建apache服务器,默认网站浏览,默认页页面文件修改

apache服务器是Linux系统中基于提供网站web浏览的服务器&#xff0c;是建立web站点非常常用的服务器软件之一&#xff0c;除了apache还有nginx。今天以apache服务器软件为例给大家做介绍。1、安装apache服务程序httpd是apache服务器软件的软件包名yum安装httpd安装更新完成2、启…

利用缓存来提高网站的性能(Caching to Improve the Performance of Your Website )

您可以提高您站点的访问速度&#xff0c;那么就需要用到cache&#xff08;缓存&#xff09;&#xff0c;通常可以我们使用cache来处理经常检索的结果或不经常改变的数据结果。 你将学习&#xff1a; l 如何使用缓存来提高网站的响应速度。 本章介绍的功能&#xff1a; l WebC…

网站网页栅格化

为什么80%的码农都做不了架构师&#xff1f;>>> 网站网页栅格化 2010-09-02 10:30:12 首先澄清一个应用场景问题。 指出&#xff0c;对于结构复杂的网站&#xff0c;不少设计师们喜欢采用960固定宽度布局。但要注意的是&#xff0c;960并不是万能钥匙&#xff…

A5营销团队告诉我的SEO诊断那些事

自从做博客以来&#xff0c;一直和A5的朋友有着联系&#xff0c;之前A5论坛给我做的两次专访&#xff0c;让更多站长知道了卢松松博客&#xff0c;从此也和A5结下了缘分。访谈后的从草根转向知名&#xff0c;也有了第一次投放广告经历&#xff0c;应该说是一次质的飞跃。(配图说…

域名解析到html,新手建站入门教程 域名的解析与绑定

那么有了注册了域名和购买了虚拟主机以后&#xff0c;怎么样才能在IE里输入你的域名就能打开你的站呢&#xff1f;这就需要将域名解析到空间&#xff0c;同时空间也需要绑定域名。今天我们就来讲一下域名的解析和绑定&#xff1a;第一步&#xff1a;域名的解析&#xff1b;以我…

搜索引擎优化系统知名乐云seo_seo搜索优化教程02-搜索引擎seo工作原理

为了使大家更方便的了解及学习网络营销推广、seo搜索优化,星辉信息科技强势推出seo搜索优化教程.此为seo教程第二课常用搜索引擎当今搜索流量入口主要分为PC端搜索和移动端搜索。从最新公布的2018年搜索引擎市场份额来看&#xff0c;不论是从PC端和移动端&#xff0c;百度的市场…

网站架构服务器,网站架构,网站架构服务器怎么划分?

1.按应用层次划分为入门级服务器、工作组级服务器、部门级服务器和企业级服务器四类网站架构。(1)入门级服务器(2)工作组级服务器(3)部门级服务器(4)企业级服务器2.按服务器的处理器架构(也就是服务器CPU所采用的指令系统)划分把服务器分为CISC架构服务器、RISC架构服务器和VLI…