> PHP 프레임워크 > ThinkPHP > thinkphp 필터 xss

thinkphp 필터 xss

步履不停
풀어 주다: 2019-08-16 18:11:23
원래의
5030명이 탐색했습니다.

thinkphp 필터 xss

XSS란 무엇입니까? 일반인의 관점에서 보면 SQL 주입과 마찬가지로 XSS 공격도 HTML 및 JS의 주입으로 간주될 수 있습니다. 원래는 사용자로부터 유용한 텍스트를 얻기를 바랐지만 사용자가 제출한 것은 실행 가능한 자바스크립트 또는 은밀한 동기가 있는 기타 스크립트였습니다(여기서 스타일이나 문서 텍스트를 파괴하는 것은 공격으로 간주되지 않습니다). 제출된 콘텐츠가 페이지에 표시되면 XSS 공격이 발생합니다.

XSS에 대한 공격 방법과 시나리오는 끝이 없습니다. 이 기사는 단지 기본적인 보안 보호 지식을 대중화하기 위한 것입니다(플래시 스크립트 공격은 포함되지 않음). 공격 방법 추천 "XSS Cross-site Scripting Attack Analysis and Defense" 책을 읽을 시간이 없다면 이 글을 읽어보세요.

이 글에는 쿠키, 세션 작동 원리, TP 프레임워크에 대한 특정 이해 등 기본 지식이 필요합니다.

1: 99%의 공격 방법을 저항하고 90%의 시나리오에 적합합니다.

웹사이트에 복잡한 사용자 상호 작용이 포함되지 않는 경우 사용자가 제출한 모든 텍스트는 htmlspecialchars 함수로 처리될 수 있습니다.

THINKPHP3.2 버전의 단계는 다음과 같습니다.

1: 프로젝트 구성 파일에 구성 추가#🎜 🎜 #: 'DEFAULT_FILTER' => 'htmlspecialchars', //기본 필터 기능

2:

사용자가 제출한 데이터를 얻으려면 프레임워크의 I 메서드를 사용하세요 ;# 🎜🎜#예: M('Member')->save(array('content'=>I('post.content'))); 이렇게 추가된 콘텐츠는 다음과 같이 처리됩니다. htmlspecialchars .

질문: htmlspecialchars로 처리된 텍스트가 왜 안전하다고 보장될 수 있나요?

답변: 다양한 XSS 공격 방법을 살펴보면 대부분은 하나 이상의 <>'"& 문자를 사용하여 콘텐츠를 삽입합니다. htmlspecialchars 함수의 기능은 이러한 문자를 무해한 HTML 엔터티로 변환하는 것입니다.

질문: 이렇게 좋은 방법이 있는데 왜 아직도 많은 웹사이트가 공격을 받고 있나요?

답변: 많은 프로그래머가 항상 이 방법을 부주의하게 사용하는 것을 잊어버리고 특정 데이터 조각을 필터링하는 것을 놓치기 때문입니다

2: 쿠키를 IP에 바인딩

쿠키에는 일반적으로 자동 로그인 정보와 세션 ID가 포함됩니다. 쿠키의 모든 내용이 암호화되더라도 XSS 공격을 통해 다른 사람이 쿠키 정보를 얻으면 해당 정보는 여전히 동일합니다.

쿠키를 IP에 바인딩합니다. (물론 사용자 클라이언트로부터 더 많은 정보를 얻어 동시에 바인딩할 수도 있습니다.) 쿠키가 원래 승인된 사용자로부터 온 것인지 확인할 수 있습니다.

일반적인 적용 예:

  1. 사용자가 자동 ​​로그인 설정 시 자동 로그인 정보 저장:


  2. $auto=I(&#39;post.auto&#39;);//用户设置了自动登录
    if(!empty($auto)){
    cookie(&#39;auto&#39;,encrypt(serialize($data)));//将登录信息保存到cookie,其中$data里含有加密后的帐号,密码,和用户的IP,这里的cookie已在全局中设置过期日期为一周
    }
    로그인 후 복사
  3. 사용자가 브라우저를 닫고 웹사이트에 방문할 때 자동 로그인 again


  4. if (!is_login()) {//是否未登录状态?
    $auth=cookie(&#39;auto&#39;);
    if(!empty($auth)){//是否未有自动登录cookie?
    $data=unserialize(decrypt($auth));
    if(!empty($data) && !empty($data[&#39;username&#39;]) && !empty($data[&#39;password&#39;]) && !empty($data[&#39;last_login_ip&#39;])){
    $user=M(&#39;Member&#39;)->where(array(&#39;username&#39;=>$data[&#39;username&#39;],&#39;password&#39;=>$data[&#39;password&#39;]))->find();
    if(!empty($user[&#39;id&#39;])&&($user[&#39;last_login_ip&#39;]==get_client_ip())){//cookie帐号密码是否有效?//IP来源是否相同?
    login_session($user[&#39;id&#39;], $user[&#39;username&#39;], $data[&#39;last_login_ip&#39;]);//用户自动登录成功
    }
    }
    }
    }
    로그인 후 복사

장점: 대부분의 경우 XSS 공격으로 훔친 쿠키가 무효화될 수 있습니다. 단점: IP가 여러 컴퓨터에서 공유될 수 있으므로 바인딩이 매우 정확할 수 없습니다. 3: 쿠키에 대한 httponly 구성 추가

최신 버전의 thinkphp는 이미 이 매개변수를 지원합니다.

  1. 이 매개변수는 쿠키가 http 요청에서만 전송되고 페이지의 스크립트에 의해 획득되지 않도록 보장할 수 있습니다. . 현재 시장에서 가장 인기 있는 브라우저입니다

    .

4: 주목할 만한 HTML5의 새로운 기능:

  1. # 🎜🎜#