2011-10-29 5 views
2

양식이 있다고 가정 해 봅니다. 그리고 절대적으로 필요한 경우가 아니라면 추악한 captcha가 필요하지 않습니다.새 사용자가 보낸 요청인지 확인

사용자가 양식을 제출하게하고 동일한 사용자가 양식을 다시 제출하면 보안 문자가 표시됩니다.

두 번째 양식 제출이 동일한 사용자의 것인지 여부를 감지 할 수 있습니까?

나는 대략 $_SERVER['REMOTE_ATTR'] (이것은 사용자 IP 임)을 알고 있지만 이것은 신뢰할 만합니까? 이 변수는 사용자가 보낸 값을 저장하기 때문에 어떤 봇이라도 위조 할 수 있다고 생각합니다. 맞습니까?

+0

왜 세션/쿠키를 사용하지 않습니까? 특정 사람이나 브라우저를 "감지"하는 것은 브라우저가 보낸 데이터를 사용하여 항상 본질적으로 결함이 있습니다. –

+3

'$ _SERVER [ 'REMOTE_ATTR']'은 (는) 브라우저에서 보내지 않습니다. 웹 서버가 HTTP 패킷을 주소 지정하는 주소입니다. 안타깝게도 많은 사용자가 NAT를 통해 1 개의 IP 주소 뒤에 숨겨져 있기 때문에 식별자로 사용할 수 없습니다 (다른 단점도 있음). 세션 쿠키를 사용해야합니다. –

+0

@ 할아버지 답변입니다. –

답변

1

2 가지 경로를 사용할 수 있습니다. 롤링 csrf 토큰을 사용하거나 세션에 플래그를 저장할 수 있습니다. 세션 플래그는 조금 더 직설적입니다 :

session_start(); 
if(!isset($_SESSION['submit_flag'])){ 
    $_SESSION['submit_flag']=true 
    //perform action... 
} 
관련 문제