2008-10-20 5 views
3

PHP 세션은 얼마나 안전한가요? 네이티브 PHP 세션을 사용하여 사용자를 인증 할 계획입니다. 사용자가 $ _POST 및 $ _GET 데이터처럼 세션 데이터를 수정할 수 있습니까?PHP - 세션 - 보안

답변

6

데이터 만 세션으로 간다. 따라서 세션은 허용 된 데이터만큼 안전하며 해당 데이터를 신뢰하고 사용하는 방법입니다. 또한 세션은 클라이언트가 세션 사용자를 식별하는 데 사용하는 sessionID를 기반으로합니다. 누군가 sessionID를 가로채는 경우 세션 ID가 훔친 사용자임을 에뮬레이션 할 수 있습니다. 이것은 SSH가 아닌 통신에서 발생할 수 있습니다. 따라서 로그인하지 않고 세션 ID가 보안 모드에서만 전송 된 경우가 아니면 중요한 항목에 대해 사용자를 식별하기위한 세션 ID를 신뢰하지 마십시오.

보안에 대한 다음 질문은 사용자에게 보낸 sessionID의 "추측 가능성"입니다. 위에서 언급 한 내용을 다루는 경우, 그 문서와 문서를 통해 얻을 수있는 시간에 PHP sessionID가 "추측 할 수있는"방법을 이해할 수 있습니다.

마지막으로 XSS 공격에주의하십시오. 인터넷을 통해 XSS의 발생률을 최소화하는 방법을 설명하는 여러 게시물이 있습니다.

3

PHP 세션은 사용자에게 제공되는 세션 쿠키만큼 안전합니다. 세션의 모든 데이터는 서버 측에 저장되므로 사용자는 사이트에서 제공하는 기능을 통하지 않고 임의로 수정할 수 없습니다. 그러나 PHP 세션 쿠키는 XSS (Cross-Site Scripting) 및 CSRF (Cross-Site Request forgery) 공격의 공통 대상입니다. 똑같은 세션은 잠재적 인 위험을 알고있는 한 사용자 인증을 수행하는 좋은 방법입니다.

일부 위키 백과 링크 : 당신이 개발자로서 사용자가 당신이 작성한 코드를 통해 세션에 넣어있을 때

CSRF

XSS

+0

다른 방법으로 인증을 수행 할 수 있습니까? $ _SESSION은 누구나 지금까지 이야기하는 유일한 방법입니다. –

+0

내가 해낸 유일한 방법은 Perl에서 클라이언트 컴퓨터에 username/hashed 암호 쿠키를 저장하고 각 페이지로드시에이를 읽는 것입니다. 약간 위험하다. 쿠키를 복사하면 언제든지 컴퓨터에서 쿠키에 액세스 한 후 언제든지 귀하의 계정에 액세스 할 수 있습니다. – Randy

+0

일부 환경에서는 IP 기반 서버 측 인증 (예 : 유효한 로그인 자격 증명을 얻은 후 서버의 데이터베이스에 IP 및 만료 타임 스탬프 저장)을 수행 할 수도 있습니다. 이것은 NAT 나 프록시 서버에서는 잘 작동하지 않습니다. – Randy