pragma solidity ^0.4.18;
contract Reentrancy {
mapping(address => uint) public balances;
function withdraw(uint _amount) public {
if(balances[msg.sender] >= _amount) {
if(msg.sender.call.value(_amount)()) { // ==> Khai thác lỗ hổng Reentrancy tại đây: rút tiền khỏi tài khoản ngân hàng
_amount;
}
balances[msg.sender] -= _amount; // ==> Trừ số tiền đã rút trong tài khoản. Nếu khai thác lỗi trên thành công, hàm này sẽ không bao giờ được thực thi.
}
}
}