欢迎来到tokenpocket钱包官网

tokenpocket使用教程币安链:黑客盗取币安链200万枚BNB过程全解析

tp钱包官网 2022-10-24 16:42:53214网络整理佚名

“事件回顾”币安连锁店遭受了有史以来最大的黑客攻击

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亿美元。这一数额是历史上最大的链上攻击。

tokenpocket使用教程币安链

5:48

区块研究员Eden Au在推特上表示tokenpocket使用教程币安链,BNB链攻击者地址(ec)已被列入黑名单,此外还持有超过4500万美元的ETH。

tokenpocket使用教程币安链

6:19~6:35

BNB Chain在推特上表示,由于异常活动,它目前正在维护中,暂时暂停通过BNB链的所有存款和取款,直到有进一步的更新。“在识别出潜在的漏洞后,我们暂停了BNB Chain,所有系统现在都在控制之下,我们正在调查潜在的漏洞,我们知道社区将协助并帮助冻结任何转移。BNB Chain在另一条推文中表示,提取的资金中约有7000万至8000万美元已被冻结。据报道,这次黑客攻击导致价值约7.18亿美元的资产被盗,其中包括200万BNB。

tokenpocket使用教程币安链

7:51

币安首席执行官赵长鹏在推特上表示,BNB Chain跨链桥“令牌中心”的违规行为导致BNB增加,并且所有验证者都被要求暂时暂停BNB Chain,问题现已得到控制,资金安全,并将相应地提供进一步的更新。

tokenpocket使用教程币安链

8:47

研究人员在社交媒体上发帖称,链上数据和相关代码显示,BSC跨链桥的验证方法存在bug,可能允许攻击者伪造任意消息。在这次攻击中,攻击者伪造信息并通过了BSC跨链桥的验证,导致跨链桥向攻击者的地址发送了200万BNB。

tokenpocket使用教程币安链

9:00

数据显示,BNB Chain漏洞攻击者使用跨链桥等进行资产转移,分别向以太坊和网络发送约5335万美元和4880万美元,向BNB Chain发送约4.3亿美元。

tokenpocket使用教程币安链

9:22

BNB Chain官员在社交媒体上发帖称,BNB Chain节点验证者已被要求在未来几个小时内与他们联系,以便可以计划节点升级。

tokenpocket使用教程币安链

9:29

币安创始人赵长鹏在推特上写道:“目前还不可能给出具体的估计升级时间,币安让开发者有时间充分了解这一事件的根本原因,实施修复并进行深入测试,然后再继续。"

9:45

慢雾在社交媒体上发帖称,它已经监控到BNB Chain盗窃案的黑客地址与许多dApp进行了交互,包括,金星,,曲线,乔等。

此外,黑客在链上移动的地址(1,729,320 USDT)可能已被列入黑名单,但转移到(2,000,000 USDT)的地址暂时不包括在内。

tokenpocket使用教程币安链

11:30

据欧科云链卫士安全团队监控,截至目前,黑客地址余额为万、万、万、万美元,按当前市场价格计算累计价值超过7亿美元。黑客事件上次比Ronin损失了6.2亿美元,这是迄今为止最高的黑客攻击量。

黑客在

本案早在10月6日就利用该服务将最初的攻击资金(100多家BNB)转移到了BSC链上,然后黑客通过调用系统合约进行注册,然后对系统合约发起了攻击。

tokenpocket使用教程币安链

1:02

10月7日,BNB Chain在推特上发布,BSC v1.1.15已经发布,BSC验证者正在协调寻求在1小时内恢复BNB智能链(BSC)。新版本将阻止与黑客帐户相关的活动。BNB信标链和BNB智能链之间的原生跨链通信被禁用。官方要求所有节点运营商尝试升级到上述版本。验证者和社区将讨论进一步的升级,以充分解决此问题。

tokenpocket使用教程币安链

2:53

BNB连锁店在推特上说,BNB智能链(BSC)在20多分钟前开始运作良好。验证者正在确认其状态,社区基础设施正在升级。

tokenpocket使用教程币安链

tokenpocket使用教程币安链

海量信息、精准解读都在新浪财经APP中

前言

在本章中,我们将介绍对静态资源和一个重要类 ter 的支持。

身体

在上一章中,我们还简要介绍了对静态资源的默认支持,今天我们将详细介绍默认支持以及如何实现自定义扩展。

默认资源映射

默认情况下,Boot 使用在 ion 中配置的各种属性,为我们提供静态资源处理。建议您

使用默认的Boot配置方式,提供的静态资源映射如下:

项目内部的路径如下所示:

token被拦截

以上都是静态资源的映射路径,按优先级顺序排列:元 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 Map login(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架构资料,先到先得!

Copyright © 2022-现在 PbootMoBan All Rights Reserved. 免责声明:网站中图片均来源于网络,如有版权问题请联系删除!

备案号:皖ICP备77777784号 联系方式:admin@pbku.cn