zoukankan      html  css  js  c++  java
  • Web安全

    Web安全是一个系统性工程,从架构到编码,从前端到服务器。

    一、前端

    1、跨站脚本攻击(XSS)
    跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故缩写为XSS。

    跨域(或者叫跨站),应该怎么理解?之所以叫跨域,是因为这种攻击或漏洞在刚开始的时候,是试图获取别的站点的机密信息的,导致浏览器推出同源策略,仅允许来自相同域名和使用相同协议的对象与网页之间有交互;而今时今日,是否跨域已经不重要,不过名称就一直保留了下来。

    既然是脚本攻击,主角当然就是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
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    这里写图片描述

    【防御方法】
    尽量避免直接显示用户提交的数据,应进行一定的过滤,比如对于数据中存在的 < 和 > 等符号需要进行编码,这样就可以防止脚本攻击。

    按照《白帽子讲WEB安全》所讲,XSS还包含伪造表单请求。防御办法是使用验证码。当然验证码早就不是什么绝对的安全策略。

    2、跨站点请求伪造(CSRF)
    Cross-site request forgery,通常缩写为 CSRF 或者 XSRF。

    在网站外(比如其他站点或邮件)伪造一个网站请求,诱使网站用户点击或运行,从而达到攻击的目的。

    为啥要诱使用户点击?因为用户是该网站的合法用户,只有通过他点击或运行,才有相关权限。

    有时候也许并不需要用户点击,只需浏览即可。比如,设置一个<img>,其src就是一个该死的请求。

    这个请求这么厉害,能被攻击?是的,比如说,这是一个删除啥东东的请求。

    【防御方法】
    检查Referer字段
    HTTP头中有一个Referer字段,这个字段用以标明请求来源于哪个地址。

    添加校验token
    token由服务器输出,然后浏览器请求时一起提交,并不保存在cookie。

    3、点击劫持(ClickJacking)

    将透明的图片或frame覆盖在正常页面上,误导用户进行点击。又被称为界面伪装。

    问题是,如何做到将图片或frame覆盖?答案是黑客在自己站点用iframe来显示被攻击站点,然后再将透明图片或另一个透明的iframe覆盖其上。

    【防御方法】
    拒绝别的站点用iframe来显示自己站点的内容。
    在服务器端设置 X-FRAME-OPTIONS

    网页上设置用于防止加载iFrame的Javascript代码,比如检测自己如果不处于top,马上跳出来。
    此方法适用于不支持X-FRAME-OPTIONS的版本较老的浏览器。

    4、HTML5安全
    HTML5在安全方面进行了增强,但新特性,带来新的安全问题。包括:
    1)新标签的XSS,例如<video>

    2)Canvas 功能强大,类似flash,可以用于在客户端破解验证码。上面说到,XSS包括伪造表单请求,防御方法就是验证码;但攻击者可以将验证码发送到自己的服务器上进行破解,破解之道大约是图片识别,彩虹表对照之类吧。现在可以用Canvas在客户端就进行破解。

    3)CORS
    Cross-Orgin Resource Sharing,跨域资源共享。HTML5之前,要合法跨域的话,可以通过JSONP,iframe等。现在有了一个W3C标准:CORS。

    它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。

    原理是浏览器在请求头附上一个标志,服务器根据策略决定是否同意。服务器可以对策略进行设置,类似白名单。

    而JSONP的原理则是:

    1、浏览器的同源策略把跨域请求都禁止了;
    2、HTML的<script>标签是例外,src可以轻易引用其他站点的JS文件,所以,其他站点将数据放在这个JS文件里,不就能跨域访问啦?
    3、客户端引用到JS之后,就拿到了数据,然后怎么处理随便你,但毕竟不够方便,这时就有了jsonp 这种非正式的协议:客户端定义一个回调函数,然后在src路径附上这个函数名,作为参数传递;而服务器端在JS文件中,将数据写成用这个回调函数来调用。这样数据就能自动进行处理了。

    二、服务器端
    1、注入攻击
    不解释。

    2、文件上传漏洞(File Upload Attack)
    漏洞就是上传了一些别有用心的文件到服务器并被执行。

    1)检查文件类型,采用白名单
    2)修改上传文件名,消除文件名含有特殊字符,被操作系统断句、解释成另一后缀名的漏洞
    例如 photo123.asp;xx.jpg ,IIS6会解释为photo123.asp

    3)对上传图片进行尺寸压缩,杀灭其中可能存在的恶意代码
    4)单独设置文件服务器域名,和应用程序分开,利用浏览器的同源策略
    5)上传目录不可执行

    3、认证与会话管理

    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)单点登录
    单点登录将风险集中,一方面有利控制,一方面如果被攻陷,则影响范围广。应对办法可以双认证,登录用单点登录,一些敏感的操作,应用系统可以自己再认证一次。比如网银,付款时要输入付款密码。

    4、访问控制
    就是权限了。
    隐藏页面(比如菜单不可见,按钮不可见)难以对付爬虫和猜测,并不安全,需要在服务器端进行权限检查。

    权限分为垂直权限和水平权限。垂直权限为角色类,水平权限则是同一角色,但不同账户。如果两个账号属同一个角色,但修改URL中的ID值,张三即可访问甚至修改李四的资料,即有安全性问题。

    5、加密算法与随机数
    不解释

    6、WEB框架安全
    一些WEB框架,在机制方面天然就有优越的安全性,或者有利于实施安全性措施。比如ORM框架,可以防范SQL注入;MVC框架,数据流向历经View,Controller,Model,为安全设计提供了便利。

    同时,在框架层面进行安全防范,具有统一、不容易遗漏、减轻程序员工作等优点。

    然而,WEB框架本身也可能会出现漏洞,并且由于框架版本稳定,一般不频繁升级的特点,一旦漏洞无法及时修补,后果很严重。

    7、应用层拒绝服务攻击
    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】
    让服务器解释一个别有用心的正则表达式,让它根本停不下来。

    8、其他

  • 相关阅读:
    Tomcat启动startup.bat闪退和JRE_HOME错误
    页面布局:一侧固定宽度,一侧自适应
    iOS-数据持久化-CoreData
    iOS-数据持久化-SQlite3
    iOS-数据持久化-偏好设置
    iOS-数据持久化-对象归档
    iOS-数据持久化-属性列表
    iOS-数据持久化基础-沙盒机制
    iOS-数据持久化详细介绍
    iOS-网络处理框架AFN
  • 原文地址:https://www.cnblogs.com/leftfist/p/6808630.html
Copyright © 2011-2022 走看看