2011-10-17 4 views
0

가능한 중복 :
PHP Session Fixation/HijackingPHP 세션 도용

내가 $_SESSION 자동 전역을 많이 사용하고 많이했습니다.

그러나 상황은 다음과 같이이다 : 사용자가 내가 자신의 ID (MySQL의 테이블)을 추적 할 기록됩니다

되면. 나는 쉽게 에 ID를 삽입 할 수있다. $_SESSION['id'] = $user_id;

결국이 변수는 내 사이트의 페이지에서 사용할 수있다. 내 마음에 무엇이 있는지 - 사용자는 ID를 다른 사람에게 속일 수 있습니다. 간단한 숫자가있는 경우 조금 변경하고 어떤 일이 발생하는지 볼 수 있습니다. 데이터베이스의 항목을 추가, 삭제 및 편집하는 데 사용자 ID가 사용되므로 많은 문제가 발생할 수 있으므로이 문제를 방지하고 싶습니다. .

session_regenerate_id()은 내 세션을 도용으로부터 안전하게 보호하기에 충분합니까?

결론 : 쿠키는 세션 identificator를 저장 - 모든 값이 서버에있는 클라이언트 측에 전달되지 얻을 않았다. Read about session fixation/hijacking on StackOverflow

+0

'$ _SESSION'에 저장된 변수가 클라이언트에게 전송되는 이유는 무엇입니까? –

+0

아무 것도. $ _SESSION과 협력하여 작동하는 쿠키 내부에는 클라이언트 측에 해쉬 (hash)가 존재한다고 생각합니다. 내 질문을 잘못 작성했을 수 있습니다. 업데이트하겠습니다. –

답변

1

. 그는 서버에 보관 된 변수를 수정할 수 없습니다 (session 문서 참조).

session_regenerate_id()에는 다른 용도가 있습니다. 쿠키 SID를 다시 설정합니다. 그것은 사용자와 세션을 구별하는 핸들입니다. 검증 할 보조 식별자 (IP 또는 사용자 에이전트 문자열)가있는 경우에만 사용하는 것이 좋습니다. 오래된 목적이나 교차하는 세션을 방지하는 것이 주요 목적입니다. 다시 한 번 설명서를 참조하십시오.

+0

죄송합니다 ..나는 $ _SESSION이 서버 측에 있다는 것을 알고 있지만 세션은 클라이언트 측에서 쿠키로 작동합니다 - 어떻게 든 세션을 위해 브라우저에서 서버로 데이터를 전달해야합니다. 내 생각에 세션 하이재킹이라고? –

+0

SID 쿠키 만 브라우저에서 전달됩니다. 포함 된'[ "id"]'변수는 서버에 보관됩니다. – mario

+1

[PHP 세션 고정/도용] (http://stackoverflow.com/questions/5081025/php-session-fixation-hijacking) – mario

1

내가 당신이라면 나는 데이터베이스에 user_id와 session_hash를 저장 한 테이블을 가지고있을 것입니다. 아마도 date_expires 일 수도 있습니다. 그런 다음 사용자가 자신의 ID와 아마 임의의 소금을 기반으로 해시를 생성하면 세션 변수는 물론 데이터베이스에도 저장됩니다. 그런 식으로 가치를 바꾸면 데이터베이스에 저장된 다른 가치와 일치 할 가능성은 거의 없습니다. 이와 함께 사용자가 자신의 계정에서 작업을 수행하는 경우 데이터베이스 테이블에서 해시 값을 확인하여 실제 ID를 얻은 다음 정상적으로 수행 할 작업을 수행합니다.

1

하나의 옵션은 해시 한 다음 데이터베이스에서 동일한 해시를 사용하는 것입니다.

예 : 사용자가 $_SESSION['id']에는 acccess가 없다

$_SESSION['id'] = md5($user_id); 

$query = "SELECT * from database_table where md5(database_table.user_id) = " . $_SESSION['id']; 
+0

암호화! = 해시 –

+0

고마워! 나는 전에 그런 방법을 사용하고있었습니다.하지만 이제는 그것이 단점이라는 것을 알고 싶습니다. –

+0

@KendallHopkins whoops thats true – Atticus