← 질문 목록
#365깊이 0

사용자 입력을 왜 전부 의심해야 하는가?

인프라 · 보안기초보안 공격

공격자가 마음대로 정할 수 있는 값이라서다. 그중 가장 파괴적인 길이 데이터가 코드로 해석되는 것이고, SQL 인젝션과 XSS는 겉모습만 다를 뿐 이 구조를 공유한다.

  1. 입력이 문자열로 들어온다
  2. 그다음은 검증 없이 쿼리나 HTML에 이어 붙인다입니다. 그다음

    검증 없이 쿼리나 HTML에 이어 붙인다
  3. 그다음은 해석기는 어디까지가 데이터인지 모른다입니다. 그다음

    해석기는 어디까지가 데이터인지 모른다
  4. 그다음은 입력 일부가 명령으로 해석될 수 있다입니다. 그다음

    입력 일부가 명령으로 해석될 수 있다

막는 원칙은 붙이지 않는 것이다. 쿼리는 파라미터 바인딩으로 값과 명령을 분리해 전달하고, 화면에 내보낼 때는 그 문맥에 맞게 이스케이프한다.

이스케이프는 문맥마다 다르다. HTML과 자바스크립트 문자열과 URL은 위험한 글자가 서로 달라 한 번의 치환으로 전부를 막을 수 없다. 사용자에게 HTML 자체를 허용한다면 치환이 아니라 정화 도구가 필요하다.

주의

클라이언트 검증은 보안이 아니다. 화면의 검사는 도구로 얼마든지 건너뛸 수 있으므로 사용성 장치일 뿐이고, 지키는 검증은 서버 진입점에서 다시 한다.

의심할 범위는 폼 입력만이 아니다. 헤더, 쿠키, URL 경로, 업로드된 파일 이름까지 — 신뢰 경계 밖에서 온 것은 전부 같은 자격이다. 코드가 되지 않아도 경로를 타고 남의 파일에 닿거나 서버를 대신 움직이게 하는 길도 있다.

공격 이름보다 데이터와 명령이 섞이는 구조를 봐야 한다. 인젝션 계열의 답은 늘 같다 — 데이터와 명령을 한 줄에 섞지 않는다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

사용자 입력을 왜 전부 의심해야 하는가?