读《白帽子讲Web安全》之客户端脚本安全(一)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

【第2章  浏览器安全】

1、同源策略(Same Origin Policy)是一种约定,它是浏览器最核心也最基本的安全功能。

浏览器的同源策略,限制了来自不同源的“document”或脚本,对当前“document”读取或设置某些属性

2、比如JS,来自不同协议、端口、子域名等是不同源的。host指的是域名或者IP地址。

需要注意,对于当前页面来说,页面存放JavaScript文件的域并不重要,重要的是加载JavaScript页面所在的域是什么。

3、在浏览器中,<script>、<img>、<iframe>、<link>等标签都可以跨域加载资源而不受同源策略的限制。但是<script>等标签仅能加载资源,而不能读、写资源的内容。

4、挂马:在网页中插入一段恶意代码,利用浏览器漏洞执行任意代码的攻击方式,在黑客圈子里形象地成为“挂马”。

5、浏览器的多进程架构,将浏览器的各个功能模块分开,各个浏览器实例分开,当一个进程崩溃时,也不会影响到其他的进程。

Google Chrome是第一个采取多进程架构的浏览器,它的主要进程分为:浏览器进程、渲染进程、插件进程、扩展进程。插件进程如Flash、java、pdf等与浏览器进程严格隔离,因此不会互相影响。

渲染引擎由Sandbox隔离,网页代码要与浏览器内核进程通信、与操作系统通信都需要通过IPC channel,在其中会进行一些安全检查。

6、Sandbox即沙箱,计算机技术发展到今天,Sandbox已经成为泛指“资源隔离类模块”的代名词。Sandbox的设计目的一般是为了让不可信任的代码运行在一定的环境中,限制不可信任的代码访问隔离区之外的资源。如果一定要跨越Sandbox边界产生数据交换,则只能通过指定的数据通道,比如经过封装的API来完成,在这些API中会严格检查请求的合法性。

7、恶意网址分为2类:挂马网站、钓鱼网站

8、提供恶意网址黑名单的机构:

1)PhishTank是互联网上免费提供恶意网址黑名单的机构之一,它的黑名单由世界各地志愿者提供,且更新频繁。

2)Google也公开了其内部使用的SafeBrowsingAPI,以获取Google的恶意网址库。

【第3章  跨站脚本攻击(XSS)】

详情见“读《白帽子讲Web安全》之客户端脚本安全(一)”

【第4章 跨站点请求伪造(CSRF)】

0、CSRF的本质:CSRF为什么能够攻击成功?其本质原因是重要操作的所有参数都是可以被攻击者猜测到的

1、CSRF的全名是Cross Site Request Forgery

2、请求时攻击者伪造的,比如想删除A在sohu上的博客,一般博主登陆后sohu博客后,再请求url:http://blog.sohu.com/manage/entry.do?m=delete&id=12345 ,就能把编号为“12345”的博客删除。攻击者就在自己的域http://www.a.com/csrf.html 构造一个页面,里边一个img标签是请求url的内容,然后引诱博主去电子自己的页面,然后就能删除那个帖子了。

上述攻击者伪造的请求之所以能够被搜狐服务器验证通过,是因为用户的浏览器成功发送了Cookie的缘故。

注意XSS的区别:XSS攻击,通常指黑客通过“HTML注入”篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。

3、浏览器所持有的Cookie分为两种:一种是“Session Cookie”,又称“临时Cookie”;另一种是“Third-party Cookie”,也称为“本地Cookie”。

两者区别:“Third-party Cookie”是服务器在Set-Cookie时指定的 Expire 时间,只有到了Expire 时间后Cookie才会失效,所以这种Cookie会保存在本地; 而Session Cookie则没有指定Expire 时间,所以浏览器关闭后,“Session Cookie”就失效了。

“Session Cookie”保存在浏览器进程的内存空间中,而“Third-party Cookie”则保存在本地。

在浏览网站的过程中,若是一个网站设置了Session Cookie,那么在浏览器进程的生命周期内,即使浏览器新开了Tab页,Session Cookie也都是有效的(应该是同域)。

如果浏览器从一个域的页面中,要加载另一个域的资源,由于安全原因,某些浏览器会阻止“Third-party Cookie”的发送。

4、P3P Header 是W3C制定的一项关于隐私的标准,全称是 The Platfrom for Privacy Preferences.

如果网站返回给浏览器的HTTP头中包含有P3P头,则在某种程度上来说,将允许浏览器发送第三方Cookie。在IE下即使是<iframe>、<script>等变迁也将不再拦截第三方Cookie的发送。

在网站的业务中,P3P头主要用于类似广告灯需要跨域访问的页面。但是遗憾的是P3P头设置以后,对于Cookie的影响将扩大到整个域中的所有页面,因为Cookie是以域和path为单位的,但这并不符合“最小权限”原则。

5、CSRF 的GET、Post都有利用的可能。

6、CSRF蠕虫。

7、CSRF的防御。

1)验证码:强制用户必须与应用进行交互,避免在用户不知情的情况下构造网络请求。

2)Referer Check:这个缺陷在于,服务器并非什么时候都能读取到Referer。

3)Anti CSRF Token:

在URL中,保持原参数不变,新增一个参数Token。这个Token值是随机的,不可预测。

Token的生成算法要足够安全,然后Token应该作为一个“秘密”,为用户与服务器所共同持有,不能被第三方知晓。在实际应用时,Token可以放在用户的Session中,或者浏览器的Cookie中。

【第5章 点击劫持 ClickJacking】

定义:点击劫持是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。

最简单的就是,有的网站,一点击就开始跳转到广告页。

在CSRF中,如果出现用户交互的页面,则攻击可能会无法顺利完成。与之相反的是,点击劫持没有这个顾虑,它利用的就是与用户产生交互的页面。

1、分类

Flash点击劫持

图片覆盖攻击

拖曳劫持与数据窃取

ClickJacking3.0:触屏劫持,比如智能手机上

2、防御方法

1)frame Busting

就是写一段JS代码,禁止iframe的嵌套。

2)X-Frame-Options

加一个HTTP头,有3个可选值,值不同,浏览器对加载frame页面的策略不同。

【第6章 HTML5安全】

1、新标签的XSS可能:比如<video>

2、iframe的sandbox属性

3、<a>和<area>标签定义了一个新的Link Types:noreferrer

4、canvas的妙用

5、浏览器实现的同源策略(Same Origin Policy)限制了脚本的跨域请求。但互联网的发展趋势是越来越开放的,因此跨域访问的请求也变得越来越迫切。同源策略给Web开发者带来了很多困扰,他们不得不想方设法地实现一些“合法”的跨域技术,因此诞生了jsonp、iframe跨域等技巧。

6、postMessage 跨窗口传递消息

postMessage允许每一个window(包括当前窗口、弹出窗口、iframe等)对象往其他的窗口发送文本消息,从而实现跨窗口的消息传递。这个功能是不受同源策略限制的。

7、WebStorage

对于HTML5来说,在移动互联网上的普及进程也许会更快,因此未来HTML5攻防的主战场,很可能会发生在移动互联网上。


转载于:https://my.oschina.net/bluefly/blog/310711

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/546130.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RocketMQ一行代码造成消息发送失败

这是我的第 198 期分享作者 | 丁威来源 | 中间件兴趣圈&#xff08;ID&#xff1a;dingwpmz_zjj&#xff09;分享 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;1、问题现象首先接到项目反馈使用 RocketMQ 会出现如下错误&#xff1a;错误信息关键点&#xf…

生命游戏(game of life)

生命游戏 &#xff08;game of life )是一款非常著名的游戏。它包括一个二维 矩形世界&#xff0c;这个世界中的每个方格居住着一个活着的或死了的细胞。一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量。如果相邻方格活着的细胞数量过多&#xff0c;这…

setpriority_Java Thread类的最终void setPriority(int priority)方法(带示例)

setpriority线程类最终void setPriority(int priority) (Thread Class final void setPriority(int priority)) This method is available in package java.lang.Thread.setPriority(int priority). 软件包java.lang.Thread.setPriority(int priority)中提供了此方法。 This me…

汇编级UART串口初始化与打印

用于新PCB板调试开发&#xff0c;在系统最开始&#xff08;内存初始化之前&#xff09;&#xff0c;尽快打印字符&#xff0c;验证CPU是否正常启动。 以freescale QorIQ 处理器兼容的UART为例&#xff0c;符合16550串口标准&#xff1a; /*UART DEBUG*/ /*#define CCSBAR_RESET…

Java 中的 String 有没有长度限制?

这是我的第 199 期分享作者 | Hollis来源 | Hollis&#xff08;ID&#xff1a;hollischuang&#xff09; 分享 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;关于String有没有长度限制的问题&#xff0c;我之前单独写过一篇文章分析过&#xff0c;最近我又抽…

c语言编程输入a是输出为a_C ++编程基本输入,输出,数据类型,声明能力倾向问题和解答...

c语言编程输入a是输出为aThis section contains C programming Basic Input, Output, Data types, Declaration etc Aptitude Questions and Answers with explanations. 本节包含C 编程的基本输入&#xff0c;输出&#xff0c;数据类型&#xff0c;声明等&#xff0c;以及有关…

关联数组(associative array)

关联数组&#xff08;associative array )是一种常用的抽象数据类型。它有很多别名&#xff0c;例如associative container , map , mapping , dictionary , finite map , table,index 等。它的特点是由一个关键字和其他各种属性组成的集合。典型的操作包括插入&#xff0c;删除…

开源 免费 java CMS - FreeCMS2.1 菜单管理

2019独角兽企业重金招聘Python工程师标准>>> 项目地址&#xff1a;http://www.freeteam.cn/ 菜单管理 FreeCMS在设计时定位于面向二次开发友好&#xff0c;所以FreeCMS提供了菜单管理功能&#xff0c;二次开发人员可以自由增加新的功能菜单到FreeCMS。 为了让后台…

本来想用“{{”秀一波,结果却导致了内存溢出!

这是我的第 200 期分享作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;生活中的尴尬无处不在&#xff0c;有时候你只是想简单的装一把&#xff0c;但某些“老同志”总是在不…

在Ruby中使用&运算符(new_array- arr&old_Array)创建数组实例

In the last articles, we have gone through many methods through which we can create Array Instances but you all must know that those all were Public class methods and now in the upcoming articles, we will be learning about Public instance methods. 在上一篇…

Run Length Encoding

游程编码 (Run Length Encoding ) 是一种简单的编码方法&#xff0c;通常用于控制论中对二值图像编码。ACM有一道题目就是关于该编码。见tzu 1149 或poj 1782 。虽然是简单题&#xff0c;我却花了好大功夫才搞定&#xff0c;功力还是不足阿。 程序代码如下&#xff1a; #incl…

局部变量竟然比全局变量快 5 倍?

这是我的第 201 期分享作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;喽&#xff0c;大家好&#xff0c;磊哥的性能优化篇又来了&#xff01;其实写这个性能优化类的文章初…

FreeMarker笔记 前言第1章 入门

简介 简介 FreeMarker是一款模板引擎&#xff1a;一种基于模板的、用来生成输出文本&#xff08;任何来自于HTML格式的文本用来自动生成源代码&#xff09;的通用工具。它是为Java程序员提供的一个开发包或者说是类库。它不是面向最终用户&#xff0c;而是为程序员提供的可以嵌…

优先级调度算法动态优先级_与优先级调度有关的问题及其解决方案

优先级调度算法动态优先级We are already familiar with what Priority Scheduling is. It is one of the most used process scheduling algorithm used in operating systems, in which every process is assigned with a priority. According to this algorithm, the proces…

hdoj 1013 Digital Roots

链接&#xff1a;zoj 1115 或 hdoj 1013 或poj 1519 虽说是水题&#xff0c;却几经波折才搞定。该题目中的数字可能非常大&#xff0c;所以不能使用整型数&#xff0c;只能采用字符变量 代码如下&#xff1a; #include <stdio.h>int digitalRoot(int n); int digitS…

厉害了,3万字的MySQL精华总结 + 面试100问!

这是我的第 202 期分享作者 | 派大新来源 | JavaKeeper&#xff08;ID&#xff1a;JavaKeeper&#xff09;分享 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;❝写在之前&#xff1a;不建议那种上来就是各种面试题罗列&#xff0c;然后背书式的去记忆&#x…

网页视频播放器代码大全 + 21个为您的站点和博客提供的免费视频播放器

推荐 使用 极酷 Web在线播放器。网页中嵌入视频代码综合全然版 1.avi格式 代码片断例如以下&#xff1a;  程序代码 <objectid"video"width"400"height"200"border"0"classid"clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA&q…

codejam题目_嵌套深度-Google CodeJam 2020资格回合问题解决方案

codejam题目Problem statement: 问题陈述&#xff1a; Given a string of digits S, insert a minimum number of opening and closing parentheses into it such that the resulting string is balanced and each digit d is inside exactly d pairs of matching parentheses…

hdoj 1015 Safecracker

见hdoj 1015 或 zoj 1403 或tzu 1308 我使用了枚举法&#xff0c;代码写的很罗嗦&#xff0c;可能还是深度优先搜索写起来更清晰。 /* hdoj 1015 */ #include <stdio.h> #include <string.h>#define MAX (125) #define RESLEN 5 int bubSort(int a[], int n); in…

漫话:为什么计算机起始时间是1970年1月1日?

这是我的第 203 期分享作者 | 漫画编程来源 | 漫画编程&#xff08;ID&#xff1a;mhcoding&#xff09;分享 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;问题复现1970-01-01对于开发者来说都是不陌生的&#xff0c;有些系统对于时间的处理如果不够好的话&…