fix(security): 보안 제보 14건 + 유사 결함 전수조사 수정
sir.kr 커뮤니티 제보(Xbuilder 님 외)와 전수조사 발굴분을 코어·게시판· 이커머스·페이지·ckeditor5 전반에 반영. - 통합 검색 하이라이트: 코어 SearchHighlighter 로 원문 이스케이프 후 강조 (저장형 XSS 차단, board/ecommerce/page 3중복제 통합) - 공개 최신글·인기글·관리자 대시보드: 읽기권한 없는 게시판·블라인드·비활성 게시판 글 필터. 비밀글은 기존 공개 정책대로 제목 노출 유지(본문만 보호) - 게시판 관리 대시보드 권한 게이트, 이커머스 쿠폰 다운로드·리뷰 대상·주문옵션 확정 스코프 강화, 취소/환불 항목 검증 회원/비회원 대칭 - 만료 토큰 거부(SetLocale), 회원 탈퇴·정보관리 실패 시 내부 오류 원문 마스킹 - 예외→응답 매핑 정비(generic catch 상태코드), ckeditor 업로드 권한 게이트 정리 정책 정합 정정: 착수 계획이 "비밀글 제목 노출=취약점"으로 전제해 공개 최신글· 대시보드에 넣었던 is_secret 필터는, 저장소가 확정한 "제목 공개, 본문만 보호" 정책(2026-01-02/02-04/06-18/06-19)과 배치되어 되돌림. 읽기권한·블라인드 필터는 유지. Chrome MCP 실측(T1~T10) + 회귀 테스트로 확인.
This commit is contained in:
1 parent
2b5972437b
commit
cf1d8ab52c
84 files changed
+3195
-246
No files matched your search
@@ -2,11 +2,11 @@
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use App\Models\User;
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\App;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Laravel\Sanctum\PersonalAccessToken;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
@@ -75,9 +75,9 @@ class SetLocale
|
||||
* 따라서 Bearer 토큰을 직접 파싱하여 사용자를 가져옵니다.
|
||||
*
|
||||
* @param Request $request HTTP 요청
|
||||
* @return \App\Models\User|null 사용자 또는 null
|
||||
* @return User|null 사용자 또는 null
|
||||
*/
|
||||
private function resolveUser(Request $request): ?\App\Models\User
|
||||
private function resolveUser(Request $request): ?User
|
||||
{
|
||||
// 이미 인증된 경우 (세션 기반 인증)
|
||||
if (Auth::check()) {
|
||||
@@ -88,7 +88,14 @@ class SetLocale
|
||||
$bearerToken = $request->bearerToken();
|
||||
if ($bearerToken) {
|
||||
$token = PersonalAccessToken::findToken($bearerToken);
|
||||
if ($token && $token->tokenable instanceof \App\Models\User) {
|
||||
|
||||
// 만료된 토큰은 인증되지 않은 것으로 취급 (guest 로케일 폴백).
|
||||
// OptionalSanctumMiddleware 와 동일한 만료 검사를 적용한다.
|
||||
if ($token && $token->expires_at && $token->expires_at->isPast()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if ($token && $token->tokenable instanceof User) {
|
||||
return $token->tokenable;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user