一、浏览器的同源策略

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

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

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的代码如下,

<?php

  echo $_GET['x'];

?>

输入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代码如下:

<style>

#click{

  width:100px;

  top:20px;

  left:20px;

  position:absolute;

  z-index:1

}

#hidden{

  height:50px;

  width:120px;

  position:absolute;

  filter:alpha(opacity=50);

  opacity:0.5;

  z-index:2

}

</style>

<input id="click" value="Click me" type="button"/>

<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. STP RSTP

    一.透明网桥 1.对于一般的透明网桥来说,通常都具有以下的特点: +拓展LAN的能力 +自主动态学习站点的地址信息 当网桥的某个端口上收到含有某个源MAC地址的数据帧时,它就把该MAC地址和接收该数据 ...

  2. VLAN 及 GVRP 配置

    一.VLAN配置 +进入vlan视图,如果指定的vlan没有创建则先创建它 [undo]vlan vlan_id undo vlan 剔除已创建的vlan VLAN_id:要进入的或要创建并进入的VL ...

  3. 事件之父View和子view的点击事件的执行过程

    Android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解. 一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN-& ...

  4. [UE4]自定义服务器Service

  5. USACO 2008 Running(贝茜的晨练)

    [题解] 动态规划,dp[i][j]表示第i分钟疲劳度为j的最长距离. [代码] #include <iostream> #include <cstdlib> #include ...

  6. python requests 发起http POST 请求

    python requests 发起http POST 请求,带参数,带请求头: #!/usr/bin/env python # -*- coding: utf-8 -*- import reques ...

  7. Spring boot 下使用 Swagger

    通过Swagger 可以更好的将后台的RESTfull API文档化,如下图所示: 1. Swagger 主要依赖以下两个jar包: <!-- https://mvnrepository.com ...

  8. ant编译时提示一大堆软件包不存在的问题

    ant编译时提示一大堆软件包不存在的问题  解决方案: 把项目的 lib 里的jar包 放的 jdk的jre的ext的目录下 例如 java home 是 D:JavaEEJavajdk1.8.0_1 ...

  9. jq-杂记

    点击消失 <script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"> </script& ...

  10. Maintenance Planner calculate SPs by manual

    note Are you unable to view your system or updated system information? Apply the latest version of t ...