2010-01-06 7 views
2

나는 내 인생에 대해 알 수없는 문제가 하나 있습니다. 나는 클라이언트를위한 슈퍼 간단한 CMS를 설정했습니다. CMS의 각기 다른 페이지에는 session.php라는 파일이 있습니다.PHP 세션 문제

session_start(); 
$username = $_SESSION['siteadmin']; 
if (!$_SESSION['siteadmin']){ 
    header('Location: login.php?status=2'); 
} 

때때로 모든 것이 데이터베이스에서 사라집니다. 그래서 CMS를 통해 모든 작업을 기록한 원 로그 시스템을 설정했습니다. 글쎄, 다시 일어난거야. 로그에 표시되는 내용은 다음과 같습니다.

Logged in       **.**.237.209 17:18 <-- thats me 
Deleted board member id 12 195.42.102.25 16:49 
Deleted board member id 15 195.42.102.25 16:49 
Deleted board member id 8 195.42.102.25 16:49 
Deleted board member id 10 195.42.102.25 16:49 
Deleted board member id 9 195.42.102.25 16:49 
Deleted board member id 4 195.42.102.25 16:49 
Deleted board member id 3 195.42.102.25 16:49 
Deleted board member id 5 195.42.102.25 16:49 
Deleted board member id 6 195.42.102.25 16:49 
Deleted board member id 11 195.42.102.25 16:49 
Deleted board member id 7 195.42.102.25 16:49 
Deleted review id 2    195.42.102.25 16:49 
Deleted review id 3    195.42.102.25 16:49 

그리고 몇 페이지가 계속됩니다. 그것은 심지어 195.42.102.25 로그인을 보여주지 않습니다! 지난 번 195.128.18.19에 일어났습니다. 컴퓨터가 세션 변수없이 창을 어떻게로드합니까? 내가 완전히 간과하고있는 코드에 보안 구멍이 있습니까?!

이 문제에 대한 통찰력은 정말 대단합니다.

감사합니다,

+0

"session.php"파일에 무엇이 있습니까? – Arno

답변

8

headerexit을 넣습니다.

+0

신속하고 정직한 대답에 감사드립니다. 그것은 일한 것으로 보인다! – ssergei

+0

반갑습니다. BenoKrapo가 말했듯이 응용 프로그램에 또 다른 문제가있을 수 있습니다. GET 요청에 대한 데이터를 결코 삭제 (또는 갱신)해서는 안됩니다. 항상 POST를 사용하십시오. – troelskn

0

session_start 뒤에 session_regenerate_id()을 추가하는 것을 고려하십시오. 이렇게하면 세션 쿠키가 도용되지 않습니다 (쿠키 ID의 PHPSESSID가 위의 기능을 사용하는 경우 각 pageload에서 재생성됩니다). 이는 실제로 위의 답변에서 exit 문제를 제외하고

3

출구 또는 다이는 헤더를 나타냅니다.

헤더 리디렉션을 따르지 않고 어페어티로 실행되는 것을 얻기가 쉽지 않습니다.

당분간 찾을 수없는이 문제에 대한 The Daily WTF (이상 완료)의 재미있는 게시글이 있습니다.

편집 : 발견했습니다! :) http://thedailywtf.com/Articles/WellIntentioned-Destruction.aspx

+0

기사에 감사드립니다. 제 정확한 상황을 설명했습니다! – ssergei