-
솔리디티 로우레벨 취약점카테고리 없음 2018. 7. 17. 14:24
해당 컨트랙트에 Deposit 함수를 사용하여 계약 주소를
충전한 후 send()를 사용하여 계약 주소를 전송합니다
여기서 전송결과는 false라는 사실을 확인 할 수 있다.
즉 악의적인 컨트랙트로 이러한 기능을 보낼때 수신자가 컨트랙트이므로 계약서에
폴백 기능이 있어야 한다.
그러한 기능이 없는 경우 컨트랙트는 정기적인 거래를 통해 ether를 받을 수 없다
폴백기능
이더를 수신하려면 fallback 기능을 표시행헌더,
payable
없다
Contracts that receive Ether directly (without a function call, i.e. using
send
ortransfer
) but do not define a fallback function throw an exception, sending back the Ether (this was different before Solidity v0.4.0). So if you want your contract to receive Ether, you have to implement a fallback function.경고 -
ether를 직접 받는 (즉 함수 호출없이 send 또는 transfer을 사용하는 ) fallback 함수를 정의하지 않고 ether를 받는 계약은 계약서에 ether를 받기 위해선 대체 기능을 만들어야한다 .
여기서 반환체크가 수행되지 않으므로
다음 줄의 코드가 계속 되고
최종 금액은 이전되지 않았으나 잔액이 차감되게 됩니다.
취약점 방어 방법 -
또는 취약한 함수 send를 사용하지 않고
transfer 함수를 통하여 롤백시킨다 .