상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
파인애플의 품질을 판단하는 기준은 무엇인가요?
단백질은 언제 섭취하는 것이 가장 효과적인가요?
단백질을 많이 함유한 스낵은 어떤 것이 있나요?
영양소의 역할은 무엇인가요?
비타민과 미네랄의 주요 영양소는 어떤 것들이 있나요?
팔라완에서의 독특한 숙소 추천은 무엇이 있나요?
팔라완에서의 자원봉사 기회는 어떤가요?
시애틀의 야경이 아름다운 장소는 어디인가요?
시애틀의 숙박 시설은 어떤 것이 좋나요?
산토리니의 자연 경관을 즐길 수 있는 장소는?
산토리니의 유명한 와이너리 추천 부탁드립니다.
산토리니의 대표적인 슬로우 투어 코스는?
Previous
Next
수정하기 - 솔리디티에서 'msg.sender'의 보안 문제는 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
`msg.sender`는 Solidity에서 트랜잭션을 발송한 주소를 나타내는 중요한 변수입니다. 그러나 이 변수는 여러 보안 문제를 야기할 수 있으며, 이를 이해하고 적절히 대처하는 것이 스마트 계약 개발에서 매우 중요합니다. 다음은 `msg.sender`와 관련된 주요 보안 문제들입니다. 1. 주소 위조 공격 (Address Spoofing) 스마트 계약은 다른 계약이나 외부 주소에서 호출될 수 있습니다. 이 경우, `msg.sender`는 호출한 계약의 주소가 됩니다. 만약 호출한 계약이 악의적이라면, 공격자는 자신이 원하는 방식으로 계약을 호출하고, 이를 통해 의도하지 않은 행동을 유도할 수 있습니다. 예를 들어, 특정 기능이 특정 주소에서만 호출될 수 있도록 제한하는 경우, 공격자는 자신이 원하는 주소를 사용하여 호출할 수 있습니다. 2. <a href='https://sangseek.com/sangseeks/재진입 공격/ko'>재진입 공격</a> (Reentrancy Attack) 재진입 공격은 스마트 계약이 외부 호출을 할 때 발생할 수 있는 문제입니다. 예를 들어, 계약 A가 계약 B의 함수를 호출하고, 계약 B가 다시 계약 A의 함수를 호출하는 경우, `msg.sender`는 계약 B가 됩니다. 이로 인해 계약 A의 상태가 예상치 못한 방식으로 변경될 수 있습니다. 이러한 공격을 방지하기 위해, 상태 변수를 업데이트하기 전에 외부 호출을 수행하거나, "checks-effects-interactions" 패턴을 따르는 것이 좋습니다. 3. 권한 관리 (Access Control) 스마트 계약에서 특정 기능은 특정 주소만 사용할 수 있도록 제한해야 할 때가 많습니다. 그러나 `msg.sender`를 사용하여 권한을 관리할 경우, 호출자가 다른 계약일 때 예상치 못한 결과가 발생할 수 있습니다. 예를 들어, 특정 함수가 `msg.sender`가 특정 주소일 때만 실행되도록 설정했을 경우, 다른 계약이 해당 함수를 호출하면 권한이 없는 사용자가 기능을 사용할 수 있게 됩니다. 이를 방지하기 위해, `msg.sender`를 직접 사용하는 대신, 호출자의 주소를 검증하는 추가적인 로직을 구현해야 합니다. 4. 가스 비용과 호출자 확인 스마트 계약의 호출자는 가스 비용을 지불해야 합니다. 그러나 호출자가 다른 계약일 경우, 가스 비용이 부족할 수 있으며, 이로 인해 계약의 상태가 예상치 못한 방식으로 변경될 수 있습니다. 예를 들어, 호출자가 가스 비용을 충분히 지불하지 못하면, 계약의 상태가 변경되지 않고, 이로 인해 계약의 로직이 실패할 수 있습니다. 따라서, 계약의 상태를 변경하는 함수는 항상 호출자가 충분한 가스를 지불했는지 확인해야 합니다. 5. <a href='https://sangseek.com/sangseeks/이벤트 로그/ko'>이벤트 로그</a>와 `msg.sender` 스마트 계약에서 이벤트를 기록할 때 `msg.sender`를 포함하는 경우, 외부에서 호출된 계약의 주소가 기록됩니다. 이는 나중에 감사나 디버깅을 할 때 혼란을 초래할 수 있습니다. 따라서, 이벤트 로그를 기록할 때는 호출자의 주소를 명확히 구분할 수 있는 방법을 고려해야 합니다. 결론 `msg.sender`는 Solidity에서 매우 유용한 변수이지만, 이를 사용할 때는 여러 보안 문제를 고려해야 합니다. 스마트 계약을 설계할 때는 항상 `msg.sender`의 출처를 확인하고, 외부 호출에 대한 안전성을 확보하는 것이 중요합니다. 이를 통해 스마트 계약의 보안을 강화하고, 예상치 못한 공격으로부터 보호할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기