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、其他

  • 相关阅读:
    CF 461B Appleman and Tree
    POJ 1821 Fence
    NOIP 2012 开车旅行
    CF 494B Obsessive String
    BZOJ2337 XOR和路径
    CF 24D Broken robot
    POJ 1952 BUY LOW, BUY LOWER
    SPOJ NAPTIME Naptime
    POJ 3585
    CF 453B Little Pony and Harmony Chest
  • 原文地址:https://www.cnblogs.com/leftfist/p/6808630.html
Copyright © 2011-2022 走看看