2011-01-17 5 views
2

나는 한 페이지에 사용자 컴퓨터의 쿠키를 읽고이를 PHP 코드의 변수로 사용합니다 (예 : echo 구문).PHP 쿠키 삽입 취약점?

현재 어떤 방식 으로든 요리를 청소하지 않습니다.

2 질문 :

  1. 누군가가 내 PHP 코드에 물건을 넣어 자신의 쿠키를 해킹 할 수 있습니까?

  2. 그렇다면 어떻게 예방할 수 있습니까? 어떻게 청소할 수 있습니까?

고마워요!

+3

쿠키 사용 방법에 대한 몇 가지 코드를 보여주십시오. – Brad

+1

쿠키를 신뢰하지 마십시오. 그들은 매우 쉽게 편집 할 수 있습니다. 콘텐츠를 사용하기 전에 항상 콘텐츠의 유효성을 검사하십시오. –

답변

2

예, 코드에서 사용되는 방식에 따라 매우 쉽게이 코드를 이용할 수 있습니다. 예를 들어, 전체 요청을 위조하여 원하는 모든 값을 제공 할 수 있습니다.

이 문제를 방지하는 방법에 대한 질문은 쿠키가 포함 할 것으로 기대하는 값에 따라 다릅니다. 쿠키의 가치가 귀하의 사양에 맞는지 확인하기 만하면됩니다. 이 사양이 무엇인지, 또는 어떻게 가치가 사용되고 있는지 알지 못하면 말할 것도 없습니다.

6

예, 클라이언트의 쿠키를 편집하는 것은 매우 쉽습니다. 쿠키의 값을 다른 사용자가 생성 한 입력으로 처리해야합니다. 신뢰하지 않고 유효성을 검사하십시오.

+3

브라우저에서 가져온 모든 내용은 GETS, POSTS, 쿠키 등에서 온 것으로 의심 될 수 있습니다. 모두 조작 할 수 있습니다. 데이터베이스 쿼리에서 사용하려면 *, 특히 * 확인하십시오. –

+1

+1. 이 행을 따라 쿠키 값을 암호화하고 필요할 때만 암호를 해독해야합니다. http://stackoverflow.com/questions/606179/what-encryption-algorithm-is-best-for-encrypting-cookies – NotMe

3

쿠키가 echoing 인 경우 사용자가 폭발시킬 수있는 취약점은 Cross Site Scripting을 의미하는 "XSS"라고합니다. 기본적으로 그는 웹 사이트에 <script> 태그를 삽입하여 자바 스크립트를 실행합니다.

PHP에서 strip_tags 함수를 사용하여 쿠키에서 태그를 정리하면이 문제를 방지 할 수 있습니다.

쿠키를 다른 방법으로 사용하는 경우 새로운 보안 문제가 발생할 수 있으므로 해당되는 경우 지정하십시오.

+0

사용자가 자신에 대해 크로스 사이트 스크립팅 공격을 실행하는 방법을 참조하십시오. 이것이 정확히 어떻게 작동할까요? – aaronasterling

+3

글쎄, 내가 페이스 북에 들어갈 수 있도록 노트북을 빌려 보자. 나는 쿠키를 편집한다. – amosrivera

+0

전화하세요. 나는 그것에 대해 생각하지 않았다. – aaronasterling

0

사람들이 쿠키를 게시 한 것은 클라이언트 측에서 매우 쉽게 조작 할 수 있습니다. 기본적으로 텍스트 파일입니다. db 콜용 쿠키의 데이터에만 에코를하고 의존하지 않는다면, 사용자는 자신의 로컬 컴퓨터에서 displayd에 영향을 주므로주의를 기울이지 않아도됩니다. 공용 컴퓨터에서 이것은 당연히 문제가 될 수 있습니다. 서버 측 세션을 사용하여 데이터를보다 잘 제어하려는 경우. 또는 쿠키에 데이터가 실제로 필요한 경우 요리 값 서버 측의 해시를 저장하여 바보가 변경되었는지 확인할 수 있습니다.

1

Strip_tags는 해킹 당하지 않도록 보호하지 않으며 XSS를 제거하지 않습니다. HTML 만 제거하고 XSS 사이트에는 HTML이 필요하지 않습니다.

+0

이것은 사실입니다. 예를 들어 strip_tags가 특정 태그를 허용하는 경우 클릭 재킹을 쉽게 수행 할 수 있습니다. 특성이 제거되지 않기 때문입니다. –

0

문제는 입력 자체가 아니라 출력 방법에 있습니다. echo을 HTML 페이지에 직접 입력하면 HTML 인코딩이 필요합니다. 모두 문자열이며 쿠키가 아니라 HTML 페이지에 포함됩니다. 이스케이프 처리되지 않은 문자열을 HTML로 출력하는 습관 인 경우이 (*)보다 XSS 버그를 쉽게 악용 할 수 있습니다.

HTML로 출력하기 위해 변수 텍스트를 올바르게 처리하는 방법은 htmlspecialchars()에있는 모든 변수를 HTML로 반향하는 시점 (입력 처리 단계가 아님)에 래핑하는 것입니다.strip_tags()을 사용하지 마십시오. 이것은 보안 조치로 고안되지 않았으며 다양한 상황에서 실패합니다. 제한된 사용자 입력 마크 업을 허용해야하는 경우 HTML 정제기 라이브러리를 사용하십시오.

(* : 쿠키가 어떻게 설정되는지에 따라 HTML-injection-from-cookie가 얼마나 큰 영향을 받는가 공격자가 다른 사용자의 쿠키를 특정 값으로 설정하도록 설득 할 수있는 방법이 있다면, 그렇지 않으면 HTML 삽입을 악용하기 위해 쿠키 고정 버그를 찾아야하는데 이는 앱의 헤더 삽입 버그 일 수 있으며 '이웃 도메인'에있는 취약한 응용 프로그램 일 수 있습니다. - a.example.com에있는 신청서는 응용 프로그램에서 읽는 쿠키를 b.example.com에 설정할 수 있습니다.