쇼핑몰 관리자로 로그인해서 쇼핑몰 설정으로 들어갈려고 하는데 "exec 함수실행이 불가능하므로 사용할수 없습니다." 문구가 뜨면서 진입을 못하네요 KCP결제관련도 문제가 생긴것 같습니다.
호스팅사에 문의해본결과 php보안 업데이트 관련 조치사항으로 임의 해제조치는 어렵다는 답변을 받았습니다.
또한 kcp결재 모듈에서 제공하는 최신버전으로 exec등 실행함수가 아닌 api를 통한 연동으로 php버전 업데이트와 함께 업그레이드하여 이용을 권장하더군요
이경우 해결방법이 호스팅이전 밖에 없는것인지 이전하면 어느회사 호스팅이 적당한지 추천부탁드립니다.
답변 11개 / 댓글 3개
호스팅을 옮기지 않아도 됩니다. 위에 운영진이 안내한 KCP REST API로 바꾸시면 exec 없이 결제가 됩니다. 실제로 적용하실 때의 순서를 정리해 드립니다(그누보드 최신 소스 기준).
1. 그누보드 업데이트 또는 패치
- 5.6.43 이상이면 최신판(5.6.44)으로 올리시는 게 가장 간단합니다.
- 구버전이라 전체 업데이트가 부담스러우면, 운영진이 위에 남긴 커밋 두 개(KCP REST 연동, exec 차단 안내)만 골라서 적용하셔도 됩니다.
- 업데이트 전에 파일과 DB는 꼭 백업해 두세요.
2. 쇼핑몰설정에서 연동 방식 변경 관리자 > 쇼핑몰관리 > 쇼핑몰설정 > 결제설정(NHN KCP)에 «KCP 결제 연동 방식» 항목이 새로 생깁니다. 이 값을 «KCP 결제 모듈 (기본)»에서 **«KCP REST API»**로 바꾸세요.
- 기본 모듈(pp_cli)은 exec로 실행 파일을 돌리는 방식이라 막힌 것이고, REST API는 HTTPS 통신이라 exec가 필요 없습니다.
- REST API에는 KCP에서 받는 서비스 인증서와 개인키가 필요합니다. 아직 없으시면 KCP에 REST API용으로 발급을 요청하세요.
- 서버에 PHP cURL과 OpenSSL 확장이 있어야 합니다. 없으면 설정 화면에서 경고가 뜨니 그때 호스팅사에 확인하시면 됩니다.
3. 테스트 결제 먼저 테스트 결제로 승인과 취소(에스크로·현금영수증을 쓰시면 그것까지)를 한 번 돌려 보고 실결제로 전환하세요.
빠지기 쉬운 점: 휴대폰 본인인증 KCP **본인확인(휴대폰 인증)**을 쓰고 계시다면, 이 모듈(ct_cli)은 여전히 exec가 필요합니다. 최신 소스에서도 이 모듈의 안내는 «exec 함수 허용을 요청해 주세요»뿐이고 REST 대체가 없습니다. 본인인증을 쓰신다면 다른 본인확인 서비스로 바꿀지 따로 정하셔야 합니다. 결제만 쓰신다면 신경 쓰지 않으셔도 됩니다.
https://sir.kr/boards/g5_pds/7803
KCP REST API 선택 연동 방법은 안내 페이지를 참고해 주세요.
https://sir.kr/services/pg/kcp#kcp-integration
구버전 그누보드 이용 도중 KCP REST API만 선택적으로 패치하시는 경우 다음 커밋을 참고해 주세요. (5.6.43 기준) 감사합니다.
호스팅 이전이 반드시 유일한 해결 방법은 아닌 것 같습니다.
현재 오류는 호스팅 업체의 보안 정책으로 PHP의 exec 함수 사용이 제한되면서 발생하는 문제로 보입니다.
우선 사용 중인 영카트 버전과 KCP 결제 모듈을 확인해 보시는 게 좋겠습니다. 기존 결제 모듈이 exec 함수를 필요로 하는 방식이라면 PHP 버전만 변경해도 문제가 해결되지 않을 수 있습니다.
KCP에서 제공하는 REST API 방식으로 전환할 수 있는지 확인하고, 현재 영카트 버전과 호환되는 연동 방법이 있는지 먼저 알아보시는 것을 추천드립니다.
호스팅 이전은 기존 환경에서 지원 가능한 해결 방법이 없을 때 검토하셔도 늦지 않을 것 같습니다. 이전하더라도 서버의 PHP 설정과 결제 모듈 호환성을 사전에 확인하시는 게 안전하겠습니다.
영카트 5.3333에 아미나 빌더를 사용 중이시면, 구버전 KCP 모듈이 exec 차단에 영향을 받는 상황으로 보입니다.
KCP에서 API 방식으로 전환하는 방법을 제공하고 있으니, 현재 호스팅에서 결제 연동을 변경하는 쪽도 검토해보시면 됩니다. 다만 영카트에 맞게 적용하는 작업은 필요합니다.
아미나 빌더까지 사용 중이라 최신 영카트를 그대로 덮어쓰시면 안되구요
php 버전을 올리셔도 어차피 5.3333 베이스라서 호환성에서 안됩니다.
관리자 설정에서 단순 exec on 을 해도 안되구요
따라서 kcp 에서 api 방식가이드대로 해당 결제 모듈만 업데이트 하는 방향으로 작업하시는걸 추천해드립니다.
답변에 대한 댓글 2개
댓글에 적으신 5.3.3.3을 기준으로 보면, 그누보드 업데이트와 KCP 결제 모듈의 API 전환을 따로 확인하셔야 합니다. 최신판으로 올리기만 하면 exec 의존성이 없어지는 것은 아닙니다.
현재 공식 5.6.43 소스에도 쇼핑몰 설정에서 pp_cli 실행 여부를 검사하는 코드가 있고, PC KCP 결제 라이브러리도 exec()로 실행 파일을 호출합니다. 그래서 경고를 띄우는 한 줄만 주석 처리하면 설정 화면은 열릴 수 있어도 실제 결제까지 복구됐다는 뜻은 아닙니다. 질문자 서버를 직접 검사한 결과는 아니고 공식 배포 소스를 확인한 내용입니다.
KCP 공식 REST API 전환 안내에는 승인·취소 요청을 HTTPS/JSON 방식으로 바꾸고, 기존 site_key 대신 서비스 인증서 등을 적용하도록 되어 있습니다. 현재 영카트 버전과 수정한 주문 처리 파일에 맞는 전환 모듈인지 먼저 확인해 보세요. 단순 파일 덮어쓰기보다 파일·DB 백업 후 별도 테스트 환경에서 PC/모바일 승인, 실패 처리, 취소, 사용 중인 가상계좌 입금 통보까지 확인하고 반영하는 편이 좋습니다. 인증서·개인키·관리자 비밀번호는 게시판에 올리지 마세요.
호스팅 이전을 결정하기 전에, 현재 호스팅에서 KCP API용 HTTPS 통신과 필요한 PHP 확장 기능을 지원하는지 확인하고 KCP 기술지원에 “영카트 5.3.3.3의 pp_cli 결제를 exec 없이 전환할 수 있는 호환 모듈/지원 범위”를 문의하시는 순서를 권합니다. 보안 패치가 불필요하다는 뜻은 아니며, 보안 업데이트만으로 결제 연동 방식까지 자동 변경된다고 보기는 어렵습니다.
공식 코드: https://github.com/gnuboard/gnuboard5/blob/f8059c231a9377b69bc594f42836463c27fa9df6/adm/shop_admin/configform.php#L1839-L1869
결제 실행 부분: https://github.com/gnuboard/gnuboard5/blob/f8059c231a9377b69bc594f42836463c27fa9df6/shop/kcp/pp_ax_hub_lib.php#L293-L300
KCP 전환 안내: https://developer.kcp.co.kr/guide/rest-api-guide
php.ini ,에서 허용하겟다고 설정해주셔야 합니다.
만약 서버 루트 권한이 없는 웹호스팅일경우 서버담당 관리자 한테
shell_exec(), system(), passthru() 허용해달라고 요청하셔야합니다.
답변을 작성하려면 로그인이 필요합니다.