입력이 코드가 되는 자리로 푸는 결
XSS는 사용자가 넣은 입력이 화면에서 글자가 아니라 코드로 실행되는 것으로 이해합니다. 핵심은 데이터로 와야 할 게 코드 자리에 끼는 것입니다. 예를 들어 댓글에 넣은 글이 그대로 화면에 박히면, 그 안의 스크립트가 다른 사람 브라우저에서 실행됩니다. 왜 위험하냐면, 그 스크립트가 그 사용자 권한으로 동작해, 로그인 정보를 빼돌리거나 그 사람인 척 행동할 수 있기 때문입니다. 단순 화면 깨짐과 차원이 다릅니다. 막는 원리도 거기서 나옵니다.
입력을 화면에 넣을 때 코드로 안 읽히게 글자로 처리(이스케이프)하는 게 핵심입니다. 데이터를 데이터 자리에만 두는 것입니다. 학부 프로젝트에서 입력을 그대로 출력했다가, 스크립트 한 줄이 실행되는 걸 직접 확인하고 막은 경험이 있습니다. 다만 한 가지 처리로 다 막힌다고 보진 않습니다.
입력이 들어가는 자리마다 맥락이 달라, 자리에 맞게 막아야 한다고 봅니다.