Web安全是一个系统性工程,从架构到编码,从前端到服务器。javascript
1、前端php
一、跨站脚本攻击(XSS)
跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故缩写为XSS。前端
跨域(或者叫跨站),应该怎么理解?之因此叫跨域,是由于这种攻击或漏洞在刚开始的时候,是试图获取别的站点的机密信息的,致使浏览器推出同源策略,仅容许来自相同域名和使用相同协议的对象与网页之间有交互;而今时今日,是否跨域已经不重要,不过名称就一直保留了下来。java
既然是脚本攻击,主角固然就是JS脚本了。原理是攻击者经过各类途径向网站输入含JS代码的信息,而后网站在页面上输出了这些信息,其中的JS代码被执行。程序员
类型上可分为:
1)持久型 XSS (Persistent型)
持久化,攻击代码存储到了服务器。好比在我的信息或发表博客、使用富文本编辑器等地方,加入脚本代码,若是没有过滤或过滤不严,那么这些代码将储存到服务器中,当用户访问相关展现页面的时候就被触发执行。这种XSS比较常见和危险,容易形成蠕虫,盗窃cookie等。正则表达式
2)反射型 XSS (Non-persistent型)
在URL参数中带脚本,而后显示在页面上。算法
3)Dom-based型
由于历史的缘由,有安全专家单独提出这种类型,因此被单独划归一类,实际上是利用了DOM来进行攻击,持久型、反射型都有可能。如下例子算反射型也没问题。数据库
<?php error_reporting(0); $name = $_GET["name"]; ?>
<input id="text" type="text" value="<?php echo $name;?>" />
<div id="print"></div>
<script type="text/javascript"> var text = document.getElementById("text"); var print = document.getElementById("print"); print.innerHTML = text.value; // 获取 text的值,而且输出在print内。这里是致使xss的主要缘由。 </script>
做者:梧桐雨
连接:https://www.zhihu.com/question/26628342/answer/33504799
来源:知乎
著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。
【防护方法】
尽可能避免直接显示用户提交的数据,应进行必定的过滤,好比对于数据中存在的 < 和 > 等符号须要进行编码,这样就能够防止脚本攻击。json
按照《白帽子讲WEB安全》所讲,XSS还包含伪造表单请求。防护办法是使用验证码。固然验证码早就不是什么绝对的安全策略。跨域
二、跨站点请求伪造(CSRF)
Cross-site request forgery,一般缩写为 CSRF 或者 XSRF。
在网站外(好比其余站点或邮件)伪造一个网站请求,诱使网站用户点击或运行,从而达到攻击的目的。
为啥要诱使用户点击?由于用户是该网站的合法用户,只有经过他点击或运行,才有相关权限。
有时候也许并不须要用户点击,只需浏览便可。好比,设置一个<img>
,其src就是一个该死的请求。
这个请求这么厉害,能被攻击?是的,好比说,这是一个删除啥东东的请求。
【防护方法】
检查Referer字段
HTTP头中有一个Referer字段,这个字段用以标明请求来源于哪一个地址。
添加校验token
token由服务器输出,而后浏览器请求时一块儿提交,并不保存在cookie。
三、点击劫持(ClickJacking)
将透明的图片或frame覆盖在正常页面上,误导用户进行点击。又被称为界面假装。
问题是,如何作到将图片或frame覆盖?答案是黑客在本身站点用iframe来显示被攻击站点,而后再将透明图片或另外一个透明的iframe覆盖其上。
【防护方法】
拒绝别的站点用iframe来显示本身站点的内容。
在服务器端设置 X-FRAME-OPTIONS
网页上设置用于防止加载iFrame的Javascript代码,好比检测本身若是不处于top,立刻跳出来。
此方法适用于不支持X-FRAME-OPTIONS的版本较老的浏览器。
四、HTML5安全
HTML5在安全方面进行了加强,但新特性,带来新的安全问题。包括:
1)新标签的XSS,例如<video>
2)Canvas 功能强大,相似flash,能够用于在客户端破解验证码。上面说到,XSS包括伪造表单请求,防护方法就是验证码;但攻击者能够将验证码发送到本身的服务器上进行破解,破解之道大约是图片识别,彩虹表对照之类吧。如今能够用Canvas在客户端就进行破解。
3)CORS
Cross-Orgin Resource Sharing,跨域资源共享。HTML5以前,要合法跨域的话,能够经过JSONP,iframe等。如今有了一个W3C标准:CORS。
它容许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
原理是浏览器在请求头附上一个标志,服务器根据策略决定是否赞成。服务器能够对策略进行设置,相似白名单。
而JSONP的原理则是:
一、浏览器的同源策略把跨域请求都禁止了;
二、HTML的<script>
标签是例外,src能够轻易引用其余站点的JS文件,因此,其余站点将数据放在这个JS文件里,不就能跨域访问啦?
三、客户端引用到JS以后,就拿到了数据,而后怎么处理随便你,但毕竟不够方便,这时就有了jsonp 这种非正式的协议:客户端定义一个回调函数,而后在src路径附上这个函数名,做为参数传递;而服务器端在JS文件中,将数据写成用这个回调函数来调用。这样数据就能自动进行处理了。
2、服务器端
一、注入攻击
不解释。
二、文件上传漏洞(File Upload Attack)
漏洞就是上传了一些别有用心的文件到服务器并被执行。
1)检查文件类型,采用白名单
2)修改上传文件名,消除文件名含有特殊字符,被操做系统断句、解释成另外一后缀名的漏洞
例如 photo123.asp;xx.jpg ,IIS6会解释为photo123.asp
3)对上传图片进行尺寸压缩,杀灭其中可能存在的恶意代码
4)单独设置文件服务器域名,和应用程序分开,利用浏览器的同源策略
5)上传目录不可执行
三、认证与会话管理
1)密码
不解释
2)session与 cookie
用户登陆后经常有一个sessionID,拿到它每每就等同于登陆;而这个sessionid一般都储存在cookie。保护cookie能够这样:
【secure属性】
当设置为true时,表示建立的 Cookie 会被以安全的形式向服务器传输,也就是只能在 HTTPS 链接中被浏览器传递到服务器端进行会话验证,若是是 HTTP 链接则不会传递该信息,因此不会被窃取到Cookie 的具体内容。
【HttpOnly属性】
若是在Cookie中设置了”HttpOnly”属性,那么经过程序(JS脚本、Applet等)将没法读取到Cookie信息,这样能有效的防止XSS攻击。
若是sessionid直接存放于url,例如手机版,由于不少手机浏览器不支持cookie,则更容易泄露。
【控制session生存周期】
例如强制销毁,或者检测用户IP,客户端发生变化则强制退出等
3)单点登陆
单点登陆将风险集中,一方面有利控制,一方面若是被攻陷,则影响范围广。应对办法能够双认证,登陆用单点登陆,一些敏感的操做,应用系统能够本身再认证一次。好比网银,付款时要输入付款密码。
四、访问控制
就是权限了。
隐藏页面(好比菜单不可见,按钮不可见)难以对付爬虫和猜想,并不安全,须要在服务器端进行权限检查。
权限分为垂直权限和水平权限。垂直权限为角色类,水平权限则是同一角色,但不一样帐户。若是两个帐号属同一个角色,但修改URL中的ID值,张三便可访问甚至修改李四的资料,即有安全性问题。
五、加密算法与随机数
不解释
六、WEB框架安全
一些WEB框架,在机制方面自然就有优越的安全性,或者有利于实施安全性措施。好比ORM框架,能够防范SQL注入;MVC框架,数据流向历经View,Controller,Model,为安全设计提供了便利。
同时,在框架层面进行安全防范,具备统1、不容易遗漏、减轻程序员工做等优势。
然而,WEB框架自己也可能会出现漏洞,而且因为框架版本稳定,通常不频繁升级的特色,一旦漏洞没法及时修补,后果很严重。
七、应用层拒绝服务攻击
DDOS,Distributed Denial of Service,分布式拒绝服务,利用合理的请求形成资源过载,致使服务不可用。
1)网络层DDOS
常见的有SYN flood(flood,洪水之意)、UDP flood、ICMP flood。
其中SYN flood最为常见,利用TCP的缺陷。具体说,就是将包中的源IP地址设置为不存在或不合法的值。服务器一旦接受到该包便会返回接受请求包,但实际上这个包永远返回不到来源处的计算机。这种作法使服务器必需开启本身的监听端口不断等待,也就浪费了系统各方面的资源。
一个应对办法是记录IP并统计访问频率,离奇高者则屏蔽。或者引入硬件反DDOS设备。
2)应用层DDOS
硬件防DDOS设备通常无能为力。攻击原理是不断请求消耗资源大的网页。好比CC攻击。
【CC】Challenge Collapasar,挑战黑洞的简称。黑洞是中国安全公司绿盟的一款DDOS产品。好比读数据库,写硬盘之类的操做。
应对办法是
性能优化,使用缓存
限制请求频率
使用验证码或者其余人机识别方法
3)资源耗尽攻击
【Slowloris】以极低的速度向服务器发出请求,目的是占住链接不放,直至全部链接都被占用。
【HTTP POST DOS】
发送http post包时,声明Content-length很是大,却以极低的速度发包,好比10到100秒发送一个字节,以此占住链接不放,直至全部链接都被占用。
【ReDOS】
让服务器解释一个别有用心的正则表达式,让它根本停不下来。
八、其余