一、浏览器的同源策略

同源策略:不同域的客户端脚本在未经授权的情况下不能读写对方的资源。

这里有几个关键词:域、脚本、授权、读写、资源

1、同域要求两个站点:同协议、同域名、同端口。下表展示了所列站点与http://www.a.com是否同域的情况。

站点   是否同域 原因
https://www.a.com 不同域 协议不同,http和https是不同的协议
http://map.a.com 不同域 域名不同,map子域和www子域不同
http://a.com 不同域 域名不同,顶级域名和www子域不是一个概念
http://www.a.com:8080 不同域 端口不同,8080和默认的80端口不同
http://www.a.com/a/ 同域 满足同协议、同域名、同端口,只是多了一个目录

2、脚本:主要指JavaScript和ActionScript,当然也包括VBScript(相对较孤立)。

3、授权:如Ajax跨域,默认情况下是不允许跨域访问的,只有目标站点(假如是http://www.a.com)明确返回http响应头 Access-Control-Allow-Origin:http://www.e.com时,www.e.com站点上的客户端脚本才能有权通过Ajax技术对www.a.com上的数据进行读写操作。

4、读写权限:web上的资源有很多,有的只有读权限,有的同时拥有读和写的权限。比如:http请求头里的Referer只可读,而document.cookie则具备读写权限。

5、资源:同源策略里的资源是指web客户端的资源。一般来说,包括:http消息头、整个DOM树、浏览器存储(Cookies、FlashCookies、localStorage等)。

如果没有同源策略,web世界会发生什么:当你登录网易邮箱,并打开另一个站点e时,e站点上的JavaScript就可以跨域读取你的网易邮箱数据,导致隐私泄露。

二、信任问题

安全问题从某种程度上讲就是信任问题。同源策略也是信任的一种表现,默认情况下,不同源则不信任。下面有两个关于信任的场景:

1、场景一

一个Web服务器上有两个网站A和B,黑客入侵目标是A,但是直接入侵A遇到了巨大困难,而入侵B却成功了。由于A与B之间过于信任(在同一个文件系统里,且没有有效的文件权限配置),未能做很好的分离,黑客就可以轻松地攻克网站A。

2、场景二

网站本身是很安全的,由于嵌入了第三方内容(如统计脚本),建立了信任关系,如果第三方的统计脚本被黑客挂马,将导致网站不安全。虽然这样不会导致你的网站直接被入侵,但却危害到了访问你网站的广大用户。

三、前端安全的主要三大类

Web前端安全主要包括跨站脚本(XSS)、跨站请求伪造(CSRF)、界面操作劫持这三大类。

1、XSS

XSS发生在目标网站中目标用户的浏览器层面上,当用户浏览器渲染整个html文档的过程中出现了不被预期的脚本指令并执行时,XSS就会发生。也可以通俗地总结XSS为:想尽一切办法将你的脚本内容在目标网站中目标用户的浏览器上解析执行即可。

场景:

http://www.a.com/xss/reflect.php的代码如下,

  1. <?php
  2.  
  3.   echo $_GET['x'];
  4.  
  5. ?>

输入x的值未经任何过滤就直接输出,可以提交:

http://www.a.com/xss/reflect.php?x=<script>alert(1)</script>

服务器端解析时,echo就会完整地输出<script>alert(1)</script>到响应体中,然后浏览器解析执行触发。

2、CSRF

对于CSRF来说,它的请求有两个关键点:跨站点的请求与请求是伪造的。

跨站点请求的来源是其他站点,比如,目标网站的删除文章功能接收到来自恶意网站客户端(JavaScript、Flash、HTML等)发出的删除文章的请求,这个请求就是跨站点的请求,目标网站应该区分请求来源。

如果请求的发出不是用户的意愿,那么这个请求就是伪造的。

场景:

  目标网站A:www.a.com  目标网站B:www.b.com

目标网站A上有一个删除文章的功能,通常是用户单击“删除链接”时才会删除文章,这个链接是www.a.com/blog/del?id=1,id代表不同的文章。

CSRF思路,步骤如下:

  • 在恶意网站B上编写一个CSRF页面(www.b.com/csrf.htm),考虑用代码<img src=http://www.a.com/blog/del?id=1/>向目标网站A发出一个GET请求的方法。
  • 然后欺骗已经登录目标网站A的用户访问www.b.com/csfr.htm页面,攻击发生。

这里攻击过程有三个关键点:跨域发出了一个GET请求、可以无JavaScript参与、请求是身份认证后的。

3、界面操作劫持

界面操作劫持是一种通过在可见输入控件上覆盖一层不可见的框(iframe),使得用户误以为在操作可见控件,而实际上操作行为被不可见框劫持,执行不可见框的恶意支持代码,从而导致用户在不知情的情况下被窃取敏感信息、篡改数据等。

下面是一个点击劫持的简单例子,clickjacking.htm代码如下:

  1. <style>
  2.  
  3. #click{
  4.  
  5.   width:100px;
  6.  
  7.   top:20px;
  8.  
  9.   left:20px;
  10.  
  11.   position:absolute;
  12.  
  13.   z-index:1
  14.  
  15. }
  16.  
  17. #hidden{
  18.  
  19.   height:50px;
  20.  
  21.   width:120px;
  22.  
  23.   position:absolute;
  24.  
  25.   filter:alpha(opacity=50);
  26.  
  27.   opacity:0.5;
  28.  
  29.   z-index:2
  30.  
  31. }
  32.  
  33. </style>
  34.  
  35. <input id="click" value="Click me" type="button"/>
  36.  
  37. <iframe id="hidden" src="inner.htm" scrolling="no"></iframe>

嵌入的inner.htm代码如下:

<input style="width:100px;" value="Login" type="button" onclick="alert('test')"/>

web前端安全的三个关键点的更多相关文章

  1. web前端学习(三)css学习笔记部分(8)-- SVN的介绍和应用、CSS动画效果、CSS3布局属性全接触

    15.SVN的介绍和应用 15.1.SVN的介绍和应用课程概要 将代码进行集中管理,有版本号的进行迭代,方便集体工作的build流程 15.2.SVN的介绍 SVN是Subversion的简称,是一个 ...

  2. web前端学习(三)css学习笔记部分(5)-- CSS动画--页面特效、HTML与CSS3简单页面效果实例

    CSS动画--页面特效部分内容目前仅仅观看了解内容,记录简单笔记,之后工作了进行内容的补充 7.  CSS动画--页面特效 7.1  2D.3D转换 7.1.1  通过CSS3转换,我们能够对元素进行 ...

  3. web前端监控的三个方面探讨

    一. js错误监控方式 1. 主动判断 我们在一些运算之后,得到一个期望的结果,然而结果不是我们想要的 // test.js function calc(){ // code... return va ...

  4. web前端学习(三)css学习笔记部分(7)-- 文字和字体相关样式、盒子相关样式、背景与边框相关样式

    12.  文字和字体相关样式 12.1  CSS3 给文字添加阴影 使用 text-shadow 属性给页面上的文字添加阴影效果,text-shadow 属性是在CSS2中定义的,在 CSS2.1 中 ...

  5. 程序猿必备的8款web前端开发插件三

    1.HTML5 Canvas 3D波浪翻滚动画 之前我们分享过好几款基于HTML5 Canvas的波浪和水波纹动画,比如这款HTML5 3D波浪起伏动画特效和这款超酷无比的HTML5 WebGL水面水 ...

  6. [Web 前端] 015 css 三种元素的介绍

    1. 块元素,内联元素,内联块元素 元素就是标签 布局中常用的有三种标签 块元素 内联元素 内联块元素 1.1 块元素 也称为行元素 布局中常用的标签,如 div.p.ul.li.h1~h6.dl.d ...

  7. [Web 前端] 006 css 三种页面引入的方法

    1. 外链式 用法 step 1: 在 html 文档的 head 头部分写入下方这句话 <link rel="stylesheet" href="./xxx.cs ...

  8. web前端学习(三)css学习笔记部分(6)-- 选择器详解

    9.选择器详解 9.1  属性选择器 CSS3 属性选择器,在 CSS3 中,追加了三个属性选择器分别为:[att*=val].[att^=val]和[att$=val],使得属性选择器有了通配符的概 ...

  9. web前端学习(三)css学习笔记部分(2)-- css定位+盒子操作

    3.CSS定位 3.1定位 1.CSS定位: 改变元素在页面上的位置 2.CSS定位机制 普通流:元素按照其在HTML中的位置顺序决定排布的过程 浮动 绝对布局 属性 描述 position 把元素放 ...

随机推荐

  1. Html5弹幕视频播放器插件

    Danmmu Player是一个具备弹幕功能的Html5视频播放器.我们在观看视频的时候,可以对视频发表自己的观点,当点击发送按钮后,发表的内容会在视频屏幕上以彩弹的形式发出,并做滚动展示动画效果,即 ...

  2. MySql 索引优化实例

    查询语句 SELECT customer_id,title,content FROM `product_comment` WHERE audit_status=1 AND product_id=199 ...

  3. UI 性能因素考虑

    浏览器的最大并发连接数一般在4到6之间,首先了解影响加载的性能因素: (1)下载的文件太大 (2)发出的请求太多 (3)请求相应不及时 针对这些因素,一般会考虑减少请求次数: (1)对静态文件设置缓存 ...

  4. 小程序API录音 微信录音后 Silk格式转码MP3

    http://www.cnblogs.com/wqh17/p/6911748.html

  5. Centos7 配置ssh连接

    Centos7 配置ssh连接 1.检查是否安装openssh-server:#yum list installed | grep openssh-server 安装openssh-server:#y ...

  6. Jupyter配置步骤

    Jupyter是基于浏览器的可交互式开发工具,在数据科学界非常受欢迎,它功能齐全,使用方便,是一款数据分析和建模挖掘的利器. 本文简介Jupyter的配置和使用过程 一.修改添加国内镜像 通常我会先安 ...

  7. 关于-RegExp

    // exec() exec() 查找并返回当前的匹配结果,并以数组的形式返回. // test() test() 方法检索字符串中的指定值.返回值是 true 或 false. // compile ...

  8. (转)Java调用Weservice

    原文地址:http://www.cnblogs.com/jiangxu1989/p/6491483.html https://www.cnblogs.com/neughj/p/5145630.html ...

  9. gulp 配置达到实现import export支持

    gulp.task('tojs', () => { return gulp.src('./es/**/*.js') .pipe(babel({ babelrc: false, plugins: ...

  10. Mysql数据类型DECIMAL(M,D)用法

    在MySQL数据类型中,例如INT,FLOAT,DOUBLE,CHAR,DECIMAL等,它们都有各自的作用,下面我们就主要来介绍一下MySQL数据类型中的DECIMAL类型的作用和用法. 一般赋予浮 ...