小说阅读

作者: 前端知识  发布:2019-10-19

结语

有趣的是,反射型CSS注入实际上比存储型CSS注入更致命,因为存储型CSS注入需要一个服务器在受害者渲染之前来更新CSS。

一段时间以来,CSS注入在严重程度上来回变化。过去IE浏览器是允许用户在CSS中执行Javascript代码的。这个演示也从某种程度上表明了CSS注入,以及在你的域上渲染不受信任的CSS仍会导致严重的安全问题。

*参考来源:github,FB小编 secist 编译,转载请注明来自FreeBuf.COM

1 赞 收藏 评论

图片 1

js闭包其实不难,你需要的只是了解何时使用它

究竟什么是闭包?闭包在什么场景下使用?写前端程序需要用到闭包吗?我用jQuery也能写的好好滴呀?闭包可以解决哪些问题?使用闭包会带来哪些好处?

闭包是指可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。

包含两方面:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)

既然所有函数都是闭包,还有必要专门提这个概念吗?大多数函数被调用时(invoked),使用的作用域和他们被定义时(defined)使用的作用域是同一个作用域,这种情况下,闭包神马的,无关紧要。但是,当他们被invoked的时候,使用的作用域不同于他们定义时使用的作用域的时候,闭包就会变的非常有趣,并且开始有了很多的使用场景,这就是你之所以要掌握闭包的原因。

理解“闭包”:

step1:掌握嵌套函数的词法作用域规则(lexical scoping rules)。只要记住一点:词法作用域的规则,即函数被执行时(executed)使用的作用域链(scope chain)是 被定义 时的scope chain,而不是执行时的scope chain,就可以很容易的理解闭包的行为了。

step 2:掌握闭包的使用场景。

  • 闭包经典使用场景一:通过循环给页面上多个dom节点绑定事件
  • 闭包使用场景二:封装变量
  • 闭包使用场景三:延续局部变量的寿命

无iFrames

要做到无iFrame,我将使用一种类似于之前我讨论过的方法:我将创建一个弹窗,然后在设置计时器后更改弹出窗口的位置。

使用这种方法,我仍然可以加载受害者的CSS,但我不再依赖于受害者是否允许iFrame。因为最初的弹出是通过用户事件触发的,所以我并没有被浏览器阻止。

为了强制重载,我在CSS注入间弹出一个虚拟窗口,如下:

JavaScript

var win2 = window.open('', 'f', "top=100000,left=100000,menubar=1,resizable=1,width=1,height=1") var win2 = window.open(`, 'f', "top=100000,left=100000,menubar=1,resizable=1,width=1,height=1")

1
2
var win2 = window.open('https://security.love/anything', 'f', "top=100000,left=100000,menubar=1,resizable=1,width=1,height=1")
var win2 = window.open(`https://security.love/cssInjection/victim.html?injection=${css}`, 'f', "top=100000,left=100000,menubar=1,resizable=1,width=1,height=1")

深入理解 JavaScript 异步 

背景

正如原文所描述的那样,CSS属性选择器开发者可以根据属性标签的值匹配子字符串来选择元素。 这些属性值选择器可以做以下操作:

  • 如果字符串以子字符串开头,则匹配
  • 如果字符串以子字符串结尾,则匹配
  • 如果字符串在任何地方包含子字符串,则匹配

属性选择器能让开发人员查询单个属性的页面HTML标记,并且匹配它们的值。一个实际的用例是将以“”开头的所有href属性变为某种特定的颜色。

而在实际环境中,一些敏感信息会被存放在HTML标签内。在大多数情况下CSRF token都是以这种方式被存储的:即隐藏表单的属性值中。

这使得我们可以将CSS选择器与表单中的属性进行匹配,并根据表单是否与起始字符串匹配,加载一个外部资源,例如背景图片,来尝试猜测属性的起始字母。

通过这种方式,攻击者可以进行逐字猜解并最终获取到完整的敏感数值。

想要解决这个问题受害者可以在其服务器实施内容安全策略(CSP),防止攻击者从外部加载CSS代码。

2017,我们来聊聊 Node.js

没有后端服务器

在CureSec的文章中描述了将数据传输到后端服务器,但由于CSRF是针对客户端的攻击,因此如果我们能想出一种不需要服务器的方法,那么就可以为我们节省大量的开销和简化我们的操作。

为了接收受害者客户端加载资源,我们可以利用Service Workers来拦截和读取请求数据。Service Workers目前只适用于同源请求,在我的演示中受害者和攻击者页面已处于同一源上。

不过不久后,chrome很可能会合并这个实验性的功能,允许Service Workers拦截跨域请求。

这样,就可以确保我们在客户端的攻击100%的执行,并强制用户在10秒内点击链接执行CSRF攻击,演示如下:

【译文】了解XSS攻击

跨站点脚本(Cross-site scripting,XSS)是一种允许攻击者在另一个用户的浏览器中执行恶意脚本的脚本注入式攻击。攻击者并不直接锁定受害者。而是利用一个受害者可能会访问的存在漏洞的网站,通过这个网站间接把恶意代码呈递给受害者。对于受害者的浏览器而言,这些恶意代码看上去就是网站正常的一部分,而网站也就无意中成了攻击者的帮凶。

恶意代码是如何注入的:对于攻击者来说能够让受害者浏览器执行恶意代码的唯一方式,就是把代码注入受害者从网站下载的页面中。如果网站直接在页面中呈现用户输入的内容的话,这种攻击有可能得逞。因为攻击者可以以字符串的形式向页面插入一段受害者浏览器能够执行的代码。比如一段评论包含了"<script></script>",页面加载就中招了。

什么是恶意脚本:Javascript的执行环境受到严格限制并只有非常有限的权限访问用户的文件和操作系统,所以不算特别恶意。恶意的有Javascript有权访问一些用户的敏感信息,比如cookie;Javascript能够通过XMLHttpRequest或者其他一些机制发送带有任何内容的HTTP请求到任何地址;Javascript能够通过DOM操作方法对当前页面的HTML做任意修改。

恶意脚本的后果:攻击者有能力发动以下几类攻击,Cookie窃取;Cookie窃取;钓鱼网站(Phishing)。

非常值得注意的重要一点是,恶意代码只有在受害者的浏览器中最终得到解析之后才算得上是恶意,这只可能发生有XSS缺陷的站点上。

攻击是如何工作的:攻击者利用提交网站表单将一段恶意文本插入网站的数据库中;受害者向网站请求页面;网站从数据库中取出恶意文本把它包含进返回给受害者的页面中;受害者的浏览器执行返回页面中的恶意脚本,把自己的cookie发送给攻击者的服务器。

XSS攻击类型:虽然XSS攻击的终极目标是在受害者的浏览器中执行恶意脚本,但是实现这个目标的不同途径还是有根本上的差别的。有持续型XSS攻击:恶意文本来源于网站的数据库;反射型XSS攻击:恶意文本来源于受害者的请求;基于DOM的XSS攻击:利用客户端而不是服务端代码漏洞发动攻击。

阻止XSS攻击的方式:编码,也就是转义用户的输入,这样浏览器就会把它解读为数据而不是代码;校验,也就是对用户的输入进行过滤,这样浏览器仍然把它解读为代码但当中已不存在恶意指令了。

 

Demo

如上所述,因为我并不想运行一个web服务器,所以我使用service workers拦截和模拟服务器端组件。目前,该演示只适用于Chrome浏览器。

首先,我创建了一个易受攻击的目标,它存在一个基于DOM的CSS注入漏洞,并在页面放置了一个敏感token。我还对脚本标签添加了一些保护措施,对左尖括号和右尖括号进行了编码。

<form action="" id="sensitiveForm"> <input type="hidden" id="secret" name="secret" value="dJ7cwON4BMyQi3Nrq26i"> </form> <script src="mockingTheBackend.js"></script> <script> var fragment = decodeURIComponent(window.location.href.split("?injection=")[1]); var htmlEncode = fragment.replace(/</g,"<").replace(/>/g,">"); document.write("<style>" htmlEncode "</style>"); </script>

1
2
3
4
5
6
7
8
9
<form action="https://security.love" id="sensitiveForm">
    <input type="hidden" id="secret" name="secret" value="dJ7cwON4BMyQi3Nrq26i">
</form>
<script src="mockingTheBackend.js"></script>
<script>
    var fragment = decodeURIComponent(window.location.href.split("?injection=")[1]);
    var htmlEncode = fragment.replace(/</g,"&lt;").replace(/>/g,"&gt;");
    document.write("<style>" htmlEncode "</style>");
</script>

接下来,我们将强制加载受害者的CSS,并且使用上述方法,可一次窃取(猜解)一个敏感字符。

在接收端,我已经定义了一个拦截请求的service worker,并通过post-message将它们发送回域,然后我们将token存储在本地存储中以供后续使用。你也可以想象一个后端Web服务器,通过Web套接字或轮询将CSRF token回发给攻击者域。

目前该测试仅支持CHROME:

demo

如果你的浏览器支持的话,只需点击打开页面任意位置,你将看到CSRF token将逐一被猜解出来。

优化浏览器前端

为了提升用户体验(User Experience,UX),我们希望前端提供快速加载和执行的网页。而对于提升开发者体验(Developer Experience, DX)来说,我们希望前端能够快速,简便和实用。这样的优化不仅使我们的用户和开发者满意,也会显着提高SEO排名, 因为Google的SEO排名会偏向于优化较好的页面。

优化浏览器前端的方法:首先,我们不能控制浏览器或者改变它的行为方式,但是我们可以理解它的工作原理,用来优化我们页面的加载。幸运的是,浏览器行为的基本原理相当稳定并有据可查,长时间内也不会显着改变;其次,代码,堆栈,结构和模式是我们可以控制的。他们更灵活,改变地更快,为我们提供更多的选择。 

利用CSS注入(无iFrames)窃取CSRF令牌

2018/03/05 · CSS · CSRF

原文出处: FreeBuf.COM   

CSS相信大家不会陌生,在百度百科中它的解释是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。那么,它仅仅只是一种用来表示样式的语言吗?当然不是!其实早在几年前,CSS就已被安全研究人员运用于渗透测试当中。这里有一篇文章就为我们详细介绍了一种,使用属性选择器和iFrame,并通过CSS注入来窃取敏感数据的方法。但由于该方法需要iFrame,而大多数主流站点都不允许该操作,因此这种攻击方法并不实用。

这里我将为大家详细介绍一种不需要iframe且只需10秒,就能为我们有效地窃取CSRF token的方法

一旦用户的CSRF token被窃取,由于受害者已经在攻击者的网站上,因此攻击者可以继续攻击并完成对用户的CSRF攻击操作。

新一代 JavaScript 的开发图谱(2017)

我将会将这张地图分为几个你需要解决的问题,对于每个问题,我将会:

  • 描述问题或工具需求
  • 决定你需要选取哪种工具
  • 讨论为什么这样选
  • 给一些其他选择

问题:

  • 包管理
  • JavaScript风格
  • 编译
  • Linting
  • 打包工具
  • 测试
  • UI 库/状态管理
  • DOM 操作和动画
  • 样式

本文由金沙澳门官网发布于前端知识,转载请注明出处:小说阅读

关键词: 金沙澳门官网