보안
리소스
Mozilla의 HTTP Observatory CLI 및 Qualys SSL Labs Server Test은 잠재적인 문제를 찾아내고 보안 모범 관행를 준수하는 데 유용한 리소스입니다.
외부 리소스 포함
외부 폰트, CSS 및 JavaScript는 Google Analytics 및 Matomo를 제외하고는 사용하면 안 됩니다. 또한 인스턴스에서 활성화된 경우에만 허용되어야 합니다. 에셋은 항상 GitLab 인스턴스에서 로컬로 호스팅되고 제공되어야 합니다. reCAPTCHA와 같이 특정 상황을 제외하고는 iframes
를 통한 임베디드 리소스는 사용해서는 안 됩니다.
인라인 스크립트 및 스타일 피하기
사용자들을 XSS 취약점으로부터 보호하기 위해 Content Security Policy를 사용하여 향후에는 인라인 스크립트를 비활성화할 계획입니다.
인라인 스크립트는 무언가를 더 쉽게 만들 수 있지만 보안상의 이슈가 될 수 있습니다. 사용자가 제공한 콘텐츠가 의도치 않게 정화되지 않은 경우, 악의적인 사용자는 웹 앱에 스크립트를 삽입할 수 있습니다.
대부분의 경우에는 인라인 스타일을 피해야하며, 대안이 없을 때에만 사용해야 합니다. 이렇게 함으로써 스타일의 재사용성과 가독성을 높일 수 있습니다.
HTML 출력의 살균 처리
원시 HTML을 출력해야 하는 경우, 살균 처리해야 합니다.
Vue를 사용하는 경우, v-safe-html
지시문을 사용할 수 있습니다.
다른 사용 사례의 경우, 아이콘을 렌더링할 수 있도록 사전 구성된 버전의 dompurify
를 래핑하십시오.
import { sanitize } from '~/lib/dompurify';
const unsafeHtml = '<안전하지 않은 콘텐츠...>';
// ...
element.appendChild(sanitize(unsafeHtml));
이 sanitize
함수는 원본과 동일한 구성을 사용합니다.
보안 이슈 수정
이전 코드를 리팩터링할 때는 여전히 관련이 있는 보안 문제를 잡기 위해 작성된 스펙을 실수로 제거하지 않도록 주의해야 합니다.
보안 문제를 해결하는 스펙에는 #security
를 describe
또는 it
블록에 표시하여 코드를 읽는 엔지니어에게 이러한 스펙을 제거하면 향후 심각한 결과를 초래할 수 있음을 알려야 합니다. 그리고 보안 문제가 다시 도입될 수 있는 코드를 제거하고 있는 것입니다.