怎么用php配置跨域,什么是代码审计?
加密钱包安全审计你的钱包是否安全?
近年来,数字钱包安全事件频发。
2019年11月19日,Ars Technica报道称两个加密货币钱包数据遭泄露,220万账户信息被盗。安全研究员Troy Hunt证实,被盗数据来自加密货币钱包GateHub和RuneScape机器人提供商EpicBot的账户。
这已经不是Gatehub第一次遭遇数据泄露了。据报道,去年6月,黑客入侵了大约100 个XRP Ledger钱包,导致近1000万美元的资金被盗。
2019年3月29日,Bithumb失窃事件闹得沸沸扬扬。据猜测,这次事件起因为Bithumb拥有的g4ydomrxhege帐户的私钥被黑客盗取。
随即,黑客将窃取的资金分散到各个交易所,包括火币,HitBTC,WB和EXmo。根据非官方数据和用户估计,Bithumb遭受的损失高达300万个EOS币(约1300万美元)和2000万个XRP币(约600万美元)以上。
由于数字货币的匿名性及去中心化,导致被盗资产在一定程度上难以追回。因此,钱包的安全性至关重要。
2020年8月9日,CertiK的安全工程师在DEF CON区块链安全大会上发表了演讲主题为:Exploit Insecure Crypto Wallet(加密钱包漏洞利用与分析)的主题报告,分享了对于加密钱包安全的见解。
加密钱包是一种帮助用户管理帐户和简化交易过程的应用程序。
有些区块链项目发布加密钱包应用程序来支持本链的发展——比如用于CertiK Chain的Deepwallet。
此外,还有像Shapeshift这样的公司,其构建了支持不同区块链协议的钱包。
从安全的角度来看,加密钱包最需重视的问题是防止攻击者窃取用户钱包的助记词和私钥等信息。
近一年来,CertiK技术团队对多个加密钱包进行了测试和研究,并在此分享针对基于软件不同类型的加密钱包进行安全评估的方法及流程。
加密钱包基础审计清单
要对一个应用程序进行评估,首先需要了解其工作原理→代码实现是否遵循最佳安全标准→如何对安全性不足的部分进行修正及提高。
CertiK技术团队针对加密钱包制作了一个基础审计清单,这份清单反映了所有形式的加密钱包应用(手机、web、扩展、桌面),尤其是手机和web钱包是如何生产和储存用户私钥的。
应用程序如何生成私钥?
应用程序如何以及在何处存储原始信息和私钥?
钱包连接到的是否是值得信任的区块链节点?
应用程序允许用户配置自定义区块链节点吗?如果允许,恶意区块链节点会对应用程序造成什么影响?
应用程序是否连接了中心化服务器?如果是,客户端应用会向服务器发送哪些信息?
应用程序是否要求用户设置一个安全性高的密码?
当用户试图访问敏感信息或转账时,应用程序是否要求二次验证?
应用程序是否使用了存在漏洞且可被攻击的第三方库?
有没有秘密(比如:API密钥,AWS凭证)在源代码存储库中泄漏?
有没有明显的不良代码实现(例如对密码学的错误理解)在程序源代码中出现?
应用服务器是否强制TLS连接?
手机钱包
相比于笔记本电脑,手机等移动设备更容易丢失或被盗。
在分析针对移动设备的威胁时,必须考虑攻击者可以直接访问用户设备的情况。
在评估过程中,如果攻击者获得访问用户设备的权限,或者用户设备感染恶意软件,我们需要设法识别导致账户和密码资产受损的潜在问题。
除了基础清单以外,以下是在评估手机钱包时要增加检查的审计类目:
应用程序是否警告用户不要对敏感数据进行截屏——在显示敏感数据时,安卓应用是否会阻止用户截屏?iOS应用是否警告用户不要对敏感数据进行截屏?
应用程序是否在后台截图中泄漏敏感信息?
应用程序是否检测设备是否越狱/root?
应用程序是否锁定后台服务器的证书?
应用程序是否在程序的log中记录了敏感信息?
应用程序是否包含配置错误的deeplink和intent,它们可被利用吗?
应用程序包是否混淆代码?
应用程序是否实现了反调试功能?
应用程序是否检查应用程序重新打包?
(iOS)储存在iOS Keychain中的数据是否具有足够安全的属性?
应用程序是否受到密钥链数据持久性的影响?
当用户输入敏感信息时,应用程序是否禁用自定义键盘?
应用程序是否安全使用“webview”来加载外部网站?
Web钱包
对于一个完全去中心化的钱包来说,Web应用程序逐渐成为不太受欢迎的选择。MyCrypto不允许用户在web应用程序中使用密钥库/助记词/私钥访问钱包,MyEtherWallet也同样建议用户不要这样做。
与在其他三种平台上运行的钱包相比,以web应用程序的形式对钱包进行钓鱼攻击相对来说更容易;如果攻击者入侵了Web服务器,他可以通过向web页面注入恶意的JavaScript,轻松窃取用户的钱包信息。
然而,一个安全构建并经过彻底测试的web钱包依旧是用户管理其加密资产的不二之选。
除了上面常规的基础审计类目之外,我们在评估客户端web钱包时,还列出了以下需要审计的类目列表:
应用程序存在跨站点脚本XSS漏洞吗?
应用程序存在点击劫持漏洞吗?
应用程序有没有有效的Content Security Policy?
应用程序存在开放式重定向漏洞吗?
应用程序存在HTML注入漏洞吗?
现在网页钱包使用Cookie的情况很少见,但如果有的话,应检查:
Cookie属性
跨站请求伪造(CSRF)
跨域资源共享(CORS)配置错误
该应用程序是否包含除基本钱包功能之外的其他功能? 这些功能存在可被利用的漏洞吗?
OWASP Top 10中未在上文提到的漏洞。
扩展钱包
Metamask是最有名和最常用的加密钱包之一,它以浏览器扩展的形式出现。
扩展钱包在内部的工作方式与web应用程序非常相似。
不同之处在于它包含被称为content script和background script的独特组件。
网站通过content script和background script传递事件或消息来与扩展页面进行交流。
在扩展钱包评估期间,最重要的事情之一就是测试一个恶意网站是否可以在未经用户同意的情况下读取或写入属于扩展钱包的数据。
除了基础清单以外,以下是在评估扩展钱包时要增加检查的审计类目:
扩展要求了哪些权限?
扩展应用如何决定哪个网站允许与扩展钱包进行交流?
扩展钱包如何与web页面交互?
恶意网站是否可以通过扩展中的漏洞来攻击扩展本身或浏览器中其他的页面?
恶意网站是否可以在未经用户同意的情况下读取或修改属于扩展的数据?
扩展钱包存在点击劫持漏洞吗?
扩展钱包(通常是background script)在处理消息之前是否已检查消息来源?
应用程序是否实现了有效的内容安全策略?
Electron桌面钱包
在编写了web应用程序的代码之后,为什么不用这些代码来建造一个Electron中桌面应用程序呢?
在以往测试过的桌面钱包中,大约80%的桌面钱包是基于Electron框架的。在测试基于Electron的桌面应用程序时,不仅要寻找web应用程序中可能存在的漏洞,还要检查Electron配置是否安全。
CertiK曾针对Electron的桌面应用程序漏洞进行了分析,你可以点击访问此文章了解详情。
以下是基于Electron的桌面钱包受评估时要增加检查的审计类目:
应用程序使用什么版本的Electron?
应用程序是否加载远程内容?
应用程序是否禁用“nodeIntegration”和“enableRemoteModule”?
应用程序是否启用了“contextisolation”, “sandbox” and “webSecurity”选项?
应用程序是否允许用户在同一窗口中从当前钱包页面跳转到任意的外部页面?
应用程序是否实现了有效的内容安全策略?
preload script是否包含可能被滥用的代码?
应用程序是否将用户输入直接传递到危险函数中(如“openExternal”)?
应用程序会使不安全的自定义协议吗?
服务器端漏洞检查列表
在我们测试过的加密钱包应用程序中,有一半以上是没有中心化服务器的,他们直接与区块链节点相连。
CertiK技术团队认为这是减少攻击面和保护用户隐私的方法。
但是,如果应用程序希望为客户提供除了帐户管理和令牌传输之外的更多功能,那么该应用程序可能需要一个带有数据库和服务器端代码的中心化服务器。
服务器端组件要测试的项目高度依赖于应用程序特性。
根据在研究以及与客户接触中发现的服务器端漏洞,我们编写了下文的漏洞检查表。当然,它并不包含所有可能产生的服务器端漏洞。
认证和授权
KYC及其有效性
竞赛条件
云端服务器配置错误
Web服务器配置错误
不安全的直接对象引用(IDOR)
服务端请求伪造(SSRF)
不安全的文件上传
任何类型的注入(SQL,命令,template)漏洞
任意文件读/写
业务逻辑错误
速率限制
拒绝服务
信息泄漏
总结
随着技术的发展,黑客们实施的欺诈和攻击手段也越来越多样化。
CertiK安全技术团队希望通过对加密钱包安全隐患的分享让用户更清楚的认识和了解数字货币钱包的安全性问题、提高警惕。
现阶段,许多开发团队对于安全的问题重视程度远远低于对于业务的重视程度,对自身的钱包产品并未做到足够的安全防护。通过分享加密钱包的安全审计类目,CertiK期望加密钱包项目方对于产品的安全标准拥有清晰的认知,从而促进产品安全升级,共同保护用户资产的安全性。
数字货币攻击是多技术维度的综合攻击,需要考虑到在数字货币管理流通过程中所有涉及到的应用安全,包括电脑硬件、区块链软件,钱包等区块链服务软件,智能合约等。
加密钱包需要重视对于潜在攻击方式的检测和监视,避免多次受到同一方式的攻击,并且加强数字货币账户安全保护方法,使用物理加密的离线冷存储(cold storage)来保存重要数字货币。除此之外,需要聘请专业的安全团队进行网络层面的测试,并通过远程模拟攻击来寻找漏洞。
自学HTML5的条件是什么?
对于许多自学前端的学习者来说,学习兴趣是浓厚的,但是往往求学无方。现在网上的资源良莠不齐,在海量的信息库里挑选适合自己的HTML5学习线路更是难上加难。
今天小编就给大家分享一个HTML5初级开发工程师学习线路。
第一部分是HTML5课程介绍,通过这段课程学习,学生可以对整个HTML5课程有全面的了解,对未来主要的工作和业务应用场景有初步的认识。
1、互联网发展趋势
2、H5语言的优势
3、简单易学人人都能编程
4、H5就业和薪资情况
5、H5常见的项目与产品
6、H5的未来与方向
第二部分是HTML基础,通过这一部分基础学习,学生可以学会HTML,并且了解网页的组成,可写出基本的网页结构。
1、HTML简介与历史版本
2、常用开发软件
3、常见标签与属性
4、表格与表单
5、标签规范与标签语义化
6、实战:网页结构布局
第三部分是CSS基础,通过此阶段的学习,学生可以学会CSS,利用PS工具进行样式开发,结合HTML结构完成整页制作。
1、css简介与基本语法
2、常见的各种样式属性
3、CSS选择器与标签类型
4、理解盒子模型与CSS重置
5、浮动与定位
6、利用photoshop工具测量样式
7、HTML+CSS开发网页
8、实战:高仿电商首页效果
第四部分是CSS3基础,学成之后,学生可以利用CSS3制作出炫酷的网页动态效果。
1、css3常见样式
2、css3选择器
3、变形与动画
4、3D效果与关键帧
5、弹性盒模型
第五部分是移动端布局,通过这一阶段的学习,可以掌握移动端概念与移动端布局方案,理解什么是响应式,利用bootstrap来搭建页面。
1、移动端基本概念
2、viewport窗口设置
3、移动端布局方案
4、rem、vh、vw等单位
5、响应式布局
6、bootstrap框架
第六部分是JavaScript基础,可以基本掌握JS基本语法和简单的逻辑处理,掌握JS核心内容,利用JS开发网页中常见的特效效果。
1、JS简介
2、JS变量
3、数据类型与类型转换
4、运算符与优先级
5、流程控制-if..else
6、流程控制-switch...case
7、流程控制-while、do..while、for循环
8、break、continue语法
9、函数定义与调用
10、全局变量与局部变量
11、函数传参与返回值
12、函数作用域与变量作用域
13、DOM的基本操作
14、定时器使用
15、this指向与修改指向
16、数组、字符串等方法操作
17、时间对象与正则对象
18、掌握常见BOM操作
19、常见事件与事件细节
20、JSON与AJAX
21、JSONP跨域操作
22、前端cookie的使用
23、实战:JS配合HTML与CSS完成电商项目
第七部分是jquery框架,此阶段的学习结束,学生可以学会jquery框架,利用jquery框架快速开发网页效果。
1、jquery核心思想
2、jquery常见方法
3、jquery动画操作
4、jqueryAJAX操作
5、jquery工具方法
6、利用jquery快速开发网页
第八部分是PHP基础,学习之后可以掌握前后端真实开发模式,能够对数据库进行CURD操作,并能显示数据到页面,实现动态网站开发。
1、PHP简介与基本语法
2、mysql数据库及sql语法
3、apache服务器与集成开发工具
4、PHP链接数据库
5、PHP与AJAX交互
6、实战:留言板、登录、注册等
第九部分是H5基础项目,也是此学习路线的尾声部分。学生能够独立完成一整个大型网站的前端开发。具备独立的项目开发能力和思考能力。并且,做到多设备、多浏览器兼容等处理实现。
1、项目简介
2、项目功能演示
3、项目划分及框架
4、编写HTML页面结构
5、设置CSS样式
6、添加JS交互
7、可选框架:bootstrap、jquery、PHP等
8、项目调试及兼容
9、项目验收
报个培训班出来能就业吗?
前端是当代比较火的一个互联网技术知识,许多年轻人把目光放在了前端上边,想要通过前端培训班的学习进入到这个行业,但是,很多人对于前端这个行业其实没有多少了解,多数也只是通过别人的口中获知的一些信息,对于前端学习什么,出来能干什么了解的并不多,那么前端主要学什么,报名前端培训班出来是否能就业?接下来小编就带大家一起来了解一下。
前端主要学什么?第一阶段:HTML + CSS核心
HTML常用标签、盒模型、CSS选择器集群、伪元素/伪类、浮动/定位、CSS3动画、CSS3过渡、CC3渐变、经典布局方案、2d/3d变换HTML + CSS核心
第二阶段:JavaScript核心 + 高级
变量/内存、数据类型、条件语句、循环语句、函数/对象/数组、DOM/BOM对象、闭包/原型/作用域、事件完整解析、线程/进程、JavaScript继承模式、JavaScript算法、JavaScript设计模式、栈/队列、高级函数/函数柯里化
第三阶段:jQuery框架 + Less + BootStrap
Less同Stylus,Sass区别、BootStrap框架语法、BootStrap组件应用、jQuery设计模式、jQueryAPI、Less封装、BootStrap响应式原理、BootStrap栅格系统源码分析
第四阶段:NodeJs + 工程化
ECMAScript6新特性、JavaScript异步编程、Node基础/Node搭建服务器、Express/Koa/EJS、原生Ajax/跨域解决方案、CMD/AMD/CommonJS/ES6(模块化)
第五阶段:Vue技术栈 + webApp + 项目部署
Vue核心基础、Vue指令/表达式/实例、Vue组件通信、Vue生命周期详解、Vue-router路由、Vuex状态管理
第六阶段:React技术栈 + 工程化高级
React核心基础、ReactJSX语法、React组件、React组件通信、Redux源码分析、Redux源码分析、webpackHMR(热膜替换)、webpack懒加载/预加载
第七阶段:小程序技术栈 +服务器端框架
小程序核心语法、小程序路由、小程序生命周期、小程序支付流程、Mpvue框架、UniApp框架小程序WXML语法(遍历,条件判断等)
报个前端培训班出来能就业吗?选择前端培训是否能够实现就业,有下面几点决定,只要能够达到基本是没有问题的。
1、选择一个好的前端培训班进行学习
2、在一个前端行业发展比较好的城市进行学习,这样机会更多
3、在前端培训过程中要加倍努力的去学习
附录:2020前端学习路线图
后端Java怎么和前端HTML交互?
本人计算机专业毕业,从事Java Web研发三年半,我就以个人的经历来谈谈后端Java怎么和前端HTML交互,由于主要从事Java服务端的研发,对前端HTML的认识有限,个人浅见,一起交流。
刚毕业参加工作时,首先接触到的是Java前端技术是JSP,当时做基础架构方面的工作,有一些管理界面需要研发,而团队的技术线就是JSP+Spring+Duboo+Zookeeper+mysql,我当然也延续了这一技术线,前后使用了一年左右的JSP,前后端研发都一起搞,包括数据库部署、上线维护等都有所涉及。JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。随着技术的发展,JSP逐渐被团队淘汰。
积极拥抱变化,是互联网公司或者互联网团队需要做的事情,spring boot + spring cloud的技术线进入了我们的视野。基础架构全面引入spring boot,积极推动微服务的发展成为团队的新课题。在推动spring boot的使用中,发现其支持的thymeleaf模板引擎有诸多的优点,在leader拍板之后,团队的前端技术就由JSP替换为thymeleaf。thymeleaf的优点是静态html嵌入标签属性,浏览器可以直接打开模板文件,便于前后端联调,同时也是springboot官方推荐方案。
技术总是不断发展的,前后端分离,面向接口编程的理念又进入我们的团队。hymeleaf这种前后端一起部署的技术体系已经不能满足我们的要求,为了推动前后端分离和专业的人做专业的事,将功能需求做页面划分,后端和前端定义接口标准,然后依此为契约,同步进行研发。发展到这里,前端的React技术栈又进入了我们团队的视野,由于其前端的技术太过专业,我当时只是简单的了解了一下,没有深入去学习,就专注于做服务端的接口研发。
引入该理念不久,我就跳槽后,进入新的公司新的团队,开始使用velocity。对于这个选择,没有更多的理由,融入新的环境新的团队,必须要让自己了解和使用团队的技术线,其性能良好,据说比jsp性能还要好些,但是自己没有做过相关的测试。到目前为止也在使用velocity,但会积极推动团队拥抱新变化,采用新的技术线来做相关的需求,比如freemarker等又成了团队的新的选择。
作者:夕阳雨晴,欢迎关注我的头条号。偶尔美文,主流Java,为你讲述不一样的码农生活。
只会增删改查的程序员出路在哪里?
之前的我也曾片面地认为做软件不就是增删改查吗,现实也的确如此,但是一个软件的诞生需要的不仅仅是增删改查,或者说增删改查只占一小部分。
当做一个应用不需要联网的时候,也许一个sqllite数据库就可以满足我们的需求,当业务增长的时候,一个mysql数据库也可以满足我们的要求,当业务继续增长的时候,可能就需要集群了,这个时候,增删改查就会变得复杂,要么你使用中间件来进行查询,要么你就要写很复杂的业务代码。
做一个软件可能大部分程序员都能做出来,但是做出一个产品出来,却是大部分程序员都不能实现的。
先不说产品需要的设计交互等,光是产品的稳定性,健壮性,并发性就不是每一个程序员都能搞定的。
刨根问底是我认为对一个程序员最重要的,如果你只会增删改查,但是如果你能把增删改查运用到极致了,那么你并不会丢失饭碗。
数据库领域里面有个数据仓库的岗位,那个岗位需要的就是对数据进行分析,整理查询,它需要很多复杂的查询,需要灵活快速地进行数据的检索分析。
增删改查离不开数据库,虽然大部分数据库的sql语句都差不多,但是还是有很多情况是不同的。有些时候我们不仅仅需要会sql语句的查询,还需要对一些编程语言对数据库的操作了如指掌。
程序员是一个活到老学到老的职业,你需要不断认知和提升自己的能力,今天你学会的知识可能在未来就变成过时的了,技术是不断在迭代的,作为一个程序员,只有不断地去学习才是唯一的出路。