1

관리자가 임의의 HTML로 WSYWIG 편집기를 통해 사이트의 한 페이지 섹션을 편집 할 수있는 사이트가 있습니다. 이 임의의 HTML을 다른 사용자에게 안전하게 제공하는 방법.WSYWIG 편집기에서 임의로 사용자가 업로드 한 콘텐츠를 안전하게 렌더링합니다.

기본적인 의도는 XSS 오류 (즉, 사용자가 쿠키를 도난당한 상태로 만들 수 있음)를 제거하는 것입니다.
iframe, frame, embed, style, video, object 등 사용자가 입력 할 수 없도록 HTML 태그의 하위 집합을 안전하지 않습니다.

그러나 iFrames 또는 스타일 태그를 필터링하는 것은 유용하지 않습니다. 케이스는 관리자가 YouTube 동영상을 업로드하고 텍스트 스타일을 지정할 수 있어야하기 때문입니다.

콘텐츠 관리 시스템은 사용자가 업로드 한 콘텐츠로 인해 실행될 수있는 코드가 무엇이든 상관없이 별도의 도메인 (예 : content.mysite.com)에서 사용자 업로드 콘텐츠를 제공하는 경우가 있다고 들었습니다. 동일한 출처 정책으로 인해 내 사이트의 쿠키 (예 : app.mysite.com)를 훔칩니다.

그러나 이것은 내 사이트가 CMS가 아니기 때문에 나에게 과장된 솔루션 같아 보입니다.
임의의 사용자 정의가 가능한 한 페이지 (관리자 만 편집 가능)의 한 부분 만 있습니다.

그래서이 문제를 해결할 방법이 있습니까?
iframe에 임의의 콘텐츠를 포함 시키면 사용자가 안전하게 지킬 수 있습니까?

미리 감사드립니다.

잠재적 인 관련성 : 내가 사용하는 프레임 워크는 Ruby on Rails입니다.

+0

WSYWIG 편집기 란 무엇입니까? – 1615903

답변

0

클라이언트의 HTML 편집기는 XSS로부터 보호하기 쉽지 않습니다. 다른 도메인에서 이러한 콘텐츠를 제공하면 위험을 줄일 수 있지만 다른 질문 (예 : 다른 도메인의 사용자를 인증 및 승인하여 사용자 콘텐츠를 다운로드하지 못하게하는 방법)에 이의를 제기 할 수 있습니다.

또한 허용 목록 및 태그의 허용 목록은 일반적으로 적합하지 않습니다. 이러한 태그의 태그 및 속성의 허용 목록을 가질 수 있으며 HTML 코드에서 다른 것을 제거 할 수 있습니다. 이것의 문제점은 html 편집기가 style 속성을 사용하기를 원할 것이고 스타일은 XSS에 취약하다는 것입니다. 적어도 오래된 브라우저에서는 스타일이 취약합니다. 편집자는 대개 링크 (<a href="">)를 저장할 수 있어야하며 XSS에도 취약합니다 (예 : <a href="javascript: alert(1)">).

취할 수있는 한 가지 방법과 실제로 작동하는 방법은 Google Caja입니다. HTML, Javascript 및 CSS에서 모든 자바 스크립트를 제거 할 수 있으므로 페이지에 포함하는 것이 안전합니다. 또한 자체적으로 사용할 수있는 자바 스크립트로 작성된 클라이언트 측 살균제가 있으며 충분한 보호 기능을 제공 할 수 있습니다. 다른 클라이언트 측 소독제는 DOMPurify입니다. Caja는 서버 측 솔루션이기도하지만 설치 및 유지 관리가 다소 어렵습니다. 클라이언트 측 부분과 DOMPurify는 모두 클라이언트에 있기 때문에 보안 성이 다소 떨어지지 만 여러 상황에서 적절한 보호를 제공 할 수 있습니다. (DOMPurify는 구형 브라우저에서 작동하지 않으며 CSS 코드를 위생 처리하지 않습니다. 이는 최신 브라우저에서는 정상입니다.)

이러한 클라이언트 측 솔루션을 사용하면 삽입 된 자바 스크립트로 HTML을 저장하게 할 수 있습니다. 사용자 (공격자)가 충분히 똑똑하지만 html 콘텐츠를 표시 할 때 데이터베이스를 XSS (예 : 텍스트/자바 스크립트 콘텐츠 유형의 AJAX 응답)에서 취약하지 않은 방식으로 클라이언트에 보냅니다. 브라우저에서 클라이언트 측 소독제를 통해 실행 한 다음 페이지 DOM에 삽입합니다 (편집기 컨트롤 자체에 부여).

편집기에서 오른쪽 훅을 허용하는 경우 미리보기로 전환하기 전에 입력 한 HTML을 삭제하여 모든 미리보기 기능에 대해이 작업을 수행 할 수도 있습니다. 이는 사용자가 자바 스크립트를 편집기에 삽입 한 다음 서버로 보내지 않고도 미리보기에서 실행할 수 있다면 논란의 여지는 있지만 위험은 여전히 ​​낮기 때문에 여전히 XSS로 간주되기 때문에 중요합니다. 이것은 DOM XSS라고 불리며, 이는 클라이언트에서 위생 처리를 원할 수있는 한 가지 이유입니다.