교차 사이트 스크립팅 공격을 방지하는 방법은 무엇입니까?

사이트 간 스크립팅 방지란 무엇입니까?

교차 사이트 스크립팅 방지는 웹 사이트 또는 웹 응용 프로그램이 프로덕션에 도달하기 전에 웹 사이트 또는 웹 응용 프로그램의 취약점을 탐지하고 수정하는 프로세스입니다. 자동화된 취약점 스캐너를 사용하거나 침투 테스트를 수행하여 수동으로 탐지할 수 있습니다. 이 문서에서는 사이트 간 스크립팅 방지에 대한 모범 사례와 이를 즉시 구현하는 방법에 대해 설명합니다. 이 문서의 끝 부분에서는 개발 파이프라인

의 일부로 사이트 간 스크립팅 취약점을 조기에 그리고 자주 감지하고 수정할 수 있도록 개발자 중심의 무료 취약점 스캐너에 대한 링크도 찾을 수 있습니다.:

  • 교차 사이트 스크립팅 방지 란 무엇입니까?
  • 교차 사이트 스크립팅은 어떻게 작동합니까?
  • 사이트 간 스크립팅 방지는 얼마나 중요합니까?
  • 크로스 사이트 스크립팅 보호
    • 동적 콘텐츠 이스케이프
    • 화이트리스트 값
    • 콘텐츠 보안 정책 구현
  • 사이트 간 스크립팅 방지(장고)
  • 루비(레일스)
  • 자바(자바 서버 페이지)
  • 자바(자바 서버 페이지)
  • 자바(자바 서버 페이지)
  • 자바(자바 서버 페이지)에서 크로스 사이트 스크립팅 방지(장고)
  • 노드
    • 콧수염에서 사이트 간 스크립팅 방지.3395>
    • 먼지.
  • 교차 사이트 스크립팅 방지
  • 각도의 교차 사이트 스크립팅 방지
  • 반응에서 교차 사이트 스크립팅 방지
  • 자동화된 도구가 교차 사이트 스크립팅을 방지하는 데 어떻게 도움이 됩니까?
  • 교차 사이트 스크립팅은 어떻게 작동합니까?

    사이트 간 스크립팅 공격은 악성 스크립트가 신뢰할 수 있는 웹 응용 프로그램에 주입되는 주입 공격의 한 형태입니다.

    교차 사이트 스크립팅 작업 방법 다이어그램

    공격자는 웹 응용 프로그램을 사용하여 일반적으로 브라우저 쪽 스크립트 형태의 악성 코드를 다른 최종 사용자에게 보낼 수 있습니다.

    취약점은 웹 응용 프로그램이 생성된 출력 내에 포함된 유효한 사용자의 입력을 사용하지만 적절한 유효성 검사나 인코딩이 없는 경우에 발생하는 매우 일반적인 취약점입니다.

    악성 스크립트가 사용자에게 전송되면 해당 브라우저는 스크립트를 신뢰할 수 없다는 것을 절대적으로 알 수 없으며 이후에 스크립트를 실행합니다. 이 스크립트는 쿠키,세션 토큰 또는 해당 사이트의 브라우저가 보유 할 수있는 기타 민감한 정보를 포함하여 다양한 데이터에 액세스 할 수 있습니다.

    :

    1. 악성 스크립트는 현재 요청에서 온다
    2. : 이 취약점은 서버 측 코드가 아닌 클라이언트 측 코드에 존재합니다.

    사이트 간 스크립팅 방지는 얼마나 중요합니까?

    취약점 악용으로 인한 피해는 사이트에서 처리하는 데이터의 민감도에 따라 달라집니다. 다음은 해커가 취약한 앱을 악용한 몇 가지 예입니다:

    • 소셜 미디어에 웜 확산:페이스 북,트위터 및 유튜브는 모두 이러한 방식으로 성공적으로 공격 have
    • 세션 하이재킹: 악의적인 자바스크립트는 해커의 통제 하에 있는 원격 사이트로 세션 아이디를 보낼 수 있으므로 해커가 진행 중인 세션을 하이재킹하여 해당 사용자를 가장할 수 있습니다.
    • 신분 도용:사용자가 손상된 웹 사이트에 신용 카드 번호와 같은 기밀 정보를 입력하면 악의적 인 자바 스크립트를 사용하여 이러한 세부 정보를 도용 할 수 있습니다.
    • 서비스 거부 공격 및 웹 사이트 기물 파손.
    • 암호와 같은 민감한 데이터의 도난.
    • 은행 사이트에 금융 사기.

    크로스 사이트 스크립팅 보호

    동적 콘텐츠 이스케이프

    일반적으로 웹 페이지가 렌더링될 때 동적 콘텐츠는 웹 페이지로 직조됩니다. 동적 콘텐츠가 부적절하게 처리되면 공격자는 이를 사용하여 저장된 공격을 생성할 수 있습니다. 공격자는 일부 악의적인 자바스크립트 코드를 삽입하여 편집 가능한 필드를 악용합니다.

    사이트가 콘텐츠 관리 시스템이 아니면 사용자가 원시 페이지를 작성하지 못하게 할 수 있습니다. 데이터 저장소에서 오는 모든 동적 콘텐츠를 이스케이프합니다.

    동적 콘텐츠 이스케이프는 일반적으로 중요한 문자를 인코딩하는 것으로 구성됩니다.:

    ” &#34
    # &#35
    & &#38
    ‘ &#39
    ( &#40
    ) &#41
    / &#47
    ; &#59
    < &#60
    > &#62

    아래 코드 샘플에서 볼 수 있듯이 대부분의 최신 프레임워크는 기본적으로 동적 콘텐츠를 이스케이프합니다.

    이 방법으로 편집 가능한 콘텐츠를 이스케이프하면 브라우저에서 콘텐츠를 실행 코드로 취급하지 않습니다. 이것은 대부분의 공격을 방지 할 수 있습니다.

    화이트리스트 값

    동적 데이터 항목이 소수의 유효한 값만 사용할 수 있는 경우 데이터 저장소의 값을 제한합니다. 또한 렌더링 논리가 알려진 적절한 값만 허용하는지 확인하십시오.

    이 방법을 사용할 수 있는 예는 사용자에게 수동으로 입력하는 대신 드롭다운 목록에서 국가를 선택하도록 요청하는 것입니다.

    콘텐츠 보안 정책 구현

    최신 브라우저는 콘텐츠 보안 정책을 지원합니다. 콘텐츠 보안 정책을 사용하면 웹 페이지의 작성자가 자바 스크립트 및 기타 리소스를로드하고 실행할 수있는 위치를 제어 할 수 있습니다.

    공격자는 사용자의 웹 페이지에서 악의적인 스크립트를 실행할 수 있어야 합니다.

    응답 헤더에 콘텐츠 보안 정책을 설정하면 브라우저에서 인라인 자바스크립트를 실행하지 않도록 하고 페이지에 대한 자바스크립트를 호스팅할 수 있는 도메인을 선택할 수 있습니다:

    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

    Leave a Reply

    답글 남기기

    이메일 주소는 공개되지 않습니다.