그래서 당신은 뭔가 같은 ...
<form action="wtv.php" method="POST">
<input type="hidden" name="date" value="<?php echo date('l jS \of F Y h:i:s A'); ?>" />
<input type="submit" />
</form>
... 사용자가 클릭 할 때 '일'입력의 값이 30 초 미만 전부터 있는지 확인하려면 '제출'?
Ken Keenan이 제시 한 것과 같은 방식으로이 작업을 수행 할 수 있지만 문제는 클라이언트 입력을 신뢰할 수 없다는 것입니다. jeroen의 대답에 대한 귀하의 의견에서 클라이언트 스크립팅이 신뢰할 수 없다는 인식을 나타내지 만 스크립팅에만 국한되지 않습니다. 어떤 사람도 <form>
을 요청한 후 30 초 이상이 양식을 제출할 수 없도록 보안이 실제로 필요한 경우 다른 작업을해야합니다.
문제는 서버가 "날짜"입력을 예상하는 것이 예측 가능하다는 것입니다. <form>
을 방문하여 Firebug을 열거 나 HTML 문서를 저장하고 메모장에서 열어 보면 제출할 수 있도록 <input />
을 쉽게 업데이트하는 방법을 추측 할 수 있습니다.
대신 토큰을 사용하십시오.
무작위 임의의 고유 한 ID의 종류를 생성하고 세션 또는 데이터베이스에 저장이 ...
$unique = md5(uniqid()).md5(time()); // there are better ways to get a unique random ID
$_SESSION['tokens'][$unique] = time();
그런 다음
토큰 (안 날짜/시간을!) 포함
<form>
에. ..
<form action="wtv.php" method="POST">
<input type="hidden" name="token" value="<?php echo htmlentities($unique); ?>" />
<input type="submit" />
</form>
... 제출시 해당 토큰의 시간이 30 초 미만인지 확인하십시오.
<?php
// partially borrowed from Ken Keenan's answer...
if((time() - $_SESSION['tokens'][$_POST['token']]) > 30) {
echo "Time's up!";
}
?>
안녕하세요, 저는 문법을 변경했습니다. 그 질문이 여전히 당신의 요구를 대표하는지 알려주세요. –
ok ok .. – DomingoSL