tokenpocket使用教程币安链:黑客盗取币安链200万枚BNB过程全解析
“事件回顾”币安连锁店遭受了有史以来最大的黑客攻击
10月7日凌晨,BNB Chain遭到黑客攻击,总额为7亿美元,其中包括5.7亿美元的BNB。据币安创始人赵长鹏介绍,此次震撼整个行业的“攻击”,主要原因是跨链桥“Token Hub”的漏洞。
对此,金财通整理了整个“攻击”事件,让大家观看,并邀请安全团队对方法进行分析。
攻击方法如下:
币安跨链桥 BSC 令牌中心在验证跨链交易时使用特殊的预编译合约来验证 IAVL 树。此实现中存在一个漏洞,可能允许攻击者伪造任意消息。
1)攻击者首先选择成功提交的块的哈希值(指定块:)。
2) 然后构造一个攻击有效载荷作为验证 IAVL 树上的叶节点
3) 将任何新的叶节点添加到 IAVL 树中
4)同时tokenpocket使用教程币安链,添加一个空白的内部节点,以满足实现证明
5) 调整在步骤 3 中添加的叶节点,使计算出的根哈希等于在步骤 1 中选择的成功提交的正确根哈希
6)最终为该特定区块构建提款证明()Trace正在实时跟踪被盗资金。
事件时间线如下:
10月7日 00:55
黑客通过调用合约在区块高度注册100 BNB。
2:26~4:43
黑客从BNB Chain的“令牌中心”系统合同中分两期(2:26,4:43)获得了总共200万BNB。
BNB连锁贷款协议Venus质押了90万BNB,贷款6250万BUSD,5000万美元和3500万美元兑美元。此外,据社交媒体账户的独立分析师称,此次黑客攻击目前包括104万BNB,价值3.89亿美元,BUSD为2800万美元,总计7.18亿美元。这一数额是历史上最大的链上攻击。
5:48
区块研究员Eden Au在推特上表示tokenpocket使用教程币安链,BNB链攻击者地址(ec)已被列入黑名单,此外还持有超过4500万美元的ETH。
6:19~6:35
BNB Chain在推特上表示,由于异常活动,它目前正在维护中,暂时暂停通过BNB链的所有存款和取款,直到有进一步的更新。“在识别出潜在的漏洞后,我们暂停了BNB Chain,所有系统现在都在控制之下,我们正在调查潜在的漏洞,我们知道社区将协助并帮助冻结任何转移。BNB Chain在另一条推文中表示,提取的资金中约有7000万至8000万美元已被冻结。据报道,这次黑客攻击导致价值约7.18亿美元的资产被盗,其中包括200万BNB。
7:51
币安首席执行官赵长鹏在推特上表示,BNB Chain跨链桥“令牌中心”的违规行为导致BNB增加,并且所有验证者都被要求暂时暂停BNB Chain,问题现已得到控制,资金安全,并将相应地提供进一步的更新。
8:47
研究人员在社交媒体上发帖称,链上数据和相关代码显示,BSC跨链桥的验证方法存在bug,可能允许攻击者伪造任意消息。在这次攻击中,攻击者伪造信息并通过了BSC跨链桥的验证,导致跨链桥向攻击者的地址发送了200万BNB。
9:00
数据显示,BNB Chain漏洞攻击者使用跨链桥等进行资产转移,分别向以太坊和网络发送约5335万美元和4880万美元,向BNB Chain发送约4.3亿美元。
9:22
BNB Chain官员在社交媒体上发帖称,BNB Chain节点验证者已被要求在未来几个小时内与他们联系,以便可以计划节点升级。
9:29
币安创始人赵长鹏在推特上写道:“目前还不可能给出具体的估计升级时间,币安让开发者有时间充分了解这一事件的根本原因,实施修复并进行深入测试,然后再继续。"
9:45
慢雾在社交媒体上发帖称,它已经监控到BNB Chain盗窃案的黑客地址与许多dApp进行了交互,包括,金星,,曲线,乔等。
此外,黑客在链上移动的地址(1,729,320 USDT)可能已被列入黑名单,但转移到(2,000,000 USDT)的地址暂时不包括在内。
11:30
据欧科云链卫士安全团队监控,截至目前,黑客地址余额为万、万、万、万美元,按当前市场价格计算累计价值超过7亿美元。黑客事件上次比Ronin损失了6.2亿美元,这是迄今为止最高的黑客攻击量。
黑客在
本案早在10月6日就利用该服务将最初的攻击资金(100多家BNB)转移到了BSC链上,然后黑客通过调用系统合约进行注册,然后对系统合约发起了攻击。
1:02
10月7日,BNB Chain在推特上发布,BSC v1.1.15已经发布,BSC验证者正在协调寻求在1小时内恢复BNB智能链(BSC)。新版本将阻止与黑客帐户相关的活动。BNB信标链和BNB智能链之间的原生跨链通信被禁用。官方要求所有节点运营商尝试升级到上述版本。验证者和社区将讨论进一步的升级,以充分解决此问题。
2:53
BNB连锁店在推特上说,BNB智能链(BSC)在20多分钟前开始运作良好。验证者正在确认其状态,社区基础设施正在升级。
海量信息、精准解读都在新浪财经APP中
前言
在本章中,我们将介绍对静态资源和一个重要类 ter 的支持。
身体
在上一章中,我们还简要介绍了对静态资源的默认支持,今天我们将详细介绍默认支持以及如何实现自定义扩展。
默认资源映射
默认情况下,Boot 使用在 ion 中配置的各种属性,为我们提供静态资源处理。建议您
使用默认的Boot配置方式,提供的静态资源映射如下:
项目内部的路径如下所示:
以上都是静态资源的映射路径,按优先级顺序排列:元 INF/ > > >
您可以将同名图片放在上述4条路径中的每条路径下,并且可以通过访问来验证它。
此外,您可以将索引.html随机放在上述路径下方,当我们访问应用程序根:8080时,它将直接映射到索引.html页面。
相应的配置文件配置如下:
# 默认值为 /** spring.mvc.static-path-pattern= # 默认值为 classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/ spring.resources.static-locations=这里设置要指向的路径,多个使用英文逗号隔开
我们可以通过修改 .mvc.-path 来修改默认映射,例如,我将其更改为 /dudu/**,然后在运行它时,请访问 :8080/dudu/index.html 以对应于索引.html页面。
接管启动的 Web 配置
如果引导提供的 Sping MVC 不符合要求,则可以通过将 @ 注释添加到配置类(带有 @ 的类)来实现对 MVC 配置的完全控制。
当然,通常情况下,Boot的自动配置适合我们的大多数需求。当您需要保留 Boot 提供的便利并需要添加自己的附加配置时,您可以定义一个配置类并继承 ter,而无需使用 @ 注释。
这里我们提到了 ter 类,
重写此类中的方法允许我们添加其他配置,在这里我们将介绍一些常用的方法。
自定义资源映射
例如,如果要自定义静态资源映射目录,则只需重写该方法。
@Configuration public class MyWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter { /** * 配置静态访问资源 * @param registry */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/my/**").addResourceLocations("classpath:/my/"); super.addResourceHandlers(registry); } }
通过添加映射路径,然后传递来指定路径。我们访问自定义 my 文件夹中.jpg图像,地址为:8080/my/.jpg
如果要指定一个外部目录token被拦截,也很简单,只需直接指定即可,代码如下:
@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/my/**").addResourceLocations("file:E:/my/"); super.addResourceHandlers(registry); }
引用放置文件的目录,并引用公开的访问路径
页面跳转
之前写的时候,如果需要访问一个页面token被拦截,就一定要写一个类,然后写一个方法跳转到页面,这感觉太麻烦了,其实重写方法在ter中就能达到的效果
/** * 以前要访问一个页面需要先创建个Controller控制类,再写方法跳转到页面 * 在这里配置后就不需要那么麻烦了,直接访问http://localhost:8080/toLogin就跳转到login.htm页面了 * @param registry */ @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/toLogin").setViewName("login"); super.addViewControllers(registry); }
该值指出,在此处重写该方法不会覆盖 ion 中的方法(在此方法中,Boot 将“/”映射到 index.html),这意味着我们自己的配置和 Boot 的自动配置同时有效,这就是我们建议添加自己的 MVC 配置的方式。
拦截 器
拦截器经常在我们的项目中使用,因此这是确定是否登录的最简单方法。
要实现拦截器功能,您需要完成以下 2 个步骤:
首先,自定义拦截器代码:
package com.dudu.interceptor; public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { boolean flag =true; User user=(User)request.getSession().getAttribute("user"); if(null==user){ response.sendRedirect("toLogin"); flag = false; }else{ flag = true; } return flag; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
在这里,我们只需根据其中是否有User对象来实现是否登录,如果它是空的,则跳转到登录页面,如果它不为空,则传递它。
接下来,重写 ter 中的方法,如下所示:
/** * 拦截器 * @param registry */ @Override public void addInterceptors(InterceptorRegistry registry) { // addPathPatterns 用于添加拦截规则 // excludePathPatterns 用户排除拦截 registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/toLogin","/login"); super.addInterceptors(registry); }
(“/**”) 阻止所有请求,但不包括拦截 / 和 /登录请求。
页面登录密钥代码
//简单登录操作 $("#doLogin").click(function (e) { $.ajax({ type : "POST", url : "/login", data : { "userName" : $("#userName").val(), "password" : $("#password").val() }, dataType : "json", success : function(data) { if (data.result == "1") { window.location.href ="/learn"; } else { alert("账号密码不能为空!"); } } }); });
控制器代码:
package com.dudu.controller; @Controller public class LearnController { /** *登录操作 **/ @RequestMapping(value = "/login",method = RequestMethod.POST) @ResponseBody public Maplogin(HttpServletRequest request, HttpServletResponse response){ Map map =new HashMap (); String userName=request.getParameter("userName"); String password=request.getParameter("password"); if(!userName.equals("") && password!=""){ User user =new User(userName,password); request.getSession().setAttribute("user",user); map.put("result","1"); }else{ map.put("result","0"); } return map; } @RequestMapping("/learn") public ModelAndView index(){ List learnList =new ArrayList (); LearnResouce bean =new LearnResouce("官方参考文档","Spring Boot Reference Guide","http://docs.spring.io/spring-boot/docs/1.5.1.RELEASE/reference/htmlsingle/#getting-started-first-application"); learnList.add(bean); bean =new LearnResouce("官方SpriongBoot例子","官方SpriongBoot例子","https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples"); learnList.add(bean); bean =new LearnResouce("龙国学院","Spring Boot 教程系列学习","http://www.roncoo.com/article/detail/125488"); learnList.add(bean); bean =new LearnResouce("嘟嘟MD独立博客","Spring Boot干货系列 ","http://tengj.top/"); learnList.add(bean); bean =new LearnResouce("后端编程嘟","Spring Boot教程和视频 ","http://www.toutiao.com/m1559096720023553/"); learnList.add(bean); bean =new LearnResouce("程序猿DD","Spring Boot系列","http://www.roncoo.com/article/detail/125488"); learnList.add(bean); bean =new LearnResouce("纯洁的微笑","Sping Boot系列文章","http://www.ityouknow.com/spring-boot"); learnList.add(bean); bean =new LearnResouce("CSDN——小当博客专栏","Sping Boot学习","http://blog.csdn.net/column/details/spring-boot.html"); learnList.add(bean); bean =new LearnResouce("梁桂钊的博客","Spring Boot 揭秘与实战","http://blog.csdn.net/column/details/spring-boot.html"); learnList.add(bean); bean =new LearnResouce("林祥纤博客系列","从零开始学Spring Boot ","http://412887952-qq-com.iteye.com/category/356333"); learnList.add(bean); ModelAndView modelAndView = new ModelAndView("/template"); modelAndView.addObject("learnList", learnList); return modelAndView; } }
这样,如果您未登录,您将被重定向到登录.html页面,并且访问:8080/和:8080 /login将不会被阻止。
有关更多配置,您可以查看 ter 类的 API。因为它是接口的实现,所以 API 方法也可用于配置 MVC。
仅仅实现这个接口,实现所有的方法,这是令人尴尬的。
因此,仍然建议使用继承 ter 类来处理它。
温馨提醒,点击注册成功,可以每天永远免费观看直播,每天20晚;00免费分享建筑体验总结
静态资源和拦截器通常用于日常项目中,知道如何处理它们很有用。今天就是这样,下一篇文章将介绍将来如何在项目中使用日志。
在最后写下:
代码字不容易看到结尾,然后点击就要注意,只收集而不注意都在玩流氓!
关注并发给我私信给“架构”,免费发送一套Java架构资料,先到先得!
相关阅读
- tokenpocket使用教程币安链:币安智能链——Defi大环境下的财富密码
- tokenpocket怎么卖币:传销项目横行,如何拯救被骗的币圈难民?揭露XToken钱包的骗局
- tp钱包怎么卖币视频:币圈网红用 TikTok 教年轻人炒币,但骗局和误导不少
- Tokenpoket钱包app下载量为何这么多
- tp钱包密钥丢了:市民丢失银行卡被盗取3万 密码设为“123321”
- TP钱包使用:HTC通过面向加密的5G路由器扩展设备阵容
- tp冷钱包签名失败:库神冷钱包冷热端分离,私钥永不触网
- 苹果版tp钱包:[图]iOS/iPadOS 14
- tp钱包官网下载app是假的:官方入口使用微粒贷,切勿下载虚假APP
- tp钱包直接转账:支付的“万亿选择”:Square 还是 PayPal?