HDWebmobile 예약 및 약속
WooCommerce를 통해 예약 가능한 서비스와 약속을 판매하세요. 슬롯별 수용 인원이 초과 판매되지 않도록 보장합니다.
설명
HDWebmobile 예약 및 약속은 모든 단순 WooCommerce 상품을 예약 가능한 서비스로 전환합니다. 고객은 상품 페이지에서 이용 가능한 날짜와 시간 슬롯을 선택하며, 주문이 완료되는 즉시 예약이 확정되고, 이후 내 계정에서 예약을 확인하거나 취소할 수 있습니다.
이 플러그인이 존재하는 이유
경쟁 예약 플러그인(Amelia)에는 인증된 IDOR/대량 할당 취약점(CVE-2026-2931, CVSS 8.8)이 있었습니다. 해당 플러그인의 "내 예약 프로필 업데이트" 엔드포인트는 클라이언트가 제공한 필드를 수락하여 예약 레코드를 WordPress 사용자 ID에 연결했지만, 해당 ID가 여전히 요청자의 자신의 계정을 가리키는지 확인하지 않았습니다. 이로 인해 낮은 권한의 고객이 관리자를 포함한 모든 WordPress 사용자의 비밀번호를 재설정할 수 있었습니다. 이 플러그인은 설계상 해당 취약점 클래스를 차단합니다:
- 예약의 소유자는 정확히 한 곳, 즉 주문 완료 시 주문 자체의 고객 ID에서만 기록되며 이후에는 다시 기록되지 않습니다. 이 플러그인에는 요청에서 고객 ID, 사용자 ID 또는 유사한 필드를 수락하는 "예약 업데이트" 코드 경로가 전혀 없습니다.
- 이 플러그인은 WordPress 비밀번호를 절대 건드리지 않습니다. 여기에는
wp_set_password() 또는 이와 유사한 것을 호출하는 코드 경로가 전혀 없습니다. 고객의 비밀번호는 전적으로 WordPress 코어 자체의 계정 세부 정보 화면에 남아 있습니다.
- 고객은 로그인한 계정으로 데이터베이스 쿼리 자체에서 범위가 지정된 자신의 예약만 확인하거나 취소할 수 있으며, 요청에서 가져온 ID로는 절대 확인하거나 취소할 수 없습니다.
- 슬롯별 수용 인원은 원자적이고 경쟁 조건에 안전한 클레임(데이터베이스 고유성 제약 조건)으로 강제되므로, 두 고객이 구성된 수용 인원을 초과하여 동일한 슬롯에 동시에 확정될 수 없습니다. 예약을 취소하면 해당 슬롯이 재사용을 위해 올바르게 해제되며, 취소된 행 자체는 감사 기록을 위해 유지됩니다.
기능
- 모든 단순 상품을 자체 상품 데이터 > 예약 탭에서 예약 가능한 서비스로 전환
- 구성 가능한 이용 가능 요일, 시간 슬롯, 리드 타임 및 선제공 일수
- 슬롯별 수용 인원 -- 슬롯이 가득 차면 더 이상 제공되지 않음
- 주문이 완료됨으로 표시되면 예약이 자동으로 확정됨
- 내 계정의 "예약" 탭에서 향후 예약을 확인하고 취소
- 장바구니 추가와 결제 사이에 슬롯이 가득 차면 주문은 여전히 정상적으로 완료되고 관리자에게 이메일이 전송되어 일정 변경을 돕습니다. 예약이 이중으로 확정되는 일은 없습니다.
제한 사항 (v1)
- 단순 상품만 지원 -- 가변 상품 지원 없음
- 직원/리소스 할당 없음 -- 슬롯의 수용 인원은 단일 공유 숫자이며 직원별이 아님
- 캘린더 동기화 없음(Google 캘린더, iCal 등)
설치
- 플러그인을
/wp-content/plugins/hdwebmobile-booking-appointments에 업로드하거나 WordPress 플러그인 화면을 통해 설치합니다.
- 플러그인을 활성화합니다. WooCommerce가 이미 설치되어 활성화되어 있어야 합니다.
- 단순 상품을 편집하고, 상품 데이터 아래의 새 "예약" 탭을 열고 가용성을 구성합니다.
라이선스
GPLv2 이상. LICENSE를 참조하세요.