Book (20) 썸네일형 리스트형 웹 개발자를 위한 웹 보안: 10장 요약 - 세션 하이재킹 서버의 세션 관리 기능에 취약점이 없을 경우에도 해커는 다른 사용자의 유효한 세션을 도용할 수 있는데, 이를 세션 하이재킹이라고 한다. 세션 작동 방식사용자가 HTTP에서 자신을 인증하면, 웹 서버는 로그인 프로세스 중에 사용자에게 세션 식별자를 할당한다. 세션 식별자를 통해 웹 서버는 함께 제공된 세션 ID를 인식해 적합한 사용자에게 매핑한다. 세션 ID는 사용자 이름과 달리 임시로 할당된 값이어야 한다. 해커들이 사용자 이름을 가지고 세션 ID를 도용할 수 있기 때문이다. 사용자 이름 외에도 웹 서버는 사용자의 최근 활동과 관련된 정보인 세션 상태를 세션 ID 옆에 저장한다. 전통적인 세션 관리 모델에서, 웹 서버는 세션 상태를 메모리에 유지하고 웹 서버와 브라우저는 세션 식별자를 앞뒤로 전달한다. .. 웹 개발자를 위한 웹 보안: 9장 요약 - 인증 손상 로그인은 사용자를 식별하는 프로세스인 인증의 한 가지 형태다. 기본 인증 방식은 사용자가 제공한 사용자 이름과 암호 사이에 콜론(:) 문자를 연결해 username:password 문자열을 생성한다. 이후 Base64라는 알고리듬을 사용해 문자열을 인코딩한 후, HTTP 요청의 Authorizationa 헤더에 있는 서버로 다시 전송한다. 다이제스트 인증은 브라우저가 사용자 이름, 암호, URL로 구성된 해시를 생성하는 것이다. 해시는 단방향 암호화 알고리듬의 출력값으로, 고유한 패턴을 생성한다. 그러나 이런 HTML 네이티브 인증 방식은 웹사이트에 맞게 인증 프롬프트를 스타일링 할 수 없어 사용자 경험에서 불편하다. 따라서 현대의 웹사이트들은 UI 구현과 세션 관리가 쉽고 비밀번호 복구 등 추가 보안 .. 웹 개발자를 위한 웹 보안: 8장 요약 - 사이트 간 요청 위조 공격 공격자는 사용자를 속여 원치 않거나 예상치 못한 작업을 수행하도록 유도하는 악의적인 링크를 클릭하도록 할 수 있다. 이를 사이트 간 요청 위조 (CSRF 또는 XSRF)라고 한다. 공격자는 CSRF를 사용해 연락처 목록을 도용하고, 원클릭 구매를 트리거하거나 라우터 구성을 변경한다. 공격자는 일반적으로 GET 요청을 구현하는 웹사이트를 공격해 CSRF를 시작한다. GET 요청은 공격 대상자가 링크를 클릭할 때 트리거되므로 대상 사이트에 잘못된 링크를 조작할 수 있기 때문이다. CSRF 공격에서 사용자를 보호하려면 GET 요청이 서버 상태를 변경하지 않도록 해야한다. REST 원칙에 따라 GET 요청을 보호해 잘못된 URL을 클릭해도 서버 상태가 변경되는 것을 막는다. 그러나 서드 파티 사이트에 호스팅된 .. 웹 개발자를 위한 웹 보안: 7장 요약 - 크로스 사이트 스크립팅 공격 공격자가 웹 서버와 같은 백엔드 시스템을 제어하기 위해 악의적으로 HTTP 요청을 작성하는 인젝션과 달리, 크로스 사이트 스크립팅 (XSS)는 사용자의 브라우저에 악의적인 자바스크립트를 주입하는 것을 의미한다. 자바스크립트는 웹 페이지의 모든 부분을 읽고 수정할 수 있기 때문이다. 스토어드 크로스 사이트 스크립팅 공격웹사이트는 사용자가 탐색한 URL에 따라 데이터베이스로부터 콘텐츠를 가져와서 페이지에 삽입해 완성된 HTML을 생성한다. 데이터베이스에서 나오는 페이지 내용은 해커의 잠재적인 공격 벡터 (Attack Vector)다. 크로스 사이트 스크립팅 공격은 공격자가 데이터베이스에 자바스크립트 코드를 주입하여 웹 서버가 HTML을 렌더링 할 때 자바스크립트를 작성하도록 하는 것이다. 예를 들어, 사용자.. 웹 개발자를 위한 웹 보안: 6장 요약 - 인젝션 공격 인젝션 공격이란, 공격자가 애플리케이션에 외부 코드를 주입해 애플리케이션을 통제하거나 민감한 정보를 읽으려고 시도하는 것을 의미한다. 웹 서버는 브라우저뿐만아니라 모든 유형의 클라이언트에서 HTTP 요청을 받아들인다. 그러나 서버 측 코드는 HTTP 요청의 클라이언트를 구별할 수 없어 스크립트나 브라우저가 HTTP 요청을 생성했는지 신뢰할 수 있는 방법이 없다. 이 때 최선의 방법은 요청을 생성한 에이전트의 User-Agent 헤더를 확인하는 것인데, 스크립트나 해킹 도구는 헤더의 내용을 스푸핑하므로 악의적인 코드를 전달해 서버가 코드를 실행하도록 유도하는 인젝션 공격이 가능해진다. 따라서 웹사이트에 코드를 작성할 때, 어떤 요청이 들어올지 예상하는 것뿐만 아니라 사이트에서 처리되고 있는 HTTP 요청.. 웹 개발자를 위한 웹 보안: 5장 요약 - 프로그래머 작동 방식 새로운 웹사이트 기능 설계, 코드 작성, 테스트, 변경 사항 추진의 프로세스를 잘 구성된 개발 수명 주기 (SDLC)를 사용하면 초기에 버그와 취약점을 대응하여 사이트를 보호할 수 있다. - 이슈 트래킹 소프트웨어를 사용해 설계 목표를 문서화해야 한다.- 이전 버전의 코드를 검사에 사용할 수 있도록 하고, 코드 검토를 쉽게 구성할 수 있도록 소스 관리에 코드를 보관해야 한다.- 릴리스 전에 프로덕션 환경과 유사하고 데이터를 최대한 주의해 처리하는 전용 격리 환경에서 코드를 테스트해야 한다.- 재현 가능하고 되돌릴 수 있는 신뢰 있는 릴리스 프로세스가 있어야 한다. 구축 준비가 완료된 자산을 생성하는 스크립트로 작성된 빌드 프로세스가 있다면 정기적으로 실행하고 지속적인 통합 환경에서 유닛 테스트를 수행해야.. 웹 개발자를 위한 웹 보안: 4장 요약 - 웹 서버 작동 방식 웹 서버는 HTTP 요청에 대응하여 정적 자원과 동적 자원 두 가지 콘텐츠를 제공한다. 정적 자원은 HTML 파일, 이미지 파일과 같이 HTTP 응답에서 변경되지 않고 변환하는 유형의 파일이다. 동적 자원은 웹 서버가 HTTP 요청에 대응하여 실행하거나 해석하는 코드, 스크립트 또는 템플릿을 의미한다. 정적 자원을 반환할 때 웹 서버는 데이터를 HTTP 응답에 추가하거나 정적 자원을 반환하기 전에 처리한다. 응답에 사용되는 대역폭을 줄이기 위해 압축하거나, 일정 시간 내에 사용자가 다시 요청하는 경우에 빠르게 대비하기 위해 정적 자원의 로컬 복사본을 캐시하고 사용하도록 HTTP 응답에 캐시 헤더를 추가하기도 한다. 이를 통해 사용자에게 잘 응답하고 서버가 처리해야 하는 부하를 감소시킨다. 이런 프로세스 .. 웹 개발자를 위한 웹 보안: 3장 요약 - 브라우저 작동 방식 웹 페이지의 소프트웨어 구성요소 중, HTML을 화면에 보이는 시각적 표현으로 변환하는 것을 렌더링 파이프라인이라고 한다. HTML 구문 분석, 문서의 구조와 내용 이해, 운영체제가 이해할 수 있는 도면으로 변환하는 역할을 담당한다. 초기에는 텍스트와 이미지를 로드하여 HTML 문서에 나타나는 순서대로 화면에 그렸으나, 오늘날의 웹은 스타일링 정보를 별도의 CSS 파일로 인코딩해 브라우저에 각 페이지 요소가 표시되는 방법을 정확하게 지시하게 된다. 브라우저가 HTTP 응답을 수신하면 HTML 구문을 분석하여 DOM을 생성하고, 스타일링 규칙을 각 DOM 요소에 적용한다. 마지막으로 브라우저가 페이지 구조를 확정하고 스타일링 정보를 적용하는 방법을 세분화한 후 화면에 웹 페이지를 그린다. DOM을 구성할 .. 이전 1 2 3 다음