2014-04-03 2 views
1

질문 : in this post에 대해 적절한 대답을 찾을 수 없어 불행하게도 다시 묻습니다.
웹 응용 프로그램에서 CSRF 공격을 막아야합니다. 그래서 나는이 같은의 index.php 주 파일 의 상단에 토큰을 생성 :일부 브라우저에서는 원격 서버의 PHP 세션 값이 변경되지 않습니다.

<?php 
session_start(); 
$_SESSION['token'] = md5(uniqid()); 
?> 

을 그리고 다음과 같이 처리 파일로 전송하는 형태의 숨겨진 필드에 넣어 :

<input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>" /> 

로컬에서 처리 파일의 코드를 실행하면 모든 내용이 정상이며 모두 $ _POST [ 'token']$ _SESSION [ 'token']이 동일합니다. 아래 코드를 실행하면 확실합니다.

<?php 
session_start(); 
echo $_SESSION['token'].'<br />'.$_POST['token']; 
// Out put is like lines below: 
// 7cf64efc6f8ad5bdf9c04e57feb7d1f9 
// 7cf64efc6f8ad5bdf9c04e57feb7d1f9 
?> 

원격 호스트에서 프로젝트를 업로드 할 때 같은 방식으로 작동해야합니다. 그러나 그것은 인터넷에서 이상한 행동을합니다. $ _POST [ 'token']$ _SESSION [ 'token']은 웹상에서 더 이상 동일하지 않습니다. $ _SESSION [ 'token'] 레크리에이션 코드없이 처리 파일이 변경되었습니다!

<?php 
session_start(); 
echo $_SESSION['token'].'<br />'.$_POST['token']; 
// Out put is like lines below: 
// 22a0331a5ef07b96d95e2e0f6b98e282 
// f859cc725cf7c7026aaaf84a48779199 
?> 

낯선 지점이 알 수없는 방식으로 이전 IE에 있었던,하지만 지금은 IE에서 발생하지 않습니다,이 시간은 크롬에서 발생합니다. Firefox에는이 문제도 없습니다.

나는 무엇이 문제인지 모른다. 아무도 적절한 답을 알려주지 못했습니다.
제발 도와주세요 ...

+0

세션이 재설정 된 것으로 생각합니다. 코드를 정확히 게시 할 수 있습니까? –

+0

올바르게 생각한다면 왜 모든 브라우저에서이 문제가 발생하지 않습니까? –

+0

우리에게이 사실을 보여주는 증거가 없습니까? 그래서 우리는 이것을 올바른 것으로 간주 할 수 있고 코드를 다시 검사 할 수 있습니다. 또한 아무도 다른 문제를보고하지 않습니다. –

답변

2

토큰을 만들고 확인하는 데 큰 부분이 없습니다. 여기서 문제는 라인 $_SESSION['token'] = md5(uniqid());에 있습니다. 최소한 다음과 같이 포장하십시오.

if (isset ($_SESSION['token'])) { 
    $_SESSION['token'] = md5(uniqid()); 
} 

그런 다음 유효성 검사 및 사용 후에 토큰을 다시 자유롭게 변경할 수 있습니다.

+0

토큰 세션 생성은 인덱스 위에 단 한 번 발생합니다.php. 그것을 만들 수있는 다른 곳이 없습니다 –

+0

예, 그럴 수도 있지만 존재하거나 사용 된 경우 확인해야합니다. 그렇지 않으면 요청마다 다른 토큰을 생성하게됩니다. –

관련 문제