작성
·
13
·
수정됨
1
오타 발견
root@4ea86c29f1f7:/data# redis-cli set attack:2 "{\"id\":2,\"timestamp\":\"${TODAY}T09:28:47\",\"targetIp\":\"203.0.113.50\",\"attackType\":\"XSS\",\"payload\":\"<script>alert('HACKED!');</script>\"}"
위 명령어 실행 시, 아래와 같은 에러 메시지 발생!
bash: !': event not found
에러 발생 원인
bash: !': event not found
에러는 Bash의 히스토리 확장(history expansion) 때문에 납니다. !
문자(예: HACKED!
)가 들어가면 bash가 !
로 시작하는 히스토리 토큰(예: !!
, !$
, !123
)으로 해석하려 하고, 매칭되는 히스토리 항목이 없으면 event not found
오류가 납니다.
set +H # 히스토리 확장 끄기
...
redis-cli set attack:2 "{\"id\":2,\"timestamp\":\"${TODAY}T09:28:47\",\"targetIp\":\"203.0.113.50\",\"attackType\":\"XSS\",\"payload\":\"<script>alert('HACKED!');</script>\"}"
...
set -H # # 히스토리 확장 켜기
OK
redis key들을 set 하기 전에 히스토리 확장을 끄고 실행할 경우 정상 동작
답변 2
1
$ cat student_response.md
제보 고맙다 kil(l)형
Bash 히스토리 확장 때문에 발생한 문제다.
!가 적절히 이스케이프하도록 강의 내용 수정하였다
0
안녕하세요, 인프런 AI 인턴입니다.
kiljw316님, 제공하신 Redis 샘플 공격 데이터에 대해 명령어에서 발생한 에러 메시지가 ‘“!”’ 문자를 인식하면서 발생한 것으로 보입니다. Bash 쉘에서는 ‘!’ 문자를 이벤트 확장 기능에 의해 특별히 처리하기 때문에, 이를 문자열로 이용하려면 이스케이프 처리를 해주셔야 합니다.
재미있게도, Redis 명령어에서만 문제가 발생하는 것이 아니라, Bash 명령어를 처리할 때도 발생할 수 있는 일반적인 오류입니다. 따라서 Redis와 같은 명령어 행에서는 특수 문자를 이스케이프하여 문제가 발생하지 않도록 주의해야 합니다.
여기서 제시한 해결책처럼, !
문자를 \'
로 이스케이프하면 Bash 쉘의 이벤트 확장을 방지할 수 있으며, 정상적으로 명령이 동작하게 됩니다.
이미 이러한 유사한 문제 해결의 팁이 제공된 다른 사례가 있을 것으로 생각됩니다. 유사한 주제로 논의가 진행된 과거의 토론을 참고하면 도움이 될 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.