eval 함수는 JavaScript 코드를 실행을 위해 흔히 사용되는 함수입니다.
로거에서도 특정 링크의 클릭 수 측정을 위해 eval 함수를 사용하여 데이터 수집을 실행해 왔는데요,
이 명령은 웹 취약성 점검 시 보안성이 취약한 함수로 확인이 되고 있어 개선이 필요하였습니다.
로거에서 사용중인 eval 함수 보안 개선을 위해 대체하여 사용할 수 있는 대체 함수와 안전한 코드 작성법을 안내해 드리도록 하겠습니다.
eval( ) 함수 반드시 대체해야 하나요?
eval( ) 함수는 문자열로 작성된 JavaScript 코드를 그대로 실행하기 때문에 보안에 취약하고, 예상치 못한 문제를 유발할 수 있기 때문에 대체 함수를 사용하는 것이 좋습니다.
로거 적용 기존 코드
javascript
eval('try{ _trk_clickTrace( \'EVT\', \'이벤트명 변수\' ); }catch(_e){ }');
이 코드는 추적(tracking) 함수인 _trk_clickTrace()
를 실행하기 위해 eval()
을 사용한 예입니다.
개선된 코드 (안전한 대체 방법)
javascripttry {
if (typeof _trk_clickTrace === 'function') {
_trk_clickTrace('EVT', '이벤트명 변수');
}
} catch (_e) {}
변경 포인트:
eval()
제거: 코드 실행을 문자열 형태가 아닌 직접 실행 방식으로 변경typeof
검사: 함수 존재 여부 확인으로 안정성 확보
이렇게만 바꿔도 보안성과 가독성, 유지보수성이 크게 향상됩니다.
로거 대체 함수 적용 예시
인자값 | 용도 | 예시 |
EVT | 이벤트, SNS 등 링크 클릭 수 | try { if(typeof _trk_clickTrace == ‘function’) { _trk_clickTrace(‘EVT’, ‘이벤트명 변수’); } } catch(_e) {} |
DNL | 자료별 다운로드 클릭 수 | try { if(typeof _trk_clickTrace == ‘function’) { _trk_clickTrace(‘DNL’, ‘자료명 변수’); } } catch(_e) {} |
RFO | 외부사이트 연결 링크의 클릭 수 | try { if(typeof _trk_clickTrace == ‘function’) { _trk_clickTrace(‘RFO’, ‘링크명 변수’); } } catch(_e) {} |
SCI | 컨텐츠(상품)별 장바구니에 담긴 수 | try { if(typeof _trk_clickTrace == ‘function’) { _trk_clickTrace(‘SCI’, ‘ 컨텐츠(상품)명 변수 ‘); } } catch(_e) {} |
SCO | 컨텐츠(상품 별 장바구니에서 삭제된 수 | try { if(typeof _trk_clickTrace == ‘function’) { _trk_clickTrace(‘SCO’, ‘ 컨텐츠(상품)명 변수 ‘); } } catch(_e) {} |
Tip: typeof myFunction === 'function'
조건문은 안전하게 함수가 정의되어 있는지를 확인할 수 있는 조건문입니다.
eval( ) 함수가 보안성에 취약한 함수로 확인이 되고 있어 특별한 경우가 아니면 대체 함수로 변경하는 것이 좋습니다.
eval 함수를 사용 중이시라면, 안내 드린 대체 함수로 적용하여 안전하면서도 서비스 성능에 더 유리할 수 있게 도움 되시길 바랍니다.
최신 마케팅/고객 데이터 활용 사례를 받아보실 수 있습니다.