보안
리소스
Mozilla의 HTTP Observatory CLI와
Qualys SSL Labs Server Test는 잠재적인 문제를 찾고 보안 모범 사례 준수를 보장하는 데 좋은 리소스입니다.
외부 리소스 포함하기
Google Analytics와 Matomo를 제외하고 외부 폰트, CSS 및 JavaScript는 사용하지 않아야 하며, 인스턴스에서 이를 활성화한 경우에만 사용해야 합니다. 자산은 항상 GitLab 인스턴스에서 로컬로 호스팅되고 제공되어야 합니다. iframes
를 통한 임베디드 리소스는 reCAPTCHA와 같은 특정 상황에서만 사용되어야 합니다. reCAPTCHA는 iframe
없이 사용할 수 없습니다.
인라인 스크립트 및 스타일 피하기
XSS 취약점으로부터 사용자를 보호하기 위해, 우리는 Content Security Policy를 사용하여 미래에 인라인 스크립트를 비활성화할 계획입니다.
인라인 스크립트는 쉽게 만들 수 있지만, 보안 문제이기도 합니다. 사용자가 제공한 콘텐츠가 의도치 않게 비위생적으로 남아있을 경우, 악의적인 사용자가 웹 앱에 스크립트를 주입할 수 있습니다.
인라인 스타일은 거의 모든 경우에 피해야 하며, 대체할 방법이 없을 때에만 사용해야 합니다. 이는 스타일의 재사용성과 가독성을 높입니다.
HTML 출력 정리하기
원시 HTML을 출력해야 하는 경우, 이를 정리해야 합니다.
Vue를 사용하는 경우, v-safe-html
지시어를 사용할 수 있습니다.
다른 사용 사례의 경우, 아이콘이 렌더링될 수 있도록 dompurify
의 미리 구성된 버전을 감싸야 합니다:
import { sanitize } from '~/lib/dompurify';
const unsafeHtml = '<some unsafe content ... >';
// ...
element.appendChild(sanitize(unsafeHtml));
이 sanitize
기능은 원래와 동일한 구성을 취합니다.
보안 문제 수정하기
오래 된 코드를 리팩토링할 때, 여전히 관련이 있을 수 있는 보안 문제를 잡기 위해 작성된 사양을 실수로 제거하지 않도록 하는 것이 중요합니다.
사양을 describe
또는 it
블록에서 #security
로 표시하여 코드를 읽는 엔지니어에게 이 사양을 제거하는 것이 나중에 심각한 결과를 초래할 수 있다는 것을 전달해야 하며, 이는 보안 문제의 재발을 포착할 수 있는 코드를 제거하고 있음을 나타냅니다.