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에 바인딩합니다. (물론 사용자 클라이언트로부터 더 많은 정보를 얻어 동시에 바인딩할 수도 있습니다.) 쿠키가 원래 승인된 사용자로부터 온 것인지 확인할 수 있습니다. 일반적인 적용 예:$auto=I('post.auto');//用户设置了自动登录 if(!empty($auto)){ cookie('auto',encrypt(serialize($data)));//将登录信息保存到cookie,其中$data里含有加密后的帐号,密码,和用户的IP,这里的cookie已在全局中设置过期日期为一周 }
if (!is_login()) {//是否未登录状态? $auth=cookie('auto'); if(!empty($auth)){//是否未有自动登录cookie? $data=unserialize(decrypt($auth)); if(!empty($data) && !empty($data['username']) && !empty($data['password']) && !empty($data['last_login_ip'])){ $user=M('Member')->where(array('username'=>$data['username'],'password'=>$data['password']))->find(); if(!empty($user['id'])&&($user['last_login_ip']==get_client_ip())){//cookie帐号密码是否有效?//IP来源是否相同? login_session($user['id'], $user['username'], $data['last_login_ip']);//用户自动登录成功 } } } }
장점: 대부분의 경우 XSS 공격으로 훔친 쿠키가 무효화될 수 있습니다. 단점: IP가 여러 컴퓨터에서 공유될 수 있으므로 바인딩이 매우 정확할 수 없습니다. 3: 쿠키에 대한 httponly 구성 추가
최신 버전의 thinkphp는 이미 이 매개변수를 지원합니다.
.
4: 주목할 만한 HTML5의 새로운 기능:
5: 서식 있는 텍스트 필터링
위 내용은 thinkphp 필터 xss의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!