2011-04-24 3 views
1

나는 세션 및 양식에 임의의 토큰 값을 저장하여 "양식 crf 공격"을 방지하는 방법을 만들었습니다. "post action"에서는 두 값을 비교합니다. 나는 모든 PHP 페이지의 맨 위에서 비교 함수를 사용했습니다. ,양식 crf 공격과 관련하여 어떤 조치가 필요합니까?

내 질문은 : 비교 프로세스가 실패하고 토큰 세션 값과 토큰 값이 동일하지 않은 경우! 그렇다면 스크립트가 수행해야하는 작업은 무엇입니까? 스크립트 작업을 "die();"로 중지하는 것입니다. ? 또는 최선의 행동은 무엇입니까?

덕분에,이 실제 사용자로부터 일어날 가능성은 매우 낮 경우

답변

0

, 그럼 나는 어떤 데이터를 반환/저장에서 스크립트를 방지 할 수 있지만,이 일을 한 것처럼 나는 '성공'메시지를 반환합니다. 오류를 반환하면 해커가 유효성 검사가 코딩 된 방식을 파악하는 데 도움이됩니다.

반면에 실제 사용자에게 발생하면 친숙한 오류가 표시되고 다시 로그인하도록 요청할 수 있습니다.

+0

@ Jason4Ever 결국 무엇을하기로 결심 했습니까? –

0

예. 그냥 실패하자. 이러한 오류를 복구 할 필요는 없습니다.

syslog(LOG_ERR, "CSRF token mismatch ..."); 
die("Request failed. (Disabled cookies?) Contact administrator: ..."); 

그것이 정말 브라우저 오류 또는 것이었다 경우에 humd 읽을 수있는 메시지를 포함 :

는 당신이 잠재적 인을 감사 로그 항목을 기록한다 그러나해야하는 시도를 이용한다. 그러나 실패한 CSRF 토큰임을 알리지 마십시오.

+0

좋은, 내가이 ofcours,하지만 문제가 많은 시간이 문제가 발생하기 때문에 토큰 값이 세션 시간 초과 때 또는 사용자가 새 탭을 열 때 변경! 그래서 새로운 토큰 값으로 새로운 세션을 시작합니다! , 그래서 나는 행동이 정상적인 사람의 공격자인지 확실하지 않다 !! – Jason4Ever

+0

좋습니다. 그것은 완전히 다른 질문입니다. 원래 게시물을 수정하여 반영하십시오. - 어떤 경우 든 CSRF 토큰 배열을 사용하는 것이 가장 좋습니다. $ _SESSION [ "csrf"] [] = $ new_token' 그리고'in_array ($ _ POST [ "csrf"], $ _SESSION [ "csrf"])'를 검사하기 위해서. 세션 타임 아웃과 관련해서는 할 수있는 일이 없습니다. 하지만 어쨌든 일반적인 문제는 아닙니다. – mario

관련 문제