173
10
장
사이트 간 스크립팅(XSS)
라우저 )에서 실행되지만 스크립트는 서버 측 데이터베이스에 저장된다. 스크립트는 서버 측에
텍스트로 저장되며 평가되지 않는다(나중에 다룰
Node
.
js
서버와 관련된 원격 코드 실행
remote
code
execution
(
RCE
) 같은 사례는 예외다 ).
스크립트가 서버 측에 저장되기 때문에 사용자가 제공한 여러 유형의 데이터를 저장하는 사이
트에서는 데이터베이스에 저장된 스크립트가 있는지 정기적으로 검사하는 것이 저렴하고 효율
적인 완화 전략이 될 수 있다. 이는 실제로 보안을 중시하는 소프트웨어 회사에서
XSS
의 위험
을 완화하기 위해 실행하는 여러 기법 중 하나다. 그렇지만 이것이 완벽한 해결책이 될 수는 없
음을 곧 살펴볼 것이다. 고급
XSS
페이로드는 평문
plain
text
으로 작성되지 않을 수도 있기 때문이
다(베이스
64
, 바이너리 등 ). 페이로드가 여러 곳에 나뉘어 저장되어 있다가, 클라이언트에서
사용하는 특정 서비스에 의해 이어 붙여져야 비로소 위험해지기도 한다. 개발자가 구현한 보호
메커니즘을 우회하기 위해 경험 많은 해커들이 사용하는 트릭이 몇 가지 있다.
앞에서 시연한 저장
XSS
공격의 예에서는
DOM
에 스크립트 태그를 직접 주입해 자바스크립
트를 통해 악의적 스크립트를 실행했다.
XSS
에서 이러한 접근이 가장 일반적이기는 하지만 똑
똑한 보안 엔지니어와 보안에 민감한 개발자들이 가장 잘 막아내는 것이기도 하다.
단순한 정규 표현식을 사용해 스크립트 태그를 차단하거나 인라인 ...