minimimi

Content Security Policy (CSP) 컨텐츠 보안 정책 - eval() 본문

프로그래밍 공부/javascript & typescript

Content Security Policy (CSP) 컨텐츠 보안 정책 - eval()

99mini 2023. 3. 18. 00:03
반응형

Content Security Policy (CSP) 컨텐츠 보안 정책 

콘텐츠 보안 정책(CSP)은 웹 개발자가 웹 페이지에서 실행하거나 로드할 수 있는 콘텐츠 유형을 제한하는 일련의 정책을 지정할 수 있는 보안 메커니즘입니다. CSP는 XSS(교차 사이트 스크립팅), 클릭재킹 및 코드 삽입과 같은 다양한 공격을 방지하는 데 도움이 될 수 있습니다.

CSP는 페이지에서 실행하거나 로드할 수 있는 콘텐츠 유형을 브라우저에 알리는 헤더 집합을 HTTP 응답에 추가하여 작동합니다. 헤더에는 스크립트, 스타일시트, 이미지 및 프레임과 같은 다양한 유형의 콘텐츠에 대해 허용되는 소스를 지정하는 지시문 목록이 포함되어 있습니다.

예를 들어 다음 CSP 헤더는 페이지와 동일한 출처 및 example.com 도메인의 스크립트만 실행할 수 있도록 지정합니다.

Content-Security-Policy: script-src 'self' example.com;

 

CSP 정책에서 허용하지 않는 소스에서 스크립트를 로드하면 브라우저에서 스크립트 실행을 차단합니다. 이렇게 하면 공격자가 악성 코드를 페이지에 삽입하고 페이지 컨텍스트에서 실행하는 것을 방지할 수 있습니다.

CSP 정책은 페이지 수준, 도메인 수준, 서버 수준 등 다양한 수준에서 지정할 수 있습니다. CSP 정책은 입력 유효성 검사 및 삭제와 같은 다른 보안 메커니즘과 결합하여 웹 애플리케이션에 대한 포괄적인 보안을 제공할 수도 있습니다.

CSP는 효과적인 보안 조치일 수 있지만 구현 및 유지 관리가 복잡할 수도 있습니다. 페이지에서 사용될 수 있는 타사 종속성뿐만 아니라 각 콘텐츠 유형에 대해 허용된 소스를 신중하게 고려해야 합니다. 또한 새로운 위협이 나타나고 새로운 콘텐츠 소스가 애플리케이션에 추가됨에 따라 시간이 지남에 따라 CSP 정책을 조정해야 할 수도 있습니다.

eval() 함수

eval() 함수는 문자열 인수를 가져와 JavaScript 코드인 것처럼 평가하는 JavaScript의 내장 함수입니다. 이것은 런타임에 코드를 동적으로 생성하고 실행하기 위한 강력한 도구가 될 수 있습니다. 예를 들어, 다음 코드는 eval() 함수를 사용하여 간단한 산술 표현식을 동적으로 실행합니다.

const x = 2;
const y = 3;
const result = eval('x + y');
console.log(result); // Output: 5

 

이 예에서 문자열 'x + y'는 JavaScript 코드인 것처럼 평가하는 eval() 함수의 인수로 전달됩니다. 결과 값은 result 변수에 할당되고 콘솔에 출력됩니다.

eval() 함수는 상황에 따라 유용할 수 있지만 부적절하게 사용하면 보안 위험이 될 수도 있습니다. 임의의 코드를 실행하기 때문에 입력이 제대로 검증 및 삭제되지 않으면 코드 주입 및 XSS(교차 사이트 스크립팅)와 같은 공격에 취약할 수 있습니다.

이러한 이유로 일반적으로 가능한 한 eval() 함수 사용을 피하고 Function() 생성자 또는 setTimeout()과 같은 대체 기술을 사용하여 동적으로 코드를 실행하는 것이 좋습니다. 또한 일부 콘텐츠 보안 정책(CSP)은 보안 조치로 'eval()' 사용을 제한하거나 비활성화할 수 있습니다.

그러나 CSP는 보안을 위한 묘책이 아니며 입력 유효성 검사 및 삭제와 같은 다른 보안 조치와 함께 사용해야 합니다. 또한 일부 합법적인 사용 사례에서는 eval() 함수를 사용해야 할 수 있으므로 CSP 정책에서 이를 제한하는 영향을 신중하게 고려하는 것이 중요합니다.

반응형