Files
Gnuboard7/modules/_bundled/sirsoft-ecommerce/config/settings/defaults.json
T
HeuJung 21fc114f37 fix(core,extensions): 보안 결함 3건과 이중저장소·레이아웃 중복키 결함군 폐쇄
KISA 제보 3건(KVE-2026-2010/2011/2018)과 그 동일 계열 형제 결함을 전수 조치하고,
그 과정에서 드러난 두 결함군을 함께 닫는다.

- 검증 시점과 연결 시점이 host 를 다르게 읽던 SSRF 통로를 정규화 SSoT 한 곳으로 모았다
- 세션을 여는 지점(2FA 완료·토큰 재발급)이 잠금 검사를 거치지 않아 계정 잠금이 우회됐다
- 인증도 서명도 없는 브라우저 리턴 콜백이 주문 상태를 바꾸던 통로를 4 PG 전부에서 닫고,
 소유권을 대조하는 close-report 를 토스에도 신설했다. 그 결과 정리 주체를 잃는
 결제창 미완료 주문은 만료 자동취소가 거둔다
- 저장소 A(_local)에만 쓰는 경로가 B 의 값을 조용히 덮던 회귀를 정본 writer 로 닫았다
 (engine-v1.63.5). 한 방향만 보던 정적 검사에 반대 방향 축과 양방향 계약 테스트를 더했다
- 레이아웃 JSON 의 같은 객체 중복 키가 앞선 선언을 오류 없이 삼키던 결함군을 닫았다
2026-09-02 17:36:11 +09:00

397 lines
14 KiB
JSON

{
"_meta": {
"version": "1.4.0",
"description": "이커머스 모듈 환경설정",
"categories": ["basic_info", "language_currency", "order_settings", "shipping", "seo", "review_settings", "inquiry", "notifications", "mileage"]
},
"defaults": {
"basic_info": {
"shop_name": "",
"route_path": "shop",
"no_route": false,
"company_name": "",
"business_number": "",
"ceo_name": "",
"business_type": "",
"business_category": "",
"zipcode": "",
"base_address": "",
"detail_address": "",
"phone": "",
"fax": "",
"email": "",
"privacy_officer": "",
"privacy_officer_email": "",
"mail_order_number": "",
"telecom_number": "",
"public_asset_disk": ""
},
"language_currency": {
"default_currency": "KRW",
"currencies": [
{
"code": "KRW",
"name": {
"ko": "KRW (원)",
"en": "KRW (Won)"
},
"symbol": "₩",
"exchange_rate": null,
"base_unit": 1000,
"rounding_unit": "1",
"rounding_method": "floor",
"decimal_places": 0,
"is_default": true,
"locales": ["ko"]
},
{
"code": "USD",
"name": {
"ko": "USD (달러)",
"en": "USD (Dollar)"
},
"symbol": "$",
"exchange_rate": 0.85,
"base_unit": 1,
"rounding_unit": "0.01",
"rounding_method": "round",
"decimal_places": 2,
"is_default": false,
"locales": ["en"]
},
{
"code": "JPY",
"name": {
"ko": "JPY (엔)",
"en": "JPY (Yen)"
},
"symbol": "¥",
"exchange_rate": 115.00,
"base_unit": 100,
"rounding_unit": "1",
"rounding_method": "floor",
"decimal_places": 0,
"is_default": false,
"locales": ["en"]
},
{
"code": "CNY",
"name": {
"ko": "CNY (위안)",
"en": "CNY (Yuan)"
},
"symbol": "元",
"exchange_rate": 5.80,
"base_unit": 1,
"rounding_unit": "0.01",
"rounding_method": "round",
"decimal_places": 2,
"is_default": false,
"locales": ["en"]
},
{
"code": "EUR",
"name": {
"ko": "EUR (유로)",
"en": "EUR (Euro)"
},
"symbol": "€",
"exchange_rate": 0.78,
"base_unit": 1,
"rounding_unit": "0.01",
"rounding_method": "round",
"decimal_places": 2,
"is_default": false,
"locales": ["en"]
}
]
},
"order_settings": {
"default_pg_provider": null,
"cash_receipt_provider": "",
"cash_receipt_self_issue": false,
"shipping_fee_tax_policy": "proportional",
"payment_methods": [
{
"id": "card",
"pg_provider": null,
"sort_order": 1,
"is_active": false,
"min_order_amount": 0,
"stock_deduction_timing": "payment_complete",
"mileage_deduction_timing": "payment_complete",
"_cached_name": { "ko": "신용카드", "en": "Credit Card" },
"_cached_description": { "ko": "신용카드로 안전하게 결제", "en": "Pay securely with credit card" },
"_cached_icon": "credit-card",
"_cached_source": "builtin"
},
{
"id": "vbank",
"pg_provider": null,
"sort_order": 2,
"is_active": false,
"min_order_amount": 0,
"stock_deduction_timing": "payment_complete",
"mileage_deduction_timing": "order_placed",
"_cached_name": { "ko": "가상계좌", "en": "Virtual Account" },
"_cached_description": { "ko": "가상계좌로 입금", "en": "Pay via virtual account" },
"_cached_icon": "money-check",
"_cached_source": "builtin"
},
{
"id": "dbank",
"pg_provider": null,
"sort_order": 3,
"is_active": true,
"min_order_amount": 0,
"stock_deduction_timing": "order_placed",
"mileage_deduction_timing": "order_placed",
"_cached_name": { "ko": "무통장입금", "en": "Bank Transfer" },
"_cached_description": { "ko": "지정 계좌로 직접 입금", "en": "Direct bank transfer" },
"_cached_icon": "building-columns",
"_cached_source": "builtin"
},
{
"id": "bank",
"pg_provider": null,
"sort_order": 4,
"is_active": false,
"min_order_amount": 0,
"stock_deduction_timing": "payment_complete",
"mileage_deduction_timing": "payment_complete",
"_cached_name": { "ko": "계좌이체", "en": "Account Transfer" },
"_cached_description": { "ko": "실시간 계좌이체", "en": "Real-time bank transfer" },
"_cached_icon": "building-columns",
"_cached_source": "builtin"
},
{
"id": "phone",
"pg_provider": null,
"sort_order": 5,
"is_active": false,
"min_order_amount": 0,
"stock_deduction_timing": "payment_complete",
"mileage_deduction_timing": "payment_complete",
"_cached_name": { "ko": "휴대폰결제", "en": "Mobile Payment" },
"_cached_description": { "ko": "휴대폰 소액결제", "en": "Mobile phone payment" },
"_cached_icon": "mobile-screen-button",
"_cached_source": "builtin"
},
{
"id": "point",
"pg_provider": null,
"sort_order": 6,
"is_active": false,
"min_order_amount": 0,
"stock_deduction_timing": "order_placed",
"mileage_deduction_timing": "payment_complete",
"_cached_name": { "ko": "포인트결제", "en": "Points" },
"_cached_description": { "ko": "적립 포인트로 결제", "en": "Pay with points" },
"_cached_icon": "coins",
"_cached_source": "builtin"
},
{
"id": "deposit",
"pg_provider": null,
"sort_order": 7,
"is_active": false,
"min_order_amount": 0,
"stock_deduction_timing": "order_placed",
"mileage_deduction_timing": "payment_complete",
"_cached_name": { "ko": "예치금결제", "en": "Store Credit" },
"_cached_description": { "ko": "예치금으로 결제", "en": "Pay with store credit" },
"_cached_icon": "wallet",
"_cached_source": "builtin"
},
{
"id": "free",
"pg_provider": null,
"sort_order": 8,
"is_active": false,
"min_order_amount": 0,
"stock_deduction_timing": "order_placed",
"mileage_deduction_timing": "payment_complete",
"_cached_name": { "ko": "무료", "en": "Free" },
"_cached_description": { "ko": "결제 없이 주문 완료", "en": "Order without payment" },
"_cached_icon": "gift",
"_cached_source": "builtin"
}
],
"banks": [
{ "code": "004", "name": { "ko": "국민은행", "en": "Kookmin Bank" } },
{ "code": "088", "name": { "ko": "신한은행", "en": "Shinhan Bank" } },
{ "code": "020", "name": { "ko": "우리은행", "en": "Woori Bank" } },
{ "code": "081", "name": { "ko": "하나은행", "en": "Hana Bank" } },
{ "code": "003", "name": { "ko": "IBK기업은행", "en": "IBK Industrial Bank" } },
{ "code": "011", "name": { "ko": "NH농협은행", "en": "NH Nonghyup Bank" } },
{ "code": "071", "name": { "ko": "우체국", "en": "Korea Post" } },
{ "code": "031", "name": { "ko": "DGB대구은행", "en": "DGB Daegu Bank" } },
{ "code": "032", "name": { "ko": "BNK부산은행", "en": "BNK Busan Bank" } },
{ "code": "034", "name": { "ko": "광주은행", "en": "Kwangju Bank" } },
{ "code": "035", "name": { "ko": "제주은행", "en": "Jeju Bank" } },
{ "code": "037", "name": { "ko": "전북은행", "en": "Jeonbuk Bank" } },
{ "code": "039", "name": { "ko": "BNK경남은행", "en": "BNK Kyongnam Bank" } },
{ "code": "045", "name": { "ko": "새마을금고", "en": "MG Community Credit Cooperatives" } },
{ "code": "048", "name": { "ko": "신협", "en": "KFCC" } },
{ "code": "090", "name": { "ko": "카카오뱅크", "en": "Kakao Bank" } },
{ "code": "092", "name": { "ko": "토스뱅크", "en": "Toss Bank" } }
],
"bank_accounts": [
{ "bank_code": "004", "account_number": "", "account_holder": "", "is_active": false, "is_default": false }
],
"auto_cancel_expired": true,
"auto_cancel_days": 3,
"pending_order_expire_minutes": 1440,
"cart_expiry_days": 30,
"stock_restore_on_cancel": true,
"cancellable_statuses": ["payment_complete"],
"confirmable_statuses": ["shipping", "delivered"]
},
"shipping": {
"default_country": "KR",
"available_countries": [
{ "code": "KR", "name": { "ko": "대한민국", "en": "South Korea" }, "is_active": true },
{ "code": "US", "name": { "ko": "미국", "en": "United States" }, "is_active": false },
{ "code": "JP", "name": { "ko": "일본", "en": "Japan" }, "is_active": false },
{ "code": "CN", "name": { "ko": "중국", "en": "China" }, "is_active": false },
{ "code": "SG", "name": { "ko": "싱가포르", "en": "Singapore" }, "is_active": false },
{ "code": "HK", "name": { "ko": "홍콩", "en": "Hong Kong" }, "is_active": false },
{ "code": "TW", "name": { "ko": "대만", "en": "Taiwan" }, "is_active": false },
{ "code": "VN", "name": { "ko": "베트남", "en": "Vietnam" }, "is_active": false },
{ "code": "TH", "name": { "ko": "태국", "en": "Thailand" }, "is_active": false },
{ "code": "MY", "name": { "ko": "말레이시아", "en": "Malaysia" }, "is_active": false }
],
"international_shipping_enabled": false,
"free_shipping_threshold": 50000,
"free_shipping_enabled": true,
"address_validation_enabled": false,
"address_api_provider": "kakao"
},
"seo": {
"meta_category_title": "{commerce_name} - {category_name}",
"meta_category_description": "",
"meta_search_title": "{commerce_name} - {keyword_name}",
"meta_search_description": "",
"meta_product_title": "{commerce_name} - {product_name}",
"meta_product_description": "",
"meta_shop_index_title": "{commerce_name}",
"meta_shop_index_description": "",
"seo_category": true,
"seo_search_result": true,
"seo_product_detail": true,
"seo_shop_index": true
},
"review_settings": {
"write_deadline_days": 90,
"max_images": 5,
"max_image_size_mb": 10
},
"inquiry": {
"board_slug": null
},
"notifications": {
"channels": [
{ "id": "mail", "is_active": true, "sort_order": 1 },
{ "id": "database", "is_active": true, "sort_order": 2 }
]
},
"mileage": {
"enabled": false,
"default_earn_rate": 1,
"earn_trigger": "confirmed",
"earn_delay_days": 0,
"currency_rules": [
{
"currency_code": "KRW",
"point_value": 1,
"min_use_amount": 1000,
"use_unit": 10,
"max_use_type": "fixed",
"max_use_percent": 30,
"max_use_value": 50000,
"earn_rounding_unit": "1",
"earn_rounding_method": "floor"
}
],
"expiry_enabled": true,
"expiry_days": 365,
"expiry_notification_enabled": true,
"expiry_notification_days_before": 7
}
},
"frontend_schema": {
"basic_info": {
"expose": true,
"_comment": "route_path, no_route만 프론트엔드(user-side routes.json, _user_base.json)에서 참조",
"fields": {
"shop_name": { "expose": false },
"route_path": { "expose": true },
"no_route": { "expose": true },
"company_name": { "expose": false },
"business_number": { "expose": false },
"ceo_name": { "expose": false },
"business_type": { "expose": false },
"business_category": { "expose": false },
"zipcode": { "expose": false },
"base_address": { "expose": false },
"detail_address": { "expose": false },
"phone": { "expose": false },
"fax": { "expose": false },
"email": { "expose": false },
"privacy_officer": { "expose": false },
"privacy_officer_email": { "expose": false },
"mail_order_number": { "expose": false },
"telecom_number": { "expose": false },
"public_asset_disk": { "expose": false }
}
},
"language_currency": {
"expose": true,
"_comment": "currencies, default_currency만 admin 상품목록/폼에서 참조",
"fields": {
"default_currency": { "expose": true },
"currencies": { "expose": true }
}
},
"order_settings": {
"expose": false,
"_comment": "프론트엔드에서 미참조 — 서버 사이드 전용"
},
"shipping": {
"expose": true,
"_comment": "international_shipping_enabled, available_countries, default_country만 노출 (배송국가 설정 UI 게이트·헤더 셀렉터 옵션 소스)",
"fields": {
"international_shipping_enabled": { "expose": true },
"available_countries": { "expose": true },
"default_country": { "expose": true },
"free_shipping_threshold": { "expose": false },
"free_shipping_enabled": { "expose": false },
"address_validation_enabled": { "expose": false },
"address_api_provider": { "expose": false }
}
},
"seo": {
"expose": false,
"_comment": "프론트엔드에서 미참조 — SeoMiddleware/SeoRenderer 서버 사이드 전용"
},
"review_settings": {
"expose": false,
"fields": {
"write_deadline_days": { "expose": false },
"max_images": { "expose": false },
"max_image_size_mb": { "expose": false }
}
},
"inquiry": {
"expose": true,
"fields": {
"board_slug": { "expose": true }
}
},
"notifications": {
"expose": true,
"fields": {}
}
}
}