2011-12-13 5 views
1

$ _SESSION [ 'id_user'] 이라는 세션이 있고 사용자 ID의 세션을 저장할 수 있습니다. 내가 그 프로파일은 사용자가 있는지 확인하려면 사용자 프로필 www.example.com/profile.php?id=123

이라고 말하고하자 내가 ((경우는 isset을GET 변수로 사용자 로그인 세션을 확인하는 것이 안전합니까?

뭔가를 할 경우 $ _SESSION [ 'id_user']))
else {print nothing} $ {SESSION [ 'id_user'] =) $ {GET [ 'id'])
}

이 t인가 그는 위의 코드를 충분히 위에서? 아니면 그들의 보안 문제입니까? 또는 GET 변수와 SESSION 변수를 비교하는 것이 현명한 방법입니까? 사용자 신원을 알 수 없게하거나, 프로필을 방문하는 사용자에게 프로필 버튼을 보여주고 싶을뿐입니다.

+2

세션 변수를 사용하여 사용자 프로필을 열 수있는 경우 왜 세션을 get 변수와 비교해야합니까? – Thomas

+0

이것은 괜찮습니다 :'/profile.php? logged_in = true'를 사용하는 것과 같지 않음 –

+0

여기에 보안 위험이있는 경우 $ _GET- 변수를 $ _SESSION과 비교하는 것이 아니라 URL 사용자 ID가 노출되도록 노출합니다. –

답변

4

예, 세션은 서버에 저장되며 사용자는 세션 데이터를 수동으로 변경할 수 없습니다. 세션이 hijacked 인 경우가 아니면 자신 만의 프로필을 볼 수 있습니다. 마음의 조각을 위해

(그리고 난 그냥 사용하기 전에 (int)들과 두 개의 변수를 던져 줄 수 SQL 주입을 방지하기 위해 (또한 나는 또한 변수를 확인하는 ===을 사용합니다. $_SESSION['id_user'] 여러 번 작성하지 줄인다

토마스의 의견에서 언급했듯이 세션에 이미 사용자 ID가있는 경우 프로필을 구분할 필요가 없다면 (프로필을 구분해야 함) 토큰을 사용하지 말고 GET을 통한 사용자 ID

+0

네, 명시 적으로 타입 캐스팅이 중요하다면 걱정할 필요가 있다면 intval ($ _ GET [ 'id'])을 사용할 수 있습니다. – PolishHurricane

관련 문제