본문으로 건너뛰기

재진입 공격

교차 컨트랙트 호출과 콜백 사이에서 컨트랙트의 모든 메서드를 실행할 수 있습니다. 이것을 고려하지 않는 것은 해킹의 주요 소스 중 하나입니다. 재진입 공격이라는 자체 이름이 있을 정도로, 이는 매우 기본적인 해킹 방식입니다.

메서드 실행이 완료된 후에는 항상 상태를 일관된 상태로 유지해야 합니다. Assume that:

  • 메서드 실행과 해당 콜백 사이에서 모든 메서드를 실행할 수 있습니다.
  • 콜백이 시작되기 전에 동일한 메서드를 다시 실행할 수 있습니다.

예시

다음과 같은 상황을 가정해 봅시다. 다음과 같은 잘못된 로직으로 deposit_and_stake를 개발한다고 상상해 봅시다. (1) 사용자가 우리에게 돈을 보냅니다. (2) 우리는 그것을 잔고에 추가합니다. 그러면, 사용자는 (2)와 (4) 사이에 호출을 철회하도록 예약할 수 있으며, 스테이킹에 실패하면 사용자는 두 번 돈을 받게 됩니다.

img 교차 컨트랙트 호출과 콜백 사이에 무슨 일이든 일어날 수 있습니다

다행스럽게도 솔루션은 다소 간단합니다. 사용자의 잔고에 돈을 즉시 추가하는 대신, 콜백이 올 때까지 기다립니다. There we check, and if the staking went well, then we add it to their balance.

img 교차 컨트랙트 호출 사이에 금액을 다루는 올바른 방법

Was this page helpful?