3 月 15 日消息,3 月 14 日,中央网信办发布“浏览器类”App 个人信息收集情况测试报告,对“浏览器类”公众大量使用的部分 App 收集个人信息情况进行了测试。本次测试选取了 19 家应用商店累计下载量达到 1 亿次的“浏览器类”App,包括华为浏览器、小米浏览器、UC 浏览器等 9 款。本次测试,以完成一次互联网信息浏览活动作为测试单元,包括启动 App、搜索信息、访问信息 3 种用户使用场景,以及后台静默应用场景。针对系统权限调用,9 款 App 在 4 种场景下调用了位置、设备信息、剪切板、应用列表、相册 5 类系统权限,未发现调用麦克风、通讯录等其他权限。在启动 App 场景中,调用系统权限种类最多的为悟空浏览器(5 类),调用系统权限次数最多的为 UC 浏览器(88 次);在搜索信息场景中,调用系统权限种类最多的为小米浏览器和搜狗浏览器极速版(均为 3 类),调用系统权限次数最多的为小米浏览器(12 次);在访问信息场景中,通过浏览器打开网站时,调用系统权限种类和次数最多的均为悟空浏览器(2 类、5 次);通过浏览器下载文件时,调用系统权限次数最多的为 UC 浏览器和悟空浏览器(均为 2 次)。针对个人信息上传情况,测试发现,9 款 App 上传了 4 种类型个人信息:①位置信息,包括经纬度、街道地址、当前连接 Wi-Fi MAC 地址、当前连接基站信息、周边可用 Wi-Fi MAC 地址;②唯一设备识别码,包括 IMEI(国际移动设备识别码)、Android ID(安卓 ID)、OAID(开放匿名设备标识符)、手机 MAC 地址;③应用列表信息,包括手机上已安装、新安装、新卸载的应用信息;④用户在 App 内的截图操作信息。IT之家附测试情况及结果如下:
表 1:9 款 App 基本情况
表 2 启动 App 场景调用系统权限情况(2)在搜索信息场景中,调用系统权限种类最多的为小米浏览器和搜狗浏览器极速版(均为 3 类),调用系统权限次数最多的为小米浏览器(12 次)。具体情况如表 3。
表 3 搜索信息场景调用系统权限情况(3)在访问信息场景中,通过浏览器打开网站时,调用系统权限种类和次数最多的均为悟空浏览器(2 类、5 次);通过浏览器下载文件时,调用系统权限次数最多的为 UC 浏览器和悟空浏览器(均为 2 次)。具体情况如表 4。
表 4 访问信息场景调用系统权限情况(4)在后台静默场景中,调用系统权限种类最多的为 UC 浏览器、夸克、360 浏览器、悟空浏览器(均为 2 类),调用系统权限次数最多的为 360 浏览器(16 次)。具体情况如表 5。
表 5 后台静默场景调用系统权限情况(二)个人信息上传情况测试发现,9 款 App 上传了 4 种类型个人信息⁽³⁾:①位置信息,包括经纬度、街道地址、当前连接 Wi-Fi MAC 地址、当前连接基站信息、周边可用 Wi-Fi MAC 地址;②唯一设备识别码,包括 IMEI(国际移动设备识别码)、Android ID(安卓 ID)、OAID(开放匿名设备标识符)、手机 MAC 地址;③应用列表信息,包括手机上已安装、新安装、新卸载的应用信息;④用户在 App 内的截图操作信息。(1)在启动 App 场景中,个人信息上传种类最多的为 UC 浏览器(4 类)。具体情况如表 6。
表 6 启动 App 场景个人信息上传情况(2)在搜索信息场景中,个人信息上传种类最多的为悟空浏览器(2 类)。具体情况如表 7。
表 7 搜索信息场景个人信息上传情况(3)在访问信息场景中,通过浏览器打开网站时,个人信息上传种类最多的为小米浏览器和悟空浏览器(均为 2 类);通过浏览器下载文件时,个人信息上传种类最多的为 UC 浏览器和 360 浏览器(均为 2 类)。具体情况如表 8。
表 8 访问信息场景个人信息上传情况(4)在后台静默场景中,个人信息上传种类最多的为 UC 浏览器(3 类)。具体情况如表 9。
表 9 后台静默场景个人信息上传情况(三)网络上传流量情况(1)9 款 App 在用户完成一次网站浏览活动(启动 App、搜索信息、打开网站)时,上传数据流量平均⁽⁴⁾最多的为悟空浏览器,约为 1608KB;平均最少的为小米浏览器,约为 472KB。具体情况如图 1。
图 1 完成一次网站浏览活动的平均上传数据流量(单位:KB)(2)9 款 App 在用户完成一次文件下载活动(启动 App、搜索信息、下载文件)时,上传数据流量平均⁽⁵⁾最多的为 QQ 浏览器,约为 1994KB;平均最少的为小米浏览器,约为 152KB。具体情况如图 2。
图 2 完成一次文件下载活动的平均上传数据流量(单位:KB)(3)9 款 App 后台静默 12 小时,上传数据流量平均⁽⁶⁾最多的为 UC 浏览器,约为 2506KB;平均最少的为华为浏览器,约为 87KB。具体情况如图 3。
图 3 后台静默 12 小时平均上传数据流量(单位:KB)注释:⁽¹⁾包括华为应用市场、小米应用商店、腾讯应用宝、OPPO 软件商店、vivo 应用市场、360 手机助手、百度手机助手、豌豆荚手机助手、历趣应用商店、乐商店、魅族应用商店、移动 MM 商店、太平洋下载、中关村在线、木蚂蚁安卓应用市场、多特软件站、华军软件园、西西软件园、绿色资源网。⁽²⁾启动 App 指用户点击浏览器图标启动 App 至首页加载完毕;搜索信息指用户搜索一个网站或文件,至搜索结果加载完毕;访问信息指用户点击一条搜索结果进行浏览(当搜索结果为一个网页时)或下载(当搜索结果为一个文件时);后台静默指用户启动浏览器后,直接切换到后台保持静默状态。⁽³⁾不包含用户访问互联网产生的交互信息。例如,用户浏览银行网站时,可能向网站传输身份证号、银行卡号、取款密码等信息,在此过程中浏览器仅按照网络协议向网站转发数据,本身不收集上述信息。⁽⁴⁾共重复测试 10 次。⁽⁵⁾共重复测试 10 次。⁽⁶⁾共重复测试 6 次。 很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
大约一年前,我决定确保每个包含非唯一文本的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
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel