文首发:看雪论坛 http://bbs.pediy.com/thread-217315.htm
04
指定站点攻击
虽然多数站点使用如前面所谈到的流行的framebusting技术,但是一些站点选择开发自身的framebusting技术,在这部分,我们将讨论一些在调查中发现的很有趣的防御手段,并且展示一些相关的技术来挫败他们。
4.1
黑暗中的一束光
Facebook的framebusting方法和流行的方法大不相同。它不是在自身框架外进行破坏,而是插入一个灰色的半透明div标签,这个标签包括了一个框架页面的所有内容,当用户点击div的任何一处,facebook就破坏框架。这个巧妙的方法允许内容被框架的同时,阻止了点击劫持攻击。以下是带漏洞的代码版本,我们已经报告给facebook。
If(top!= self){
Window.document.write(“<divstyle=’background:black; opacity: 0.5;filter:alpha(opacity=50);position:absolute; top:0px; left:0px; width:9999px;height:9999px; z-index: 1000001’ onClick=’top.location.href=window.location.href’></div>”)
当被框架时,这段代码插入一个黑色的9999*9999像素,50%透明的(0,0)处的div标签。因为所有出这个div之外的facebook内容都在框架之中,这个保护可以被载入足够大的框架挫败,由此整个框架的中心久位于黑色的div区域外。内容自然地流动到框架的中心并被直接显示给用户并且没有被黑色覆盖,框架代码如下,相应的页面如图5
<bodys t y l e=" overflow-x : hidden ;
border : 0 px ; margin : 0 px ; ">
<iframe width="21800px" height="2500px"
s r c=" http :/ / facebook . com/"
frameborder="0"
marginheight="0" marginwidth="0" >
</iframe>
<s c r i p t >window . s c ro l l T o ( 1 0 2 0 0 , 0 ) ;
</s c r i p t >
移除点击此处添加图片说明文字
Figure 5:Facebook’s elegant black layer defense
注意到 scrollTo 函数动态翻转滚动到 frame 的中心,这样内容出现得很清除。
4.2
域检查错误
USBank使用framebusting代码来检测referrer字段从而判断是否能够被框架化。工作代码如下:
i f ( s e l f!= top ) {
var dom = getDom( document . r e f e r r e r ) ;
var okDom = /usbank j l o c a lh o s t | usbnet / ;
var matchDomain = dom . search (okDom ) ;
i f ( matchDomain == -1){ //b u s t}
getDomain是一个用来返回URL中的域名信息,注意到任何包含USBank的都将被允许来框架页面,这完全不是开发者所希望的。举例来说,挪威的statehousebank(http://www.husbank.no)和莫斯科银行(http://www.rusbannk.org)都可互相来被允许框架页面,因为两者的域名中都包含由字符串usbank
4.3
信任问题
Myspace.com的framebusting代码:
移除点击此处添加图片说明文字
代码被设计成允许myspace被谷歌图片所框架。然而谷歌图片谷歌图片没有framebusting,结果就是一个攻击者框架谷歌图片然后通过谷歌额图片来框架myspace。因为myspace接收到来自谷歌图片的referrer它并不会识图导出框架。结果如图六所示:
移除点击此处添加图片说明文字
Figure 6: Because MySpace whitelists Google in
这个例子显示在framebusting的情景下,相互的信任关系会变得很危险。一个兄弟站点不使用framebusting会导致受信页面被攻击者框架化
05
安全地framebusting
现在我们将角度转到防御者的角度,讨论如何是一个占地那避免被框架化。首先我们回顾相关的用户端的额特点,然后给出一段有效抵御现有攻击的framebusting代码
5.1
x-frame-options
微软在IE8中为了抵抗点击劫持攻击特意引入了x-frame-options,这是一个HTTP响应报文中的报头,这个字段有两个不同的值:DENY和SAMEORIGIN。当时用DENY时,IE8将会在请求站点的框架内容中进行渲染。如果使用的是SAMEORIGIN,IE只会在顶层浏览内容来源和包含指令内容来源不同时才会禁止该页面。
尽管这个机制很有效,但是它还是有三个主要的局限。
每页策略指定:
该策略需要为每个页面指定,这可能使部署复杂化。为提供全面强制执行策略的能力,例如在登陆的时候,可以简化采用。
多域名问题
在目前的实现下不允许网站管理员提供允许框架网页的白名单,虽然白名单可能是危险的,但在某些情况下,管理员可能无法选择而至鞥你使用主域名。
代理
网络代理在添加,删除头部字段方面是臭名昭著的,如果一个网络代理剔除了x-frame-options字段,那网站将失去它的框架保护
x-frame-options已经被浏览器开发商迅速采用,出了firefox之外,每个最新版本的浏览器都使用了这个技术,danfirefox通过NoScriptfirefox插件提供此项功能。
但是在web方面采用较慢,最新一项调查显示,在top10000中只有4个网站使用了它,这个结论是和我们的观察是一致的,我们观察到只有三个站点使用了这项技术。
5.2
内容安全策略
内容安全策略是一个Mozilla计划,该计划向web开发人员提供了一种网站上可指定互动内容的方法,它在firefox3.7中的部署已经被提上了日程。和x-frame-options一样,策略通过HTTP响应头传送,它比x-frame-options更为通用,允许网站的所有者指定其他类型的内容互动,例如:它允许网站将脚本限制在特定的来源。
Web管理者可直接使用指定的frame-ancestors指令来指定那些来源能够被嵌入到frame或者iframe标签中去。因此不像x-frame-options,web管理者可指定允许的第三方网站嵌入到iframe中。CSP从x-frame-options的另外一些局限性中吃到了苦头。它并不提供一个强制的全局策略,到现在这个策略尚处于测试阶段还未被网站所使用。
5.3
使用javascript
到此x-frame-options或其他基于浏览器的防护手段被广泛使用,这使web站点几乎没有选择的余地只能使用javascript来对抗点击劫持。图7中所示的是目前我们认为最有效安全的framebusting代码
移除点击此处添加图片说明文字
页面加载时,样式表会隐藏页面上的所有内容。 如果禁用JavaScript,页面将保持为空。 类似地,如果页面被框架,它将保持空白,否则将尝试破坏框架。 如果framebusting代码被阻止,如通过挂起卸载事件或进行204冲洗攻击,页面将保持为空。该脚本仅显示内容页面不在框架中运行的文档。 请注意,通过浏览器设置或NoScript禁用JavaScript的用户将无法使用该站点。 如果是这样的话,设计师可能想要有一个后备机制。
在我们的示例中,整个页面最初是不可见的,但是通过让子元素不可见,这种防御可能更加地细粒度。这样,如果禁用JavaScript,则可以向用户显示一条消息。 但是,不建议激活超出该简单消息的任何功能子集。
我们通过注入代码到顶部页面手工测试了一些负载重的站点。 使用Firefox的YSlow和Chrome的Speed Tracer,我们无法识别渲染或加载时间的任何显着降低
我们强调,这个代码没有被证明是框架破坏的一种安全方法。 正如我们在整篇文章中所展示的,许多错误和漏洞可用于攻击者定位JavaScript framebusting,并且可能还有更多。 我们的代码片段可能已经很容易受到未知攻击的影响。但据我们所知,这是当前最好的方法。
06
相关工作
第一次提到透明iframe的负面影响是2002年MozzilaFirefox浏览器的错误报告[21]。术语“劫持”[10]是由Hansen和Grossman在2008年创造的。Clickjacking与网络钓鱼[9]不同,因为它不会诱使用户将机密凭证输入假冒网站。相反,用户必须将其凭据输入真实的站点以建立认证会话。攻击能够持续到用户的会话过期。劫持可以被认为是混淆代理的一个实例[5]。 “混淆代理”一词是1988年由哈迪创造的[11]。另一个网络上的混淆代理问题的例子是跨站点请求伪造[2]。网络密钥认证方案[6]在URL中使用不可预知的秘密,而不是cookie进行身份验证。这种方法可以减轻混淆代理的问题,如劫持和CSRF。用于点击劫持的实验客户端防御包括ClearClick [18]和ClickIDS [1]。这些防御还没有广泛部署,所以他们不能作为网站主要的防御。他们还介绍了陈旧网站的一些兼容性成本,这可能会妨碍浏览器厂商的采用。
07
结论
我们调查了top500网站的framebusting的做法。 通过使用已知和新颖的攻击技术,我们发现我们遇到的所有劫持防御都可以以某种方式绕过。
许多攻击是通用的,可以用于攻击各种各样的站点。我们发现使用有针对性的攻击可以击败具有高级劫持防御(如Facebook和MySpace)的站点。在查看了可用的防御措施后,我们提出了一种基于JavaScript的防御方式,直到浏览器支持X-FRAME-OPTIONS等解决方案得到广泛部署。
本文由 看雪翻译小组 wangrin 编译,来源Stanford Web Security Research
完~
如果你喜欢的话,不要忘记点个赞哦!
小新 编译自 Insight Data Blog
量子位 出品 | 公众号 QbitAI
写个网页能有多麻烦?在大多数公司里,这项工作分为三步:
1. 产品经理完成用户调研任务后,列出一系列技术要求;
2. 设计师根据这些要求来设计低保真原型,逐渐修改得到高保真原型和UI设计图;
3. 工程师将这些设计图实现为代码,最终变成用户使用的产品。
这么多环节,任何地方出一点问题,都会拉长开发周期。因此,不少公司,比如Airbnb已经开始用机器学习来提高这个过程的效率。
△ Airbnb内部的AI工具,从图纸到代码一步到位
看起来很美好,但Airbnb还没公开该模型中端到端训练的细节,以及手工设计的图像特征对该模型的贡献度。这是该公司特有的闭源解决方案专利,可能不会进行公开。
好在,一个叫Ashwin Kumar的程序员创建了一个开源版本,让开发者/设计师的工作变得更简单。
以下内容翻译自他的博客:
理想上,这个模型可以根据网站设计的简单手绘原型,很快地生成一个可用的HTML网站:
△ SketchCode模型利用手绘线框图来生成HTML网站
事实上,上面例子就是利用训练好的模型在测试集上生成的一个实际网站,代码请访问:https://github.com/ashnkumar/sketch-code。
目前要解决的问题属于一种更广泛的任务,叫做程序综合(program synthesis),即自动生成工作源代码。尽管很多程序综合研究通过自然语言规范或执行追踪法来生成代码,但在当前任务中,我会充分利用源图像,即给出的手绘线框图来展开工作。
在机器学习中有一个十分热门的研究领域,称为图像标注(image caption),目的是构建一种把图像和文本连接在一起的模型,特别是用于生成源图像内容的描述。
△ 图像标注模型生成源图像的文本描述
我从一篇pix2code论文和另一个应用这种方法的相关项目中获得灵感,决定把我的任务按照图像标注方式来实现,把绘制的网站线框图作为输入图像,并将其相应的HTML代码作为其输出内容。
注:上段提到的两个参考项目分别是
pix2code论文:https://arxiv.org/abs/1705.07962
floydhub教程:https://blog.floydhub.com/turning-design-mockups-into-code-with-deep-learning/?source=techstories.org
确定图像标注方法后,理想中使用的训练数据集会包含成千上万对手绘线框图和对应的HTML输出代码。但是,目前还没有我想要的相关数据集,我只好为这个任务来创建数据集。
最开始,我尝试了pix2code论文给出的开源数据集,该数据集由1750张综合生成网站的截图及其相应源代码组成。
△ pix2code数据集中的生成网站图片和源代码
这是一个很好的数据集,有几个有趣的地方:
该数据集中的每个生成网站都包含几个简单的辅助程序元素,如按钮、文本框和DIV对象。尽管这意味着这个模型受限于将这些少数元素作为它的输出内容,但是这些元素可通过选择生成网络来修改和扩展。这种方法应该很容易地推广到更大的元素词汇表。
每个样本的源代码都是由领域专用语言(DSL)的令牌组成,这是该论文作者为该任务所创建的。每个令牌对应于HTML和CSS的一个片段,且加入编译器把DSL转换为运行的HTML代码。
为了修改我的任务数据集,我要让网站图像看起来像手工绘制出的。我尝试使用Python中的OpenCV库和PIL库等工具对每张图像进行修改,包括灰度转换和轮廓检测。
最终,我决定直接修改原始网站的CSS样式表,通过执行以下操作:
1. 更改页面上元素的边框半径来平滑按钮和DIV对象的边缘;
2. 模仿绘制的草图来调整边框的粗细,并添加阴影;
3. 将原有字体更改为类似手写的字体;
最终实现的流程中还增加了一个步骤,通过添加倾斜、移动和旋转来实现图像增强,来模拟实际绘制草图中的变化。
现在,我已经处理好数据集,接下来是构建模型。
我利用了图像标注中使用的模型架构,该架构由三个主要部分组成:
1. 一种使用卷积神经网络(CNN)的计算机视觉模型,从源图像提取图像特征;
2. 一种包含门控单元GRU的语言模型,对源代码令牌序列进行编码;
3. 一个解码器模型,也属于GRU单元,把前两个步骤的输出作为输入,并预测序列中的下一个令牌。
△ 以令牌序列为输入来训练模型
为了训练模型,我将源代码拆分为令牌序列。模型的输入为单个部分序列及它的源图像,其标签是文本中的下一个令牌。该模型使用交叉熵函数作为损失函数,将模型的下个预测令牌与实际的下个令牌进行比较。
在模型从头开始生成代码的过程中,该推理方式稍有不同。图像仍然通过CNN网络进行处理,但文本处理开始时仅采用一个启动序列。在每个步骤中,模型对序列中输出的下个预测令牌将会添加到当前输入序列,并作为新的输入序列送到模型中;重复此操作直到模型的预测令牌为,或该过程达到每个文本中令牌数目的预定义值。
当模型生成一组预测令牌后,编译器就会将DSL令牌转换为HTML代码,这些HTML代码可以在任何浏览器中运行。
我决定使用BLEU分数来评估模型。这是机器翻译任务中常用的一种度量标准,通过在给定相同输入的情况下,衡量机器生成的文本与人类可能产生内容的近似程度。
实际上,BLEU通过比较生成文本和参考文本的N元序列,以创建修改后的准确版本。它非常适用于这个项目,因为它会影响生成HTML代码中的实际元素,以及它们之间的相互关系。
最棒的是,我还可以通过检查生成的网站来比较当前的实际BLEU分数。
△ 观察BLEU分数
当BLEU分数为1.0时,则说明给定源图像后该模型能在正确位置设置合适的元素,而较低的BLEU分数这说明模型预测了错误元素或是把它们放在相对不合适的位置。我们最终模型在评估数据集上的BLEU分数为0.76。
后来,我还想到,由于该模型只生成当前页面的框架,即文本的令牌,因此我可以在编译过程中添加一个定制的CSS层,并立刻得到不同风格的生成网站。
△ 一个手绘图生成多种风格的网页
把风格定制和模型生成两个过程分开,在使用模型时带来了很多好处:
1.如果想要将SketchCode模型应用到自己公司的产品中,前端工程师可以直接使用该模型,只需更改一个CSS文件来匹配该公司的网页设计风格;
2. 该模型内置的可扩展性,即通过单一源图像,模型可以迅速编译出多种不同的预定义风格,因此用户可以设想出多种可能的网站风格,并在浏览器中浏览这些生成网页。
受到图像标注研究的启发,SketchCode模型能够在几秒钟内将手绘网站线框图转换为可用的HTML网站。
但是,该模型还存在一些问题,这也是我接下来可能的工作方向:
1. 由于这个模型只使用了16个元素进行训练,所以它不能预测这些数据以外的令牌。下一步方向可能是使用更多元素来生成更多的网站样本,包括网站图片,下拉菜单和窗体,可参考启动程序组件(https://getbootstrap.com/docs/4.0/components/buttons/)来获得思路;
2. 在实际网站构建中,存在很多变化。创建一个能更好反映这种变化的训练集,是提高生成效果的一种好方法,可以通过获取更多网站的HTML/CSS代码以及内容截图来提高;
3. 手绘图纸也存在很多CSS修改技巧无法捕捉到的变化。解决这个问题的一种好方法是使用生成对抗网络GAN来创建更逼真的绘制网站图像。
代码:https://github.com/ashnkumar/sketch-code
原文:https://blog.insightdatascience.com/automated-front-end-development-using-deep-learning-3169dd086e82
— 完 —
诚挚招聘
量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。
量子位 QbitAI · 头条号签约作者
վ'ᴗ' ի 追踪AI技术和产品新动态
箫 发自 凹非寺
量子位 报道 | 公众号 QbitAI
TikTok,海外版抖音,字节跳动出品。
这是中国科技公司有史以来最成功的全球化产品——甚至没有之一。
而且它发展壮大于巨头扎堆的领域——海外的Facebook、谷歌,Snapchat,哪一个不是根基深厚的巨头,却可以异军突起,风靡于海外用户之间。
却还能在一众围追堵截中——从Facebook扎克伯克的明抢,到标榜公平的美国印度政府的政令,顽强生长。
真是一个不折不扣的“看不惯又干不掉”的产品。
所以问题也来了,TikTok,海外版抖音,发展壮大的核心秘诀究竟是啥?
一方面,自然还是打铁还靠本身硬。
先从直观下载量来看,2017年上线的TikTok,在SensorTower的下载量基本一路拔高。
其中,关键爆发节点,发生在当年11月,那时候字节跳动完成了对Musical.ly的收购合并。
此后,虽然TikTok在海外分别受到了不同国家的政策制裁(FTC控告TikTok非法收集儿童信息等),导致其在2019年前两个季度呈现下滑趋势;
但整体而言,下载量依旧稳定,并在短短3年的时间内积攒了4亿多用户。
从今年2月份的下载排名数据来看,TikTok在印度宣布封禁前,依旧保持着极高的热度。
美国 Our Favorites 分类第一英国 Photo & Video 和Social Networking 分类第一加拿大 Music 分类第二法国 Music 分类 第五
2017年8月才正式上线的TikTok,只利用短短3年的时间,就击败了Facebook旗下Instagram,以及谷歌系的Youtube等老牌主流社交平台。
即使国外政府亲自出手打压,似乎也无法阻止TikTok在海外一众大厂林立的情况下势头疯涨。
所以,TikTok凭什么杀出重围?
TikTok在海外的大火,要从对Musical.ly的收购说起。
这款堪称“美国青少年版快手”的短视频软件,历时一年就登上了苹果商店在美国地区的榜首,潜力无限。
而张一鸣一眼看中了这个短视频社交软件,并直接在17年11月以10亿美元的资本收购了它。
事实上,快手和Fackbook此前都曾与Musical.ly相关方讨论过收购事宜,但均未能达成协议。
Musical.ly的投资方,来自猎豹的傅盛,提出了一个「捆绑销售」的要求,要求在收购Musical.ly的同时,也要将猎豹下的News Republic和Live.me一同收购,加起来近10亿美元。
要知道,当时外界对Musical.ly的估值仅在5亿美元左右。
快手拒绝了,但张一鸣果断地应了下来。
现在看来,这是一个明确的决定,相比于TikTok单打独斗进驻欧美市场,Musical.ly在海外打下的「江山」无疑于是本土化最好的根基。
用户裂变的来源有了,而TikTok自身产品的特性,决定了它能带来「病毒式转发」的效应。
在产品内容上,TikTok充分放大了「人类的本质是复读机」的模仿行为,将国外的meme文化发扬到了极致。
meme文化,在青少年群体中指模仿行为,通过形式上的模仿、复制、变异、传播,将文化传播出去,过程中产生的沙雕效果,给传播和受众带来了无穷乐趣,如下图。
在传播过程中,TikTok的软件做了三个创新举动:将主题标签设为一级分类;提供傻瓜式操作模板;允许用户上传自己的音乐。
想象一下,三步就能在TikTok上跟进潮流、展示自我:
第一步,在搜索框内一键搜索,立即搜到感兴趣标签下的视频内容;第二步,想要录制视频、跟风标签内容时,只需要选取录制模板,就能自带修剪等大片特效;最后,上传自己的音乐,保留用户个性。
用户基本只需动动手指,就能完成原本需要专业剪辑软件才能做出的视频效果。
而在这些标签化下面,隐藏的是大量的视频关联算法,将每一个故事都变得有关联。
除此之外,TikTok在细节上的设计也引人注目。
播放形式上,视频采取沉浸式、竖屏播放,前者让用户放弃思考不需要做出选择,就能根据算法看见自己想要的视频类型;后者则使得用户无需再锻炼颈椎翻转屏幕查看内容,更快捷方便。
视频创作上,用户能直接从创作者的TikTok主页跳到Youtube和Ins,这对创作者的发展非常友好。
三大利器,将TikTok的发展直接推上了顶峰。
哪怕是扎克伯格,对TikTok也做出了非常高的评价,言语间充满忌惮:
我确实认为TikTok很值得关注,不仅仅因为它是最新的潮流,也不仅因为它的扩张态势——从地缘政治方面看,他们的所作所为也很值得思考。
但TikTok的壮大,也意味着Facebook等国际巨头的“失手”,而且Facebook并非在短视频方面没有尝试。
可为啥他们失败了?
Facebook并不是没有做出过尝试的举动。
TikTok火了后一年,Facebook模仿TikTok,推出了独立视频应用软件Lasso。
尴尬的是,上线一年后,Lasso的的下载量仅为42.5万次,《纽约时报》对此做出的评价是「一个蹩脚的抄袭版本」。
而Facebook旗下的子公司Instagram,曾尝试在南美推出过一款短视频软件,也以业绩不好而腰斩。
但事实上,作为美国数一数二的互联网公司,Facebook远非表面上那般风光。
可以说,Facebook近年的发展道路足以谱一曲国外的《脸书没有梦想》。
在与Twitter和Snapchat竞争社交软件市场的过程中,Facebook将「CV玩家」(Ctrl+C、Ctrl+V)的精髓发挥到了极致:隔壁做出的好功能,直接照搬过来。
Facebook内部的某个团队甚至形成了这样一种风气:「不抄袭也不是啥值得骄傲的事情」。
而扎克伯格本人,在Facebook涉及侵犯用户隐私安全、面临罚款时,第一时间想到的竟然是将TikTok拖下水……
要是说Facebook更多的是自身出了问题,那么再来说说Youtube这些大公司,为什么也没能创造出像TikTok这样的软件。
事实上,核心原因也许在于,初创公司的创意有时候更接近于「草率的创业」。
例如,谷歌的最初业务是从做好搜索引擎开始,Instagram的产品想法则是「希望手机能拥有这一功能」,而TikTok也一样,最初Musical.ly创始人的想法只是将青少年喜欢听歌和录视频这两点融合起来。
但大公司必须更加关注业务的数据和竞争,有时候也许就会误判新产品对于公司的贡献预期。
不仅如此,并非所有大公司的文化都适合互联网潮流里最新的创意。
此前,在Instagram爆火的时候,Google就曾推出过社交产品Buzz,但用户体验不好,原因是Google的产品文化更侧重于功能,相比之下,Instagram对于人的情感则会更加照顾。
类似的情况也可以解释如今部分大公司无法再造一个TikTok的原因。
但如今TikTok在国外面临着封杀的情况,这是否是某些视频、社交产品的契机,似乎也不一定。
日前,国外各大社交平台如Snapchat、Ins、Youtube,已经在寻求进一步发展的契机。
据了解,一些模仿TikTok的短视频软件近日下载量暴增。
其中印度的一个本土竞品短视频应用Chingari,在TikTok下架后一天,每小时暴增20万次下载量。
字节跳动正考虑分拆TikTok为美国公司,并保证不会与国内公司共享任何相关信息。
但此举是否能赢得美国政府的信任,目前尚不得而知。
现在看来,这场战役还会持续下去。
参考链接:
https://stratechery.com/2020/the-tiktok-war/
https://mp.weixin.qq.com/s/vkH2B9AAwCubMiWfQbmkQw
http://www.woshipm.com/it/3443070.html
https://mp.weixin.qq.com/s/on0C6GElAJEbJKZmpOLzzw
https://mp.weixin.qq.com/s/YmePzcRMzXneou-dyk_DW
ghttps://www.sohu.com/a/129975261_350699
— 完 —
量子位 QbitAI · 头条号签约
关注我们,第一时间获知前沿科技动态
*请认真填写需求信息,我们会在24小时内与您取得联系。