Harden admin security controls
This commit is contained in:
@@ -42,24 +42,36 @@ portfolio/
|
||||
|
||||
File Station에서 두 폴더의 권한을 `http` 그룹에 쓰기 가능하게 설정하세요.
|
||||
|
||||
### 4. 비밀번호 설정 (⚠️ 매우 중요)
|
||||
### 4. 관리자 비밀번호와 보안 설정
|
||||
|
||||
**(A) 해시 생성**
|
||||
브라우저에서 접속:
|
||||
실제 관리자 비밀번호 해시는 저장소에 커밋하지 않습니다. 운영 서버에서는 다음 둘 중 하나로 설정하세요.
|
||||
|
||||
**(A) api/config.local.php 사용 권장**
|
||||
|
||||
1. `api/config.local.example.php`를 `api/config.local.php`로 복사합니다.
|
||||
2. 브라우저에서 다음 주소에 접속해 원하는 비밀번호의 해시를 생성합니다.
|
||||
```
|
||||
http://your-nas/portfolio/generate_password.php
|
||||
```
|
||||
원하는 비밀번호를 입력하면 해시가 출력됩니다.
|
||||
3. 생성된 해시를 `api/config.local.php`의 `ADMIN_PASSWORD_HASH` 값으로 넣습니다.
|
||||
4. `api/config.local.php`는 `.gitignore`에 포함되어 있으므로 저장소에 올리지 않습니다.
|
||||
|
||||
**(B) config.php 수정**
|
||||
`api/config.php` 파일을 열어 아래 줄을 찾고:
|
||||
```php
|
||||
define('ADMIN_PASSWORD_HASH', '$2y$10$YourHashWillGoHere...');
|
||||
**(B) 환경변수 사용**
|
||||
|
||||
서버 환경변수 `ADMIN_PASSWORD_HASH`에 `password_hash()`로 만든 해시를 설정해도 됩니다.
|
||||
|
||||
```bash
|
||||
ADMIN_PASSWORD_HASH='$2y$10$replace_with_your_generated_hash'
|
||||
```
|
||||
방금 생성된 해시로 교체합니다.
|
||||
|
||||
**(C) generate_password.php 삭제**
|
||||
보안을 위해 반드시 삭제하세요!
|
||||
`api/config.php`에는 기본 관리자 비밀번호나 실제 해시가 들어 있지 않아야 합니다. 설정이 없으면 관리자 로그인은 실패합니다.
|
||||
|
||||
**추가 운영 보안**
|
||||
|
||||
- 로그인 후 상태 변경 API는 CSRF 토큰을 요구합니다. 프론트엔드의 `fetch` 흐름은 로그인/세션 확인 응답에서 받은 토큰을 자동으로 보냅니다.
|
||||
- 업로드 실패 응답에는 서버 내부 경로, 임시 경로, 저장 대상 경로가 노출되지 않습니다. 상세 오류는 서버 로그에서만 확인합니다.
|
||||
- URL 입력은 `http`, `https`, `uploads/` 상대 경로만 허용합니다. CSS 색상 값은 hex 색상 allowlist로 제한합니다.
|
||||
- 보안을 위해 `generate_password.php`는 설정 완료 후 운영 서버에서 삭제하거나 접근을 차단하세요.
|
||||
|
||||
### 5. 접속
|
||||
- 메인: `http://your-nas/portfolio/`
|
||||
@@ -82,7 +94,8 @@ define('ADMIN_PASSWORD_HASH', '$2y$10$YourHashWillGoHere...');
|
||||
## 🔒 보안 체크리스트
|
||||
|
||||
- [ ] `generate_password.php` 삭제했는가?
|
||||
- [ ] `config.php`의 ADMIN_PASSWORD_HASH를 실제 해시로 교체했는가?
|
||||
- [ ] `api/config.local.php` 또는 `ADMIN_PASSWORD_HASH` 환경변수에 실제 관리자 해시가 설정되어 있는가?
|
||||
- [ ] `api/config.local.php`가 저장소에 커밋되지 않는가?
|
||||
- [ ] HTTPS 설정 (NAS의 Reverse Proxy 또는 Let's Encrypt)
|
||||
- [ ] 비밀번호는 8자 이상, 영문/숫자/기호 조합
|
||||
- [ ] `data/`, `uploads/` 폴더의 .htaccess 파일이 동작하는지 확인
|
||||
@@ -107,7 +120,7 @@ git push -u origin main
|
||||
→ `data/` 폴더의 쓰기 권한을 확인하세요.
|
||||
|
||||
**로그인이 안 됨**
|
||||
→ `config.php`의 ADMIN_PASSWORD_HASH가 올바르게 교체되었는지 확인하세요.
|
||||
→ `api/config.local.php` 또는 `ADMIN_PASSWORD_HASH` 환경변수에 올바른 해시가 설정되어 있는지 확인하세요.
|
||||
|
||||
**.htaccess가 동작하지 않음**
|
||||
→ Web Station에서 Apache 사용 + `mod_rewrite`, `AllowOverride All` 설정 필요.
|
||||
|
||||
Reference in New Issue
Block a user