2012-03-09 2 views
2

Я пишу сайт на PHP. И у меня простая форма регистрации.Скрытый ввод (подтверждение формы html) - сценарий на стороне сервера? (php)

<form> 
<label...></label> <input .../> 
</form> 

Я хочу, чтобы добавить поле подтверждения:

<input type='hidden' name='hiddeninput' value="jn3kjnv3kjvn35"> 

Но как этот код взгляд на стороне сервера? Нужно ли сохранять каждое скрытое значение в базу данных при загрузке регистрационной формы?

Я стараюсь, чтобы форма не была заполнена ботами.

Вот почему мне нужно случайное скрытое значение, которое уникально для каждой подачи формы.

Предположим, что каждый раз, когда я создаю страницу регистрации, я генерирую уникальное значение для «скрытого» поля.

Когда пользователь отправляет форму - как сравнить представленное значение с тем, которое было создано (как только оно сгенерировано - оно не хранится нигде на сайте).

+0

Вам также нужно указать имена скрытых полей. – j08691

+0

«Нужно ли сохранять каждое скрытое значение в базу данных при загрузке регистрационной формы?» - Это зависит от того, что вы пытаетесь выполнить. –

ответ

0

я теперь использовать Ruby on Rails структуру, которая решает его из коробки.

+0

Это не ответ. Даже если вы начнете использовать другую структуру, если вы не обновите свой вопрос, это не соответствует поведению, чтобы пометить уже принятый ответ как нет и принять ваш собственный ответ. –

+0

Хорошо, мне хотелось бы, когда я искал ответ, кто-то действительно рассказал мне о Ruby on Rails. Из-за ответов, подобных вашим, я потратил много времени на чтение книг о всех возможных рамках, пока я наконец не нашел Rails. Что еще более важно, ваш ответ не соответствует конвенции MVC. Так что да. Я думаю, что когда люди читают этот вопрос, для них больше полезно знать, что они могут переключаться на Rails, а не следовать вашему ответу и пытаться изобретать колесо и вручную создавать токены CSRF. –

0

Вам также нужно добавить имя в поле. Он работает практически в любом другом поле HTML.

1

В основном вы должны использовать функцию, которая генерирует случайную строку (например, hash) и sessions, чтобы «запомнить» эту строку. Aftet, отправив форму, вы проверите значение INPUT и перекрестите его со значением SESSION.

Например:

form.php

<?php 
$hash = md5(time()); 
$_SESSION['form_xx'] = $hash; //in case you have more than one form. 
?> 
<form method='post' action='do.php'> 
.. 
.. 
<input type='hidden' name='secret_key' value='<?=$hash?>'> 
</form> 

do.php

if($_POST['secret_key'] == $_SESSION['form_xx']) //Just make sure your making the posted value SAFE 
//He's ok. 
else 
die("arggg...those hackers"); 
Смежные вопросы