사용자 도구

사이트 도구


wiki:it:dream_of_enc:backend:blog_api

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

wiki:it:dream_of_enc:backend:blog_api [2025/07/30 06:43] – 만듦 - 바깥 편집 127.0.0.1wiki:it:dream_of_enc:backend:blog_api [2025/07/31 00:53] (현재) syjang0803
줄 1: 줄 1:
-====== views/blog_api.py: 블로그 API 로직 ======+====== 1. views/blog_api.py: 블로그 API 로직 ======
  
-`blog_api.py`는 블로그 기능과 관련된 모든 서버 로직을 처리하는 **Flask 블루프린트** 모듈입니다. 게시물/댓글 관리, 사용자 인증, 파일 업로드 등 다양한 기능을 API 엔드포인트로 제공합니다.+''blog_api.py''는 블로그 기능과 관련된 모든 서버 로직을 처리하는 **Flask 블루프린트** 모듈입니다. 이 파일은 게시물 및 댓글 관리, 사용자 인증, 파일 업로드 등 블로그 운영에 필요한 다양한 기능을 API 엔드포인트 형태로 제공합니다.
  
-`url_prefix='/api/blog'설정에 따라, 이 파일의 모든 API 주소는 `/api/blog`로 시작합니다.+''url_prefix='/api/blog''' 설정에 따라, 이 파일에 정된 모든 API 주소는 ''/api/blog''로 시작합니다. 이는 API 엔드포인트의 일관성과 모듈성을 보장합니다.
  
-=== 주요 기능 및 엔드포인트 ===+----
  
-==== 1. 증 (`/auth`) ==== +===== 주요 기능 및 엔드포트 =====
-*   **Method**: `POST` +
-*   **설명**: 환경변수에 저장된 비밀번호와 사용자가 입력한 비밀번호를 비교하여 관리자 권한을 인증합니다.+
  
-==== 2게시물(Post) 관리 ==== +''blog_api.py''는 음과 같은 주요 기능들을 위한 RESTful API 엔드포트를 합니다. 
-*   `GET /posts`: 모든 게시물 목록을 최신순으로 조회합니+----
-*   `GET /posts/<id>`: 특정 ID의 게시물을 조회하고, 조회수를 1 증가시킵니다. +
-*   `POST /posts`: 새 게시물을 등록합니다. (관리자 인증 필+
-*   `PUT /posts/<id>`: 존 게시물을 수정합니다. (관리자 증 필요) +
-*   `DELETE /posts/<id>`: 게시물을 삭제합니다. (관리자 인증 필요)+
  
-==== 3. 댓글(Comment관리 ==== +==== 인증 (%%/auth%%) ==== 
-*   `POST /posts/<id>/comments`특정 게시물에 새 댓글을 추가합니다. 댓글 비밀번호는 해시하여 저장됩니다. +  *   **HTTP 메서드**: ''POST'' 
-*   `PUT /posts/<id>/comments/<comment_id>`: 댓글을 수정합니다. 비밀번호를 확해야 수정 가능합니다. +  *   **설명**관리자 권한을 인증하기 위한 엔드포인트입니다. 요청 본문에 포함된 비밀번호를 서버 환경 변수(''ADMIN_PASSWORD'' 등)에 저장된 비밀번호와 비교하여 일치하면 증 성공 응답을 반환합니다. 이 과정을 통해 관리자만 접근 가능한 기능(게시물 작성/수정/삭제, 이미지 업로드 등)을 보호합니다.
-*   `DELETE /posts/<id>/comments/<comment_id>`: 댓글을 삭제합니다. 비밀번를 확인해야 삭제 가능합니다.+
  
-==== 4. 기타 ==== +---- 
-*   `GET /site-info`: 사이트의 총 방문자 수를 반환하고, 카운트를 1 증가시킵니다. +==== 게시물 (Post) 관리 ==== 
-*   `POST /images`: 게시물에 포함될 이미지를 서버에 업로드하고, 접근 가능한 URL을 반환합니다. (관리자 인증 필요)+블로그 게시물을 생성, 조회, 수정, 삭제하는 데 사용되는 엔드포인트입니다.
  
-=== 보안 처리 === +^ 엔드포인트 ^ HTTP 메서드 ^ 설명 ^ 관리자 인증 
-*   **관리자 인증**: 게시물 작성//삭제, 이미지 업로드 시 비밀번호를 확인여 인된 사용자만 작업을 수행할 수 있도록 합니다. +| %%/posts%% | ''GET'' | 모든 게시물을 최신순으로 조회합니다. | 필요 없음 | 
-*   **XSS (Cross-Site Scripting) 방어**: `bleach` 라이브러리를 사용하여 게시물과 댓글의 HTML 내용에서 허용되지 않은 위험한 태그와 속성을 제거(Sanitize)합니다. 이를 통해 악적인 스크립트가 삽입되는 것을 방지합니다. +| %%/posts/<id>%% | ''GET'' | 특정 ID의 게물을 조회고, 조회수를 1 증시킵니다. | 필요 없음 | 
-*   **비밀번호 해싱**: `werkzeug.security`를 사하여 댓글 비밀번호를 직접 저장하지 않고, 암호화된 해시값으로 변환하여 저장합니다.+| %%/posts%% | ''POST'' | 새 게시물을 록합니다. 요청 본문에 게시물 제목, 내용 을 포함해야 합니다. | 필요 | 
 +| %%/posts/<id>%% | ''PUT'' | 기존 ID의 게시물을 수정합니다. 요청 본문에 수정할 내을 포함야 합니다. | 필요 | 
 +| %%/posts/<id>%% | ''DELETE'' | 특정 ID의 게물을 삭제합니다. | 필요 |
  
-이처럼 `blog_api.py`는 블로그 기능의 핵심 로직을 체계적으로 구현고, 보안적인 측면까지 고려하여 설계되었습니다. +---- 
 +==== 댓글 (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''는 다음과 같은 보안 메커니즘을 적용하여 블로그 시스템의 안정성과 데이터 무결성을 확보합니다.
 +
 +  *   **관리자 인증**:
 +      -   게시물 작성, 수정, 삭제 및 이미지 업로드와 같은 민감한 작업은 반드시 관리자 인증(`POST /api/blog/auth`를 통해 발급된 세션 또는 토큰)을 거쳐야만 수행할 수 있습니다.
 +      -   이는 인가되지 않은 사용자가 블로그 콘텐츠를 무단으로 변경하거나 시스템에 악영향을 미치는 것을 방지합니다.
 +  *   **XSS (Cross-Site Scripting) 방어**:
 +      -   사용자가 입력하는 게시물 내용이나 댓글에는 악의적인 스크립트가 포함될 수 있습니다. 이를 방지하기 위해 ''bleach'' 라이브러리를 사용하여 HTML 내용을 필터링(Sanitize)합니다.
 +      -   ''bleach''는 허용된 HTML 태그(예: `<strong>`, `<em>`, `<a>`)와 속성만을 남기고, 잠재적으로 위험한 스크립트 태그(`%%<script>%%`)나 이벤트 핸들러 속성(`%%onclick%%`) 등을 제거하여 XSS 공격으로부터 보호합니다.
 +  *   **비밀번호 해싱**:
 +      -   댓글 작성 시 사용자가 입력하는 비밀번호는 평문으로 데이터베이스에 저장되지 않습니다.
 +      -   대신 ''werkzeug.security'' 모듈의 `generate_password_hash` 함수를 사용하여 단방향 암호화된 해시값으로 변환하여 저장합니다.
 +      -   비밀번호 확인 시에는 `check_password_hash` 함수를 사용하여 입력된 비밀번호와 저장된 해시값을 비교하고, 원본 비밀번호를 복원할 수 없도록 하여 보안을 강화합니다.
 +
 +이처럼 ''blog_api.py''는 블로그 기능의 핵심 로직을 체계적으로 구현할 뿐만 아니라, 사용자 데이터 보호와 시스템 보안을 위한 다양한 측면까지 고려하여 설계되었습니다.
wiki/it/dream_of_enc/backend/blog_api.1753857794.txt.gz · 마지막으로 수정됨: 저자 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki