사이트 간 스크립팅 방지란 무엇입니까?
교차 사이트 스크립팅 방지는 웹 사이트 또는 웹 응용 프로그램이 프로덕션에 도달하기 전에 웹 사이트 또는 웹 응용 프로그램의 취약점을 탐지하고 수정하는 프로세스입니다. 자동화된 취약점 스캐너를 사용하거나 침투 테스트를 수행하여 수동으로 탐지할 수 있습니다. 이 문서에서는 사이트 간 스크립팅 방지에 대한 모범 사례와 이를 즉시 구현하는 방법에 대해 설명합니다. 이 문서의 끝 부분에서는 개발 파이프라인
의 일부로 사이트 간 스크립팅 취약점을 조기에 그리고 자주 감지하고 수정할 수 있도록 개발자 중심의 무료 취약점 스캐너에 대한 링크도 찾을 수 있습니다.:
- 교차 사이트 스크립팅 방지 란 무엇입니까?
- 교차 사이트 스크립팅은 어떻게 작동합니까?
- 사이트 간 스크립팅 방지는 얼마나 중요합니까?
- 크로스 사이트 스크립팅 보호
- 동적 콘텐츠 이스케이프
- 화이트리스트 값
- 콘텐츠 보안 정책 구현
- 사이트 간 스크립팅 방지(장고)
- 루비(레일스)
- 자바(자바 서버 페이지)
- 자바(자바 서버 페이지)
- 자바(자바 서버 페이지)
- 자바(자바 서버 페이지)에서 크로스 사이트 스크립팅 방지(장고)
- 노드
- 콧수염에서 사이트 간 스크립팅 방지.3395>
- 먼지.
- 교차 사이트 스크립팅 방지
- 각도의 교차 사이트 스크립팅 방지
- 반응에서 교차 사이트 스크립팅 방지
교차 사이트 스크립팅은 어떻게 작동합니까?
사이트 간 스크립팅 공격은 악성 스크립트가 신뢰할 수 있는 웹 응용 프로그램에 주입되는 주입 공격의 한 형태입니다.
공격자는 웹 응용 프로그램을 사용하여 일반적으로 브라우저 쪽 스크립트 형태의 악성 코드를 다른 최종 사용자에게 보낼 수 있습니다.
취약점은 웹 응용 프로그램이 생성된 출력 내에 포함된 유효한 사용자의 입력을 사용하지만 적절한 유효성 검사나 인코딩이 없는 경우에 발생하는 매우 일반적인 취약점입니다.
악성 스크립트가 사용자에게 전송되면 해당 브라우저는 스크립트를 신뢰할 수 없다는 것을 절대적으로 알 수 없으며 이후에 스크립트를 실행합니다. 이 스크립트는 쿠키,세션 토큰 또는 해당 사이트의 브라우저가 보유 할 수있는 기타 민감한 정보를 포함하여 다양한 데이터에 액세스 할 수 있습니다.
:
- 악성 스크립트는 현재
요청에서 온다 - : 이 취약점은 서버 측 코드가 아닌 클라이언트 측 코드에 존재합니다.
사이트 간 스크립팅 방지는 얼마나 중요합니까?
취약점 악용으로 인한 피해는 사이트에서 처리하는 데이터의 민감도에 따라 달라집니다. 다음은 해커가 취약한 앱을 악용한 몇 가지 예입니다:
- 소셜 미디어에 웜 확산:페이스 북,트위터 및 유튜브는 모두 이러한 방식으로 성공적으로 공격 have
- 세션 하이재킹: 악의적인 자바스크립트는 해커의 통제 하에 있는 원격 사이트로 세션 아이디를 보낼 수 있으므로 해커가 진행 중인 세션을 하이재킹하여 해당 사용자를 가장할 수 있습니다.
- 신분 도용:사용자가 손상된 웹 사이트에 신용 카드 번호와 같은 기밀 정보를 입력하면 악의적 인 자바 스크립트를 사용하여 이러한 세부 정보를 도용 할 수 있습니다.
- 서비스 거부 공격 및 웹 사이트 기물 파손.
- 암호와 같은 민감한 데이터의 도난.
- 은행 사이트에 금융 사기.
크로스 사이트 스크립팅 보호
동적 콘텐츠 이스케이프
일반적으로 웹 페이지가 렌더링될 때 동적 콘텐츠는 웹 페이지로 직조됩니다. 동적 콘텐츠가 부적절하게 처리되면 공격자는 이를 사용하여 저장된 공격을 생성할 수 있습니다. 공격자는 일부 악의적인 자바스크립트 코드를 삽입하여 편집 가능한 필드를 악용합니다.
사이트가 콘텐츠 관리 시스템이 아니면 사용자가 원시 페이지를 작성하지 못하게 할 수 있습니다. 데이터 저장소에서 오는 모든 동적 콘텐츠를 이스케이프합니다.
동적 콘텐츠 이스케이프는 일반적으로 중요한 문자를 인코딩하는 것으로 구성됩니다.:
” "
# #
& &
‘ '
( (
) )
/ /
; ;
< <
> >
아래 코드 샘플에서 볼 수 있듯이 대부분의 최신 프레임워크는 기본적으로 동적 콘텐츠를 이스케이프합니다.
이 방법으로 편집 가능한 콘텐츠를 이스케이프하면 브라우저에서 콘텐츠를 실행 코드로 취급하지 않습니다. 이것은 대부분의 공격을 방지 할 수 있습니다.
화이트리스트 값
동적 데이터 항목이 소수의 유효한 값만 사용할 수 있는 경우 데이터 저장소의 값을 제한합니다. 또한 렌더링 논리가 알려진 적절한 값만 허용하는지 확인하십시오.
이 방법을 사용할 수 있는 예는 사용자에게 수동으로 입력하는 대신 드롭다운 목록에서 국가를 선택하도록 요청하는 것입니다.
콘텐츠 보안 정책 구현
최신 브라우저는 콘텐츠 보안 정책을 지원합니다. 콘텐츠 보안 정책을 사용하면 웹 페이지의 작성자가 자바 스크립트 및 기타 리소스를로드하고 실행할 수있는 위치를 제어 할 수 있습니다.
공격자는 사용자의 웹 페이지에서 악의적인 스크립트를 실행할 수 있어야 합니다.
응답 헤더에 콘텐츠 보안 정책을 설정하면 브라우저에서 인라인 자바스크립트를 실행하지 않도록 하고 페이지에 대한 자바스크립트를 호스팅할 수 있는 도메인을 선택할 수 있습니다:
Content-Security-Policy: script-src 'self' https://apis.google.com
스크립트가 로드될 수 있도록 허용하면 인라인 자바스크립트가 허용되지 않음을 암시적으로 알 수 있습니다.
페이지의<head>
요소에 있는<meta>
태그에 콘텐츠 보안 정책을 배치할 수도 있습니다:
<meta http-equiv="Content-Security-Policy" content="script-scr 'self' https://apis.google.com">
이 방법은 사용자를 보호하는 데 매우 효과적이지만 사이트가 이러한 헤더에 대비할 수 있도록 규율이 필요합니다. 인라인 스크립트를 갖는 것은 현대 웹 개발에서 나쁜 관행으로 간주되지만 오래된 레거시 사이트에서는 일반적입니다.
인라인 스크립트에서 점진적으로 마이그레이션하려면 위반 보고서를 사용하는 것이 좋습니다. 브라우저에서는 인라인 자바스크립트가 실행되지 않도록 하는 대신 정책 위반 사항을 알립니다:
Content-Security-Policy-Report-Only: script-src 'self'; report-uri http://example.com/csr-reports
이것은 당신이 그들을 철처하게 금지하기 전에 느린 인라인 스크립트가 없다는 것을 당신에게 확신을 줄 것입니다.일부 사이트의 경우 원시 페이지를 저장하고 렌더링해야 할 정당한 필요가 있습니다. 이 라이브러리는 웹 사이트 또는 웹 사이트 또는 웹 사이트 또는 웹 사이트 또는 웹 사이트 또는 웹 사이트 또는 웹 사이트 또는 웹 사이트 또는 웹 사이트 또는 웹 사이트 또는 웹 사이트 또는 웹 사이트 또는 웹 사이트 또는 웹 사이트 또는 웹 사이트 또는 웹 사이트 또는 웹 사이트 또는 웹 사이트 또는 웹 사이트 또는 웹 사이트 또는 웹 사이트이러한 쿠키가 사용자의 세션 아이디를 포함하는 쿠키를 도용하는 데 악의적인 자바스크립트를 사용할 수 있습니다. 즉,쿠키는 브라우저에서 수신,저장 및 전송되지만 자바스크립트에서는 수정하거나 읽을 수 없습니다.
XSS 예방 코드 예
교차 사이트 스크립팅 방지에서는 파이썬(Django)
템플릿에서 장고 탈출 HTML 기본적으로,그래서 아무것도는 다음과 같은 일반적으로 안전합니다:
**{{ contents }}**
무시할 수 있습 탈출을 사용하여|safe 필터입니다. 이 작업을 수행하는 데는 종종 좋은 이유가 있지만 이 명령을 사용하는 모든 것에 대해 코드 검토를 수행해야 합니다:
**{{ contents | safe }}**
또한{% autoescape %}
태그를 사용하여 설정하거나 해제할 수 있습니다.따라서 다음과 같이 보이는 모든 것은 일반적으로 안전합니다.:
<%= contents %>
원시 함수를 사용하거나<%==
연산자를 사용하여 이스케이프를 재정의할 수 있습니다. 이 작업을 수행하는 데는 종종 좋은 이유가 있지만 이러한 함수를 사용하는 모든 것에 대해 코드 검토를 수행해야 합니다:
<% raw contents %>
<%== contents %>
자바에서 크로스 사이트 스크립팅 방지(자바 서버 페이지)
c:out
태그를 사용하여 안전하게 이스케이프합니다.:
<c:out value="${contents}">
템플릿에 쓰는 방법은 다음과 같습니다:
<%= contents %>
${contents}
<%
out.println(contents);
%>
사이트 간 스크립팅 방지4904>
다음 함수 중 하나를 사용하여 안전하게 이스케이프합니다.ASP.NET 4.0):
<%= HttpUtility.HtmlEncode(contents) %>
<%: contents %>
템플릿에 쓰는 방법은 다음과 같습니다:
<%= contents %>
HttpUtility.HtmlEncode(...)
을 사용 하 여 수동으로 이스케이프 해야 합니다.
노드
콧수염에서 사이트 간 스크립팅 방지.142>
콧수염.이중 콧수염의 모든 태그는 자동으로 이스케이프됩니다.:
{{ contents }}
삼중 콧수염의 태그는 웹페이지에서 벗어나지 않으므로 주의해서 사용하십시오:
{{{ contents }}}
먼지.태그가 자동으로 이스케이프됩니다.:
{ contents }
그러나|s
연산자를 사용하면 이스케이프를 사용하지 않도록 설정할 수 있으므로 주의해서 사용하십시오
{ contents | s }
환경에서 자동 이스케이프를 켜면 안전 출력을 위해 자동으로 태그를 이스케이프합니다:
{{ contents }}
안전 필터로 표시된 내용은 이스케이프되지 않습니다.:
{{ contents | safe }}
템플릿에 대해 자동 이스케이프를 사용하지 않도록 설정할 수 있으며,이 경우 태그를 수동으로 이스케이프해야 합니다:
{{ contents | escape }}
즉,다음과 같은 코드는 요청에서 직접 데이터를 가져오므로 공격에 취약합니다:
<?php
Echo $_POST;
?>
중괄호로 작성된 모든 콘텐츠는 자동으로 이스케이프 처리되므로 다음 사항이 안전합니다:
<div>{{dynamicContent}}</div>
동적 콘텐츠를 바인딩하는 코드는 자동으로 이스케이프되지 않습니다:
<div ="dynamicContent"></div>
<div innerHTML]="{{dynamicContent}}"></div>
반응
에서 사이트 간 스크립팅 방지 중괄호로 작성된 동적 콘텐츠는 반응에서 자동으로 이스케이프되므로 다음 코드가 안전합니다:
render() {
return <div>{dynamicContent}</div>
}
예를 들어 다음과 같은 기능을 사용할 수 있습니다 이름은 우연이 아니므로 다음과 같은 코드가 있는지 확인하십시오:
render() {
return <div dangerouslySetInnerHTML={ __html: dynamicContent } />
}
자동화된 도구가 교차 사이트 스크립팅을 방지하는 데 어떻게 도움이 됩니까?
위에서 언급했듯이 기본적으로 동적 콘텐츠를 이스케이프하는 많은 프레임워크를 사용하면 사이트 간 스크립팅 공격을 쉽게 방지할 수 있습니다. 그러나 이러한 편리함은 응용 프로그램 및 비즈니스에 대한 부주의 및 심각한 보안 약점으로 이어질 수 있습니다.
모든 빌드/커밋에서 보안 취약점을 조기에 탐지하고 교정하기 위해 프로덕션 환경에 릴리스하기 전에 항상 응용 프로그램에서 취약점을 검사해야 합니다.
뉴럴지온의 동적 애플리케이션 보안 테스트 스캐너,넥스플로잇을 통해 보안 테스트 자동화를 시작할 수 있습니다. 개발자를 위해 제작되었으며 가양성 없이 파이프라인에 통합하여 보안 테스트를 왼쪽으로 이동하고 설계 상 안전하게 만들 수 있습니다.
여기에 무료 계정에 가입:https://nexploit.app/signup