[security]개인결제 hash 검증을 strict 비교(===)로 강화

shop/personalpayformupdate.php와 lib/shop.lib.php의 ss_personalpay_hash
검증이 loose 비교(==/!=)를 사용하여 PHP type juggling 잠재적 우회 가능성이
있었음. md5 결과 중 "0e..." 형식 hash는 PHP의 loose 비교에서 0e 지수
표기법으로 해석되어 다른 "0e..." 해시와 동등 판정될 수 있음
(소위 magic hash collision 패턴).

실제 익스플로잇 가능성은 낮지만 (md5 출력은 32자 hex 문자열이고 PHP의
문자열 vs 문자열 비교에서는 0e... 패턴이 적용되지 않는 경우가 많음),
defense in depth 차원에서 strict 비교로 변경.

mobile/shop/personalpayformupdate.php는 이미 strict 비교를 사용 중이라
core 두 곳만 동일한 패턴으로 정렬.

- shop/personalpayformupdate.php:35: != / != → !== / !==
- lib/shop.lib.php:2333: == → ===
This commit is contained in:
thisgun committed 2026-04-16 02:46:49 +00:00
1 parent 3cfe8b6b84
commit 79f915988b
2 files changed
+2 -2

No files matched your search

+1 -1
View File
@@ -2403,7 +2403,7 @@ function exists_inicis_shop_order($oid, $pp=array(), $od_time='', $od_ip='')
//개인결제
if( $pp ) {
$hash_data = md5($pp['pp_id'].$pp['pp_price'].$pp['pp_time']);
if( $hash_data == get_session('ss_personalpay_hash') ){
if( $hash_data === get_session('ss_personalpay_hash') ){
// 개인결제번호제거
set_session('ss_personalpay_id', '');
set_session('ss_personalpay_hash', '');
+1 -1
View File
@@ -29,7 +29,7 @@ if($pp['pp_tno'])
alert('이미 결제하신 개인결제 내역입니다.', $page_return_url);
$hash_data = md5($pp_id.$good_mny.$pp['pp_time']);
if($pp_id != get_session('ss_personalpay_id') || $hash_data != get_session('ss_personalpay_hash'))
if($pp_id !== get_session('ss_personalpay_id') || $hash_data !== get_session('ss_personalpay_hash'))
die('개인결제 정보가 올바르지 않습니다.');
// PG사의 가상계좌 또는 계좌이체의 자동 현금영수증 초기배열값