보안과 Content Security Policy
위젯에 필요한 Content Security Policy 항목, 인라인 스크립트·unsafe-inline 없이 작동하는 이유, 페이지와의 격리와 브라우저에 넣어서는 안 되는 시크릿.
Content Security Policy
위젯은 타사 글꼴과 추적 픽셀을 로드하지 않고 eval도 실행하지 않습니다. shadow DOM의 constructable stylesheet(adoptedStyleSheets)로 스타일을 설정하며 이는 style-src 적용 대상이 아닙니다. 따라서 unsafe-inline과 unsafe-eval 모두 필요하지 않습니다.
reactive.chat 주소 사용:
Content-Security-Policy:
script-src 'self' https://cdn.reactive.chat;
connect-src 'self' wss://ws.reactive.chat https://ws.reactive.chat;
img-src 'self' data: https:;
자체 도메인 사용:
Content-Security-Policy:
script-src 'self' https://chat.your-company.com;
connect-src 'self' wss://chat.your-company.com https://chat.your-company.com;
img-src 'self' data: https:;
개별 항목:
- script-src –
loader.js위치입니다. 코어(core.<hash>.js)와 이후 모듈(투어, 개인정보 보호 안내, 쇼핑몰)도 같은 곳에서 가져옵니다. - connect-src의 wss:// – 채팅 연결입니다.
- connect-src의 https:// – 같은 주소를 한 번 더 지정합니다. HTTP 대체 연결, 오프라인 양식, 파일 업로드, 개인정보 보호 안내, Smart Answer가 사용합니다. 없으면 WebSocket 없는 네트워크에서야 문제가 드러나며 그곳에서는 전혀 연결되지 않습니다.
- img-src – 채팅 이미지입니다. 로고·아바타(자체
https://주소 또는data:이미지), 홍보 카드 이미지와 첨부 미리보기(채팅 주소에서 가져옴)입니다.img-src를 좁히려면 최소 채팅 주소와 로고·카드 이미지 호스트를 포함합니다. 차단된 이미지는 미리보기 대신 파일 행으로 표시합니다.
constructable stylesheet 없는 이전 브라우저(예: 16.4 이전 Safari)는 <style> 요소로 대체하며 엄격한 style-src는 이를 차단합니다. 위젯은 작동하지만 스타일이 적용되지 않습니다.
인라인 스크립트 불필요
설치는 속성이 있는 <script src>만으로 구성됩니다. 자체 identify, track, open 호출은 자체 스크립트 파일 또는 nonce가 있는 인라인 스크립트에 넣습니다.
<script nonce="R4nd0mN0nc3">
ReactiveChat('identify', { userId: '4711', userHash: '…', exp: 1792503600 });
</script>
인라인 스크립트 없는 템플릿은 방문자 식별에 있습니다.
Subresource Integrity
loader.js는 이름에 버전 번호가 없고 지속적으로 갱신됩니다. integrity 속성은 다음 업데이트 시 채팅을 멈추게 합니다. 코어는 이름에 콘텐츠 해시가 있습니다(아키텍처). 정책이 SRI를 요구하면 loader.js를 직접 제공하고 data-rc-ws-url을 설정합니다(빠른 시작). 이 경우 업데이트도 직접 담당합니다.
페이지와 격리
- 닫힌 shadow DOM. 전역 초기화가 있어도 페이지 스타일과 위젯 스타일은 서로 적용되지 않습니다.
- 쿠키 없음. ID는 브라우저 저장소에 두며 동의가 없으면
sessionStorage에만 둡니다(개인정보 보호 연동). - 양식 필드 접근 없음. 어시스턴트용 페이지 텍스트는 입력 필드를 읽지 않고 계정, 결제, 장바구니 페이지에서는 실행되지 않습니다. 추가 영역은
data-rc-private로 제외합니다. - 개인정보를 두 번 가림 처리: 브라우저의 전송 전(카드 번호와 Luhn 검사, IBAN, 이메일, 전화번호, 세금 번호), 서버의 저장 전입니다. 민감한 쿼리 매개변수(
email,password,token,key,card등)는 전송 주소에서 제거합니다. - 메시지와 카드의 링크와 이미지에 허용되는 형식:
https://;javascript:와data:링크는 폐기합니다.
출처 검사
채팅 연결은 프로젝트 허용된 출처의 도메인에서만 받으며 서브도메인도 포함합니다. 사이트 키를 복사한 타사 페이지는 origin_denied를 받습니다. 빈 목록이면 검사하지 않으므로 반드시 도메인을 입력합니다. 자세한 내용은 전송에 있습니다.
사이트 키 자체는 비밀 정보가 아니며 모든 페이지 소스에 있습니다.
브라우저에 넣어서는 안 되는 정보
userHash용 신원 시크릿 – 신원- 고객 데이터 엔드포인트 시크릿
rckd_…– 고객 데이터 - 웹훅 서명용 시크릿 – 웹훅
- API 키
rc_live_…– 서버 API - 프록시 키
rcpx_…– 자체 도메인
앱, 공개 저장소나 페이지 주소에도 넣지 않습니다.
악용 방지
서버는 연결별·주소별 연결, 프레임과 메시지를 제한하고 반복 위반 시 차단합니다(종료 코드 1008). 자체 프록시 뒤에서는 프록시 키가 올바를 때만 방문자 주소별로 집계하며 아니면 모두 프록시 주소를 공유합니다. 수치는 제한과 할당량에 있습니다.
다음: 자체 도메인
최종 업데이트: