2012-01-24 3 views
3

사용자 이름을 묻는 웹 사이트가 있다고 가정 해 보겠습니다.쿠키가 보안 위험입니까?

웹 사이트는이 값을 쿠키에 저장하고 다음 페이지에서 PHP를 통해이 값을 가져 와서 어떻게 든 사용합니다 (아마도 페이지의 이름이 텍스트로 표시 될 수 있습니다).

사용자가 쿠키 데이터를 수정하여 악성 코드를 삽입 할 수 있습니까? 스크립트에 의해 쿠키가 검색되면 쿠키 데이터는 소실되어야합니까?

(이것은 분명히 쿠키 여기에 필요하지 않을 것입니다.. 가상 시나리오)

+1

참조 [WP : 쿠키 (http://en.wikipedia.org/wiki/HTTP_cookie) 및 일반 ['$이 보안 문제를 해결하려면, 당신은 제대로 HTML 컨텍스트에 대한 쿠키 데이터를 탈출해야한다 _COOKIE'] (http://php.net/_COOKIE) 정보 ("외부 변수 처리")를 참조하십시오. – mario

답변

4

사용자가 악성 코드를 주입하기 위해 쿠키 데이터를 수정할 수 있을까요? 스크립트에 의해 쿠키가 검색 될 때 쿠키가 소독되어야합니까?

악성 코드를 주입 ​​하시겠습니까? PHP 코드가 아니지만 쿠키 값을 사용하기 전에 쿠키 값을 위생해야합니다.

쿠키는 사용자가 쉽게 수정, 추가 및 삭제할 수 있으며 신뢰할 수없는 사용자 입력으로 취급되어야합니다. 다른 모든 사용자 입력과 마찬가지로 XSS 및 SQL 주입 가능성에 취약합니다.

SSL을 사용하지 않는 한 쿠키는 요청에서 GET 또는 POST 데이터를 스니핑하는 경향이 있습니다. 악의적 인 인터넷 서비스는 쿠키를 가로 채거나 수정할 수 있습니다. 쿠키가 잘못 사용되고 신뢰할 수없는 방법에 대한 예는 Firesheep을 참조하십시오.

+0

왜 실행 코드가 아닌가요? – Peter

+0

+1 - Firesheep. – Daniel

+0

쿠키에서 데이터를 "실행"하면 그냥 미친 것입니다. –

1

이름 앞에 $ _ ($ _POST, $ _GET, $ _COOKIE, $ _FILE, $ _SESSION)이있는 PHP의 모든 변수는 페이지 나 데이터베이스에 저장하기 전에 확인해야합니다.

htmlentities($str)을 사용하여 대부분의 주사를 예방할 수 있습니다.

+0

'htmlentities'는 조심스럽게 다루지 않는 한 악의적으로 유니 코드를 mangle 처리 할 수 ​​있습니다. 'htmlspecialchars'는 문자 집합 shenanigans없이 XSS와 동일한 수준의 보호 기능을 제공합니다. – Charles

+0

@Charles :'htmlentities()'함수는 문자 세트를 지정하기 위해 선택적인 3 번째 매개 변수를 취합니다. 적절한 설정을 사용하지 않으면 데이터를 "악의적으로 조작"합니다. – FtDRbwLXw6

+0

이것이 사실이지만, 모든 통화 *에 대한 문자 인코딩에 대해서도 생각해야합니다. * 이는 성 가시고 최악의 성가심입니다. – Charles

0

쿠키는 클라이언트의 입력 형식 중 하나입니다. 쿠키는 클라이언트가 쿠키에서 원하는 것을 보낼 수 있으며, 위생/유효성 검사를 수행 할 때까지 쿠키에 제출 된 것을 신뢰해서는 안됩니다. 제대로 쿠키를 포함하여 응용 프로그램으로 모든 입력에 적용되어야 데이터 유효성 검사을 수행에

좋은 지침은 OWASP와 can be found here에 의해 제공됩니다. 약식 양식은 허용되는 입력을 명확하게 정의하고 허용되는 입력 만 허용하는 것으로 알려진 승인을 수행합니다. 알려진 나쁜 패턴을 차단하는 것 이외에 블랙리스트를 갖는 것은 좋은 생각이다.

3

쿠키를 사용할 때 고유 한 보안 위험은 없습니다. 보안 위험은 쿠키 데이터를 처리하고 쿠키에 어떤 데이터를 저장했는지에 따라 결정됩니다. 예를 들어, 당신은 같은 것을 할 경우 :

<h3>Hello, <?php echo $_COOKIE['user']; ?>!</h3> 

은 ... 다음 사용자는 페이지 (XSS 취약성)에 임의의 코드를 삽입 할 수 있습니다.

<h3>Hello, <?php echo htmlspecialchars($_COOKIE['user']); ?>!</h3> 
+0

첫 번째 예제에서 실행 PHP 코드를 삽입 할 수 있습니까? – Peter

+0

@Peter : 예, 가능하지만 쿠키 사용으로 인한 것이 아닙니다. 적절한 데이터가 빠져 나가는 부족 * 때문입니다. POST, GET, SERVER, FILE, SESSION 등과 같은 취약점이 존재합니다. 데이터를 제대로 벗어나지 않으면 마찬가지입니다. – FtDRbwLXw6