zoukankan      html  css  js  c++  java
  • Web前端--黑客技术揭秘(菜鸟知识)

    一,Web安全的关键点

    1.同源策略是众多安全策略的一个,是Web层面上的策略。很重要。

    2.同源策略规定:不同域的client脚本在没明白授权的情况下。不能读写对方的资源。

    3.同域要求两个网站同协议,同域名,同port。

    4.当然,在同一个域内。client脚本能够随意读写同源内的资源,前提是这个资源本身是可读可写的。

    5.安全类似木桶原理,短的那块板决定了木桶实际能装多少水。一个Webserver,假设其上的站点没做好权限分离,没控制好信任关系,则总体安全性就由安全性最差的那个站点决定。

    6.一个安全性很好的站点有可能会由于建立了不可靠的信任关系。导致站点被黑。

    7.CSRF是跨站请求伪造。

    CSRF会借用目标用户的权限做一些借刀杀人的事(注意是“借用”。而不是“盗取”目标权限)。然后去做坏事,“盗取”一般是XSS(跨站脚本攻击)最喜欢做的事。


    二,前端基础

    1.为了解决CSS兼容性而发展的CSS Reset技术,该技术会重置一些样式(这些样式在不同的浏览器中有不同的呈现)。兴许的CSS将在这个基础上又一次開始定义自己的样式。

    2.为了解决JavaScript兼容性。诞生了很多优秀的JavaScript框架,如jQuery, YUI等等。

    3.URL的请求协议差点儿都是HTTP,它是一种无状态的请求响应。即每次的请求响应之后。连接会马上断开或延时断开(保持一定的连接有效期)。断开后。下一次请求再又一次建立。

    4.HTTP是无状态的,那么每次在连接时,服务端怎样知道你是上一次的那个?这里通过Cookies进行会话跟踪,第一次响应时设置的Cookies在随后的每次请求中都会发送出去。

    Cookies还能够包含登录认证后的身份信息。

    5.iframe标签另一些有趣的安全话题。当站点页面使用iframe方式潜入一个页面时,我们约定站点页面是父页,而被嵌入的这个页面是子页。

    6.假设父页和子页之间是同域。那就非常easy,父页能够通过调用子页的contentWindow来操作子页的DOM树,同理,子页能够调用父页的contentWindow来操作父页的DOM树。

    假设它们不同域,则必须遵守同源策略,但子页还是能够对父页的location值进行写操作,这样能够让父页重定向到其它网页。只是对location的操作只唯独写权限,而没有读权限,这样就不能获取父页location URL的内容。否则有可能会造成隐私数据泄漏。比方,有的站点将身份认证token存在于URL中。

    7.对跨站师来说,大多数情况下,有了XSS漏洞,就意味着能够注入随意的JavaScript,有了JavaScript。就意味着被攻击者的不论什么操作都能够模拟,不论什么隐私信息都能够获取到。

    能够说,JavaScript就是跨站之魂。

    8.从window.location或location处能够获取URL地址中的数据。

    9.异步和同步相应。异步能够理解为单独开启了一个线程,独立于浏览器主线程去做自己的事,这样浏览器就不会等待(堵塞),这个异步在后台悄悄进行,所以利用AJAX的攻击显得非常诡异。无声无息。AJAX本身就是由JavaScript构成的,仅仅是XML并非必需的,XML在这里是想指传输数据格式是XML,比方。AJAX发出去的HTTP请求。响应回的数据是XML格式。然后JavaScript去解析这个XML DOM树得到相应节点的内容。事实上响应回的数据格式还能够是JSON(已经是主流),文本,HTML等等。AJAX中特别提到XML是由于历史原因。

    10.AJAX的核心对象是XMLHttpRequest。

    11.AJAX是严格遵守同源策略的。既不能从还有一个域读取数据,也不能发送数据到还有一个域。

    只是有一种情况,能够发送数据到还有一个域。W3C的新标准中。CORS開始推进浏览器支持这种跨域方案。如今的浏览器都支持这个方法了。步骤例如以下:

    www.foo.com(来源域)的AJAX向www.evil.com(目标域)发起了请求,浏览器会给自己主动带上Origin头。例如以下:

    Origin:  http://www.foo.com

    然后目标域要推断这个Origin值。假设是自己预期的。那么就返回。

    12.假设目标域不设置Access-Control-Allow-Origin:http://www.foo.com,那么隐私数据能够被偷到吗?答案是肯定的。

    13.对于GET方式,实际上就是一个URL。

    14.对于POST的请求,前面说的XMLHttpRequest对象就是一个很方便的方式,能够模拟表单提交,它有异步与同步之分,区别在于XMLHttpRequest实例化的对象xhr的open方法的第三个參数,true表示异步,false表示同步。假设使用异步方式。就是AJAX。异步则表示请求发出去后,JavaScript能够去做其它事情,待响应回来后会自己主动触发xhr对象的onreadystatechange事件,能够监听这个事件以处理响应内容。同步则表示请求发出去后,JavaScript须要等待响应回来。这期间就进入堵塞阶段。

    15.Cookie是一个奇妙的机制,同域内浏览器中发出的不论什么一个请求都会带上Cookie,不管请求什么资源,请求时。Cookie出如今请求头的Cookie字段中。

    16.Cookie常常被用来存储用户的会话信息,比方。用户登录认证后的Session。之后同域内发出d请求都会带上认证后的会话信息。

    17.HttpOnly是指仅在HTTP层面上传输的Cookie,当设置了HttpOnly标志后,client脚本就无法读写该Cookie。这样能有效地防御XSS攻击获取Cookie。

    18.Secure Cookie机制指的是设置了Secure标志的Cookie仅在HTTPS层面上安全传输,假设请求是HTTP的,就不会带上这个Cookie,这样能减少重要的Cookie被中间人截获的风险。

    19.本地Cookie与内存Cookie。它与过期时间(Cookie的expires字段)紧密相关。假设没设置过期时间,就是内存Cookie,这种Cookie会随着浏览器的关闭而从内存中消失。假设设置过期时间是未来的某个时间点。那么这种Cookie就会以文本形式保存在操作系统本地待过期时间到了才会消失。

    20.删除Cookie时,仅需设置过期值为过去的时间就可以。Cookie无法跨浏览器存在。

    21.Flash是跨浏览器的通用解决方式,Flash Cookie的默认存储数据大小是100KB。

    22.假设在h1之前有大段非法字符,怎样保证h1的代码顺利解析?在h1之前加上{}就可以,假设是在IE下。加上}就可以。这是浏览器解析差异导致的。

    {}h1{font-size:50px; color:red;}


    三,前端黑客之XSS

    1.XSS即跨站脚本,发生在目标站点中目标用户的浏览器层面上,当用户浏览器渲染整个HTML文档的过程中出现了不被预期的脚本指令并运行时。XSS就会发生。

    目标站点的目标用户:这里强调了场景

    浏览器:由于这类攻击是由浏览器来解析运行的。

    不被预期的:那么就非常可能是攻击者在输入时提交了可控的脚本内容,然后在输出后被浏览器解析运行。

    2.跨站脚本的重点不在“跨站”上,而应该在“脚本”上。这是从字面上来分析的。由于这个“跨”实际上属于浏览器的特性,而不是缺陷,造成“跨”这种假象是由于绝大多数XSS攻击都会採用嵌入一段远程或者说第三方域上的脚本资源。

    3.通俗地总结XSS为:想尽一切办法将你的脚本内容在目标站点中目标用户的浏览器上解析运行就可以。

    4.XSS有三类:反射型XSS(也叫非持久性XSS),存储型XSS(也叫持久型XSS)和DOM XSS 。

    5.存储型XSS的攻击是最隐蔽的。


    四,前端黑客之CSRF

    1.在跨站的世界中,CSRF相同扮演着及其重要的角色。CSRF的全称是Cross Site Request Forgery。即跨站请求伪造。

    攻击的发生是由各种请求造成的,对于CSRF来说,它的请求有两个关键点,跨网站的请求与请求是伪造的。

    2.安全风险总是出如今正常的流程中,如今我们发出的是一个删除文章的GET请求。对于合法的跨域请求,浏览器会放行。

    3.HTML中可以设置src/href等链接地址的标签都可以发起一个GET请求。

    4.还有通过JavaScript动态地生成的标签对象或CSS对象发起的GET请求,而发出POST请求仅仅能通过form提交方式。

    5.因为JSON格式的简洁与强大,站点開始逐渐使用JSON取代传统的XML进行传输数据。

    6.JSON数据假设以字典形式返回,直接在浏览器中显示会报错,原因是浏览器以为“{”开头的脚本应该是一段左右花括号包围住的代码块。所以,对这样的JSON数据的处理。通常会这样:

    eval(“(”+JSON_DATA+")");  //前后加上圆括号

    7.对于使用列表形式返回的JSON数据,它是一个Array对象,曾经能够通过劫持Array数据来进行JSON HiJacking攻击。


    五。前端黑客之界面操作劫持

    1.界面操作劫持攻击时一种基于视觉欺骗的Web会话劫持攻击。它通过在网页的可见输入控件上覆盖一个不可见的框(iframe),使得用户误以为在操作可见控件,而实际上用户的操作行为被其不可见的框所劫持。运行不可见框中的恶意代码,从而完毕在用户不知情的情况下窃取敏感信息,篡改数据等攻击。

    2.界面操作劫持分为三种:点击劫持。拖放劫持和触屏劫持。

    3.在浏览器中,拖放操作是不受“同源策略”限制的。用户能够把一个域的内容拖放到还有一个不同的域。

    因此,突破同源策略限制的拖放劫持能够演化出更广泛的攻击形式。突破非常多种防御。

    4.控件位置之间的层次关系使用z-index。并且不论什么浏览器都支持:

            z-index:1。数值能够是负数。高数值的控件会处于低数值控件的前面,数值越高,控件越靠近用户。

    六。漏洞挖掘

    1.回到XSS漏洞挖掘上。上面说了攻击者可控的输入点有<path>,<query>,<fragment>三个。事实上<fragment>里的值一般不会出如今服务端解析。除非Web 2.0站点。

    2.最普通的场景出如今<div id="body" >[输出]</div>位置,那么提交:

        id=1<script>alert(1)</script>就能够触发XSS了。

        可假设出如今以下这些标签中呢?

        <title></title>

        <textarea></textarea>

        <xmp></xmp>

        <iframe></iframe>

        <noscript></noscript>

        <noframes></noframes>

        <plaintext></plaintext>

        比方。代码<title><script>alert(1)</script></title>会弹出提示框吗?答案是:都不会!

    这些标签之间无法运行脚本。XSS漏洞挖掘机制必须具备这种区分能力,比方,发现出如今<title></title>中。就将提交的payload变为:

        </title><script>alert(1)</script>

        除了这些,还有两类特殊的标签<script>和<style>。它们是不能嵌套标签的,并且payload构造情况会更灵活,除了闭合相应的标签外,还能够利用它们自身可运行脚本的性质来构造特殊的payload。

    3.HTML是一个非常不严格的标记语言(它的反面代表是XML)。属性值能够不用引號。或者使用单引號。双引號。反单引號(仅IE浏览器支持)进行引用。

    4.“探子”的目的有两个:目标參数值是否出如今响应上。假设不出现。就全然不是必需进行兴许的payload请求与分析,由于这些payload请求与分析可能会进行多次,浪费请求资源;目标參数值出如今HTML的哪个部分,从上面的分析我们已经知道,不同的HTML部分对待XSS的机制是不一样的,请求的payload当然也不一样。

    5.肉眼看到的一个文字或符号单元就是一个字符(包含乱码)。一个字符可能相应1~n字节,1字节为8位,每一位要么为1。要么为0。

    6.一个字符相应1~n字节是由字符集与编码决定的,比方。ASCII字符集就是一个字符相应1字节,只是1字节仅仅用了7位。最高位用于其它目的,所以ASCII字符集共同拥有2的7次方(128)个字符,基本就是键盘上的英文字符(包含控制符)。

    7.<!-- [if IE] >全部的IE可识别<! [endif] -->

       <!-- [if IE 6] >仅IE6可识别<! [endif] -->

       <!-- [if lt IE 6] >IE6以及IE6下面版本号可识别<! [endif] -->

       <!-- [if gte IE 6] >IE6以及IE6以上版本号可识别<! [endif] -->
      这是IE所独有的,在其它浏览器看来与普通凝视无异。可是在IE看来却是可依据条件运行的,这给我们绕过过滤器创造了可乘之机。

    8.眼下在XSS中经常使用的伪协议有三个:javascript:,vbscript:(协议名也能够简写为vbs:)和data:

    9.同HTML标签和属性的特点相似。伪协议的协议名也是不区分大写和小写的,而且跟事件相仿,数据也能够做自己主动的HTMLDecode解码以及进制解码。

    10.@charset为规则;!

    important为声明。当中能被我们利用插入XSS脚本的地方仅仅有CSS资源类属性值和@import规则。以及一个仅仅能在IE浏览器下运行的属性值expression。

    11. var a = "123</script><script>alert(1);</script>"。

       对HTML页面中的JavaScript代码来说。</script>闭合标签具有最高优先权,能够在不论什么位置中断JavaScript代码。所以,在实际的过滤器实现中,其实还会区分引用变量中是否使用了</script>闭合标签,假设使用了,则要用反引线做转换“<\/script>”。

    另外,还要注意引用变量的数据走向,看是否能有DOM XSS的可能性。

    12.依据需求的不同,JSON大体上有两种格式:没有callback函数名的裸Object形式和有callback函数名的參数调用Object的形式,例如以下:

      [{"a":"b"}]

      callback([{"a":"b:"}])

      后者的存在主要是为了跨域传输数据的须要,而这个特性通常也成了攻击者跨域获取用户隐私数据的重要渠道。

    七,漏洞利用

    1.<script>标签请求内容可跨域,这是合法的功能。请求到是数据必须是合法的JavaScript语法格式。

    这样的技术在之前有提过。包含请求回来的是JSON+CallBack函数这样的数据内容(这样的跨域数据通信被称为JSONP)。

    八。HTML5安全

    九。Web蠕虫

    1.Web蠕虫主要包含:XSS蠕虫。CSRF蠕虫,Clickjacking蠕虫,这三类蠕虫都与详细的漏洞风险有关系,从名字上非常好区分。为了更好地表述Web蠕虫思想,会顺带提及第四类:文本蠕虫。

    2.这些蠕虫除了利用的漏洞不一样,其本质是一样的,都是使參与进Web2.0交互的用户受到了欺骗,导致被动或主动(或介于两者之间)地传播了威胁。

    从XSS蠕虫到CSRF蠕虫。再从Clickjacking蠕虫到文本蠕虫,越往后,社工的成分越大。

    3.利用了大众的心理,在心理作用的驱使下去传播,我们称之为文本蠕虫。

    4.蠕虫具有的最基本的两个性质例如以下:传播性和病毒行为。

    十,关于防御

  • 相关阅读:
    SQLServer 时间差运算
    phpStudy
    解决Apache/PHP无法启动的问题
    apche的主配置文件)
    知识总结
    学完了js的知识,一起分享总结知识点
    JS的学习体会与分享
    SpringBoot -- pom.xml文件
    c++基本知识点
    c语言基本常识5
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5097262.html
Copyright © 2011-2022 走看看