网站地图    收藏   

主页 > 后端 > 网站安全 >

WEB安全之XSS注入预防策略——CSP - 网站安全 - 自

来源:自学PHP网    时间:2015-04-17 12:00 作者: 阅读:

[导读] 首先本章内容是关于WEB安全的一隅,由于本人知识所限本文所述可能有误,若看官有疑问可以联系文叔( darrel.hsu@gmail.com )。特别感谢 @Sogl 以及 @剑心 两位老师~ WEB的盛行让这个网络...

    首先本章内容是关于WEB安全的一隅,由于本人知识所限本文所述可能有误,若看官有疑问可以联系文叔( darrel.hsu@gmail.com )。特别感谢 @Sogl 以及 @剑心 两位老师~
 
        WEB的盛行让这个网络社会更非富,随之而来的就是安全问题。如果何安全的接受用户输入并正确的显示出来是绝大多部WEB程序的致追求。其中之一就是防止XSS。(如果有对XSS不了解的同学可以看这里 http://baike.baidu.com/view/50325.htm )一般性而言XSS的主要危害主要是:一是页面可能被恶意或其他原因所定制,二是有可能造成站内数据外泄。
 
        XSS页面定制
 
        现代WEB内容很多由厂商和用户共同产生,下面的例子说明一个由厂商和用户共同产生的数据:
 
        <div class="profile">
 
            <dl>
 
                 <dt>$title</dt>
 
                 <dd>$description</dd>
 
            </dl>
 
        </div>
 
        其中$title和$description代表了两个变量,用于输出一个由用户产生的标题和内容。以$title为例,如果$title中的内容是:<script>alert(1)</script> 那么运行后输出到浏览器端的内容即为:
 
        <div class="profile">
 
            <dl>
 
                 <dt><script>alert(1)</script></dt>
 
                 <dd>description</dd>
 
            </dl>
 
        </div>
 
        那么这段代码的结果只有一种可能:如大家所见会执行这段script,这当然不是开发者所期望的。这个页面我们就可以理解为被定制了。也许当你拿到了一个HOST可以信任的一个URL,但是很不幸这个URL已经被恶意的传播者通过XSS所定制,那么也许用户就可能会相信这个页面所输出的内容。那结果是可想而知的。为了预防这种情况。通常情况下WEB开发者会通过escape safe charactor 的方式解决(把 < 变成 &lt;  等)。但是这种预防只停留在通过转义让输出和显示与输入一致。
 
        这只是一种解决HTML注入的手段。从安全的角度出发,https://i.xiaomi.com 应该只允许显示来自 https://i.xiaomi.com 的图片。同样的 https;://i.xiaomi.com 也只允许https://land.xiaomi.net 域名下的资源去处理 https://i.xiaom.com上的事务。基于以上的安全限制定下,在现有机制肯定是满足不了需求了。不过幸好W3C发布了基于该种安全限定的的CSP草案。目前该草案还处于完善阶段,这就意味着该草案随时都有可能被其他规范或草案所替代,当然也有可能放弃。不过IE10以及Webkit已经有对该草案的实现,有了浏览器厂商支持,这事就靠谱了。
 
       什么是CSP?
 
       CSP是由单词 Content Security Policy 的首单词组成,该草案旨在减少(注意这里是减少而不是消灭哦~)一种内容注入,比如跨站脚本(可能是攻击哦~亲!)。CSP是一种由开发者定义的安全性政策性申明。前面几句说的太绕人了,说简单点就是通过CSP所约束的的规责指定可信的内容来源(这里的内容可以指脚本、图片、iframe、fton、style等等可能的远程的资源)。通过CSP协定,让WEB处于一个安全的运行环境中。
 
      如何应用
 
      CSP可以由两种方式指定:HTTP Header 和HTML。HTTP是在HTTP由增加Header来指定,而HTML级别则由Meta标签指定。CSP有两类:Content-Security-Policy 和 Content-Security-Policy-Report-Only。(大小写无关)
 
      HTTP header : 
 
      "Content-Security-Policy:" 策略
 
      "Content-Security-Policy-Report-Only:" 策略
 
       HTTP Content-Security-Policy 头可以指定一个或多个资源是安全的,而Content-Security-Policy-Report-Only则是允许服务器检查(非强制)一个策略。多个头的策略定义由优先采用最先定义的。( 目前Firefox使用x-Content-Security-Policy,WebKit使用X-WebKit-CSP。或许在不久的将来草案最终确定下来之后会统一吧?)
 
      HTML Meta :
 
       <meta http-equiv="content-security-policy" content="策略">
 
       <meta http-equiv="content-security-policy-report-only" content="策略">
 
       meta标签与HTTP头只是行式不同而作用是一致的。与HTTP 头一样,优先采用最先定义的策略。如果HTTP头与META定义同时存在,则优先采用HTTP中的定义。
 
       如果用户浏览器已经为当前文档执行了一个CSP的策略,则会跳过META的定义。如果META标签缺少 content 属性也同样会跳过。
 
        针对开发者草案中特别的提示一点:为了使用策略生效,应该将 meta 元素头放在开始位置,以防止提高人为的CSP策略注入。
 
        当然CSP草案还在完善之中,草案中也特别的提出了几点问题,比如应该约定一种META机制以确保文档不会被注入恶意的CSP规则。     
 
       CSP语法
 
        CSP策略内容由一个 ; 分隔是若干个CSP指令(每条CSP指令的前后空格会被无视掉):
 
   policy            = [ directive *( ";" [ directive ] ) ]
 
 每一个CSP由一个 指令名 和 一个可选的指令值 组成
 
    directive         = *WSP [ directive-name [ WSP directive-value ] ]
 
    directive-name    = 1*( ALPHA / DIGIT / "-" )
 
    directive-value   = *( WSP / <VCHAR except ";" and ","> 
 
CSP策略可以是一个指定的URL或是 协议(可选)+HOST+POST(可选)+路径(可选)的 指令。该指令说明了资源为安全的或非安全的。
 
示例:
 
  1.只允许本站资源
 
      Content-Security-Policy: default-src ‘self’
 
  2.允许本站的资源以及任意位置的图片以及trustedscripts.example.com下的脚本。
 
 &
nbsp;     Content-Security-Policy: default-src ‘self’; img-src *;
 
                                script-src trustedscripts.example.com
 
 
 
更多关于CSP的介绍可以参考W3C的相关文档: https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html#content-security-policy-header-field
 
一部分中文翻译:http://www.w3.org/html/ig/zh/wiki/CSP
 
关于CSP的讨论
 
首先CSP的出现肯定可以一定程度上的减少XSS的攻击(因为攻击成本提高),但并不一定就意味着CSP普及了XSS攻击就没有了
 
资料:
 
JPEG网页图片病毒  http://baike.baidu.com/view/540655.htm
 
Shutting Down XSS with Content Sercurity Policy   http://blog.mozilla.org/security/2009/06/19/shutting-down-xss-with-content-security-policy/ 
 
Content Security Policy ( SCP ) http://developer.chrome.com/extensions/contentSecurityPolicy.html
 
 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论