문제

는 가장 좋은 방법은 무엇입를 중지에서 형성되고 다시 처리할 때 사용자가 뒤로가기 버튼?

내가 다음 게/Redirect/얻는 패턴, 지 문제가 있으면 F5 밀리지만,다시 버튼은 여전히 할 수있는 기회를 제공합을 다시 제출합니다.이 양식은 신용 카드 페이지를 가공하는,이것은 나쁜 것입니다.

이 질문은 물었 다소 , 지만,말씨와 응답이의 품질과하지 않는 특정 이 문제에 정확히.

나 form.php 는 제출합니다.오류가 발생하지 않은 경우에 입력된 데이터에 제출,사용자 리디렉션 form_thanks.php.반격(그리고"Send"또는"다시 제출")한 번 다시 전송 form.php (나쁜!) 다음 그들을 돌아 form_thanks.php.

십시오을 포함한 솔루션을 포함하지 않는 세션을 사용하여 가능한 경우.

도움이 되었습니까?

해결책 2

이로 수행해야 단일 사용하여 토큰 또는 nonce.Php/server 이 포함되어야한 토큰에 숨겨진 형태다.

그것은 목록을 저장의 모든 토큰의 각 시간 양식이 제출해야하는지 확인하는 경우 토큰 목록에서의 최근의 유효합니다.

지 않는 경우에,목록에서 다음지 않아 다시 처리합니다.
면,목록에서 다음 프로세스의 형성과 제거에서 토큰을 목록입니다.

토큰을 처리할 수 있습 세션 내에서 또는 간단한 데이터베이스 테이블지 않고 세션이 있습니다.토큰을 해야 될 사용자별이지만.

이것은 또한 권장하는 방법을 피 CSRF 공격입니다.

다른 팁

나는 그것을 할 다른 방법이다.올 숨겨으로 입력되는 임의의 문자열 값으로,그리고 제출 스토어는 임의의 문자열에서 세션이 있습니다.간단한 설정을 확인하면 그들은 이미 게시고 만약 그들이 받아들이지 않은 입력이 있습니다.

다만 생각 여기에.에 대해 무엇을 가지고 있지만 변화에 post/redirect/얻을 곳에 마지막을 얻는 것은 실제로는 최종을 얻;)지만 오히려,그것은에 항상 자동으로 전달하여 진정한 최종 페이지,그래서 그 사용자가 뒤로 버튼을 누르십시오,그들은 다시 생겨난?

편집:

Ok,고려 OP 의 댓글을 다른 생각이 아니다.URL 을 형태로 제출 될 수 있을 만들 필요는 매개변수에 대한 좋은 단 하나의 사용입니다.는 토큰 것을 생성(사용하는 MD5 또는 이와 같은 일부)전에 양식을 제출하고 저장할 수 있는 데이터베이스에서(응답하여 다른 사람의 제안을 요청하는 솔루션을 사용하지 않고 세션).후 양식의 처리,토큰 이런 표시될 때 데이터베이스에서 이미 사용되었습니다.그래서 그 때 페이지를 반환하와 마찬가지로,하기 위한 조치를 취할 수 있습을 막을 다시 전송의 형태 데이터를 수 있습니다.

늦게 대답하지만,하나 피할 수 있었습니다 처리를 모두 사용하여 AJAX 기반의 솔루션;이 없을 것 문제를 포함하여 nonce 가진 이러한 처리 방식만을 사용하여 비동기는 쿼리에서,성공을 리디렉션이 사용자의 요청에 반복되지 않으로 상쾌한,다시 누르면,또는 다른 버튼을 클릭하면.

그것은 또한 쉽게 구현할 수 있는 메커니즘을 방지하는 버튼을 하나에서는 두 번 누르면 또는"잠"뭔가 일어난 경우는 동안 요청에 의해 포함하로 처리한 요청(인지 높은 수준으로 PrototypeJS 또는 jQuery 또는 낮은 수준으로 귀하의 handrolled 능)메커니즘을 사용하면 버튼을 요청이 완료되고 첫 번째 화재,각각합니다.

내가 찾는 다시 가져올 것이 형성하는 국가 이전 페이지로 리디렉션,하는 경우에는,숨겨진 입력/가변 또는 뭔가로 시작되는 가치 사실,다음 한 번의 양식이 제출되며,이 값을 사실,그것을 변경하 거짓고 다음을 제출하고,다른 사람 return false

이것을 보십시오:

<SCRIPT type="text/javascript">
    window.history.forward();
</SCRIPT>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top