사용자 도구

사이트 도구


wiki:it:dream_of_enc:backend:blog_api

1. views/blog_api.py: 블로그 API 로직

blog_api.py는 블로그 기능과 관련된 모든 서버 로직을 처리하는 Flask 블루프린트 모듈입니다. 이 파일은 게시물 및 댓글 관리, 사용자 인증, 파일 업로드 등 블로그 운영에 필요한 다양한 기능을 API 엔드포인트 형태로 제공합니다.

url_prefix='/api/blog' 설정에 따라, 이 파일에 정의된 모든 API 주소는 /api/blog로 시작합니다. 이는 API 엔드포인트의 일관성과 모듈성을 보장합니다.


주요 기능 및 엔드포인트

blog_api.py는 다음과 같은 주요 기능들을 위한 RESTful API 엔드포인트를 제공합니다.


인증 (%%/auth%%)

  • HTTP 메서드: POST
  • 설명: 관리자 권한을 인증하기 위한 엔드포인트입니다. 요청 본문에 포함된 비밀번호를 서버 환경 변수(ADMIN_PASSWORD 등)에 저장된 비밀번호와 비교하여 일치하면 인증 성공 응답을 반환합니다. 이 과정을 통해 관리자만 접근 가능한 기능(게시물 작성/수정/삭제, 이미지 업로드 등)을 보호합니다.

게시물 (Post) 관리

블로그 게시물을 생성, 조회, 수정, 삭제하는 데 사용되는 엔드포인트입니다.

엔드포인트 HTTP 메서드 설명 관리자 인증
/posts GET 모든 게시물을 최신순으로 조회합니다. 필요 없음
/posts/<id> GET 특정 ID의 게시물을 조회하고, 조회수를 1 증가시킵니다. 필요 없음
/posts POST 새 게시물을 등록합니다. 요청 본문에 게시물 제목, 내용 등을 포함해야 합니다. 필요
/posts/<id> PUT 기존 ID의 게시물을 수정합니다. 요청 본문에 수정할 내용을 포함해야 합니다. 필요
/posts/<id> DELETE 특정 ID의 게시물을 삭제합니다. 필요

댓글 (Comment) 관리

각 게시물에 대한 댓글을 관리하는 엔드포인트입니다.

엔드포인트 HTTP 메서드 설명 인증/비밀번호 필요 여부
/posts/<id>/comments POST 특정 게시물(ID)에 새 댓글을 추가합니다. 댓글 작성 시 입력된 비밀번호는 해시되어 저장됩니다. 필요 없음 (댓글 비밀번호로 인증)
/posts/<id>/comments/<comment_id> PUT 특정 게시물(ID) 내의 댓글(comment_id)을 수정합니다. 수정 요청 시 올바른 댓글 비밀번호를 제공해야 합니다. 댓글 비밀번호 필요
/posts/<id>/comments/<comment_id> DELETE 특정 게시물(ID) 내의 댓글(comment_id)을 삭제합니다. 삭제 요청 시 올바른 댓글 비밀번호를 제공해야 합니다. 댓글 비밀번호 필요

기타 기능

블로그 운영에 필요한 기타 유틸리티성 엔드포인트입니다.

엔드포인트 HTTP 메서드 설명 관리자 인증
/site-info GET 사이트의 총 방문자 수를 반환하고, 동시에 방문자 카운트를 1 증가시킵니다. 필요 없음
/images POST 게시물 내용에 포함될 이미지를 서버에 업로드합니다. 업로드된 이미지의 접근 가능한 URL을 반환하여 게시물 내용에 삽입할 수 있도록 합니다. 필요

보안 처리

blog_api.py는 다음과 같은 보안 메커니즘을 적용하여 블로그 시스템의 안정성과 데이터 무결성을 확보합니다.

  • 관리자 인증:
    1. 게시물 작성, 수정, 삭제 및 이미지 업로드와 같은 민감한 작업은 반드시 관리자 인증(`POST /api/blog/auth`를 통해 발급된 세션 또는 토큰)을 거쳐야만 수행할 수 있습니다.
    2. 이는 인가되지 않은 사용자가 블로그 콘텐츠를 무단으로 변경하거나 시스템에 악영향을 미치는 것을 방지합니다.
  • XSS (Cross-Site Scripting) 방어:
    1. 사용자가 입력하는 게시물 내용이나 댓글에는 악의적인 스크립트가 포함될 수 있습니다. 이를 방지하기 위해 bleach 라이브러리를 사용하여 HTML 내용을 필터링(Sanitize)합니다.
    2. bleach는 허용된 HTML 태그(예: `<strong>`, `<em>`, `<a>`)와 속성만을 남기고, 잠재적으로 위험한 스크립트 태그(`<script>`)나 이벤트 핸들러 속성(`onclick`) 등을 제거하여 XSS 공격으로부터 보호합니다.
  • 비밀번호 해싱:
    1. 댓글 작성 시 사용자가 입력하는 비밀번호는 평문으로 데이터베이스에 저장되지 않습니다.
    2. 대신 werkzeug.security 모듈의 `generate_password_hash` 함수를 사용하여 단방향 암호화된 해시값으로 변환하여 저장합니다.
    3. 비밀번호 확인 시에는 `check_password_hash` 함수를 사용하여 입력된 비밀번호와 저장된 해시값을 비교하고, 원본 비밀번호를 복원할 수 없도록 하여 보안을 강화합니다.

이처럼 blog_api.py는 블로그 기능의 핵심 로직을 체계적으로 구현할 뿐만 아니라, 사용자 데이터 보호와 시스템 보안을 위한 다양한 측면까지 고려하여 설계되었습니다.

wiki/it/dream_of_enc/backend/blog_api.txt · 마지막으로 수정됨: 저자 syjang0803

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki