본문 바로가기

전체 글

(142)
서비스 기획 기초 역량 - TECH 1. 소프트웨어 개발주기- 요구사항 분석: 요구사항 수집, 명확한 기능 명세서 작성- 설계: 소프트웨어 아키텍처와 데이터베이스 스키마 설계, 주요 인터페이스 및 알고리즘 정의- 구현: 코드 작성, 소프트웨어 컴포넌트 개발- 테스트: 버그 찾고 수정, 소프트웨어 요구사항 충족 확인- 배포: 사용자 환경에 배포- 업데이트: 지속적으로 업데이트 및 개선 2. 시스템 아키텍쳐- Monolithic Architecture: 프론트엔드(UI) > 백엔드 레이어(비즈니스 로직) > 데이터 레이어 DB Layer- Microservice Architecture(MSA): API 게이트웨이 > 마이크로 서비스(사용자 관리, 주문, 결제 ...) > DB- MSA는 DB를 독립적으로 갖기 때문에 데이터 구조 변경에 의한..
웹 개발자를 위한 웹 보안: 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)를 사용하면 초기에 버그와 취약점을 대응하여 사이트를 보호할 수 있다. - 이슈 트래킹 소프트웨어를 사용해 설계 목표를 문서화해야 한다.- 이전 버전의 코드를 검사에 사용할 수 있도록 하고, 코드 검토를 쉽게 구성할 수 있도록 소스 관리에 코드를 보관해야 한다.- 릴리스 전에 프로덕션 환경과 유사하고 데이터를 최대한 주의해 처리하는 전용 격리 환경에서 코드를 테스트해야 한다.- 재현 가능하고 되돌릴 수 있는 신뢰 있는 릴리스 프로세스가 있어야 한다. 구축 준비가 완료된 자산을 생성하는 스크립트로 작성된 빌드 프로세스가 있다면 정기적으로 실행하고 지속적인 통합 환경에서 유닛 테스트를 수행해야..
혼자 하는 웹 보안 스터디 보안 서비스 UX 운영을 보조하면서, 일부 기능만 개선하다가 여러가지 대안의 장단점을 깊게 비교하기 위해선 해당 도메인에 대한 이해가 필요하다고 생각되었다. 내가 참여하고 있는 프로젝트는 여러가지 보안 중 특히 웹 보안쪽인데, 웹 보안에 관련되어 책도 읽고 유튜브 강의도 많이 찾아보려고 한다. 공부를 하다 보니, 해킹과 보안 도메인에 대한 이해를 위해선 인터넷과 네트워크 자체를 이해하는 과정이 필요하다고 느껴졌다. 그리고 대학교 때 들었던 리눅스 강의가 많이 도움이 되는 것 같다고 느껴졌다. 또한 사이드프로젝트에서 웹사이트에 콘텐츠를 올리기 위해 사용했던 슈퍼베이스도 데이터베이스 클라우드 서비스라는걸 알게 되었다. 당장 실무 프로젝트를 이해하기 위해서 산 책이지만 그동안 겉으로만 알았던 지식들이 끼어맞춰..