Jump to content

Нужна форма обратной связи


dron
 Share

Recommended Posts

Добрый день. Не сложная работа для специалиста. Нужна простая форма обратной связи, 2 поля, без обновления страницы, с защитой от спама. Типа вот такой: https://webriz.ru/55-zaschita-ot-spama-php-formy-otpravki-dannyh.html

Только нужно чтобы форма была в html файле, а сам скрипт в отдельном js файле.

Плачу 200 руб на карту.

Link to comment
Share on other sites

У меня есть свой авторский метод защиты, нигде не прочитал, придумал сам, без использования переменной $_GET, только одно скрытое поле. Скрытое поле хранит зашифрованную информацию об ip пользователя и времени когда он открыл форму. Далее, пользователь заполняет форму, посылает ответ, на сервере проверяется 1) что ip совпадает 2) что от отрытия формы до ее отправки прошло допустимое время.

Не используется md5 либо другие библиотечные методы шифрования, все сделано вручную. Стойкость - криптоаналитик взломать сможет, спаммер - нет (даже если постарается, чего он делать конечно же не будет).

Только вот не понятно, как вы предполагаете из html файла вызвать код на PHP? Саму форму и код проверки можно разнести в разные файлы, но они оба будут php (хотя для пользователся можно сделать видимость html через .htaccess)

Link to comment
Share on other sites

  • 3 weeks later...

Ну ладно, раз никто 200 рублей на карточку перевести не хочет, берите на халяву, не жалко.

function rgl_mul64($a,$b) {
  for($i=0;$i<8;++$i)$c[$i]=$a[$i]*$b[0];
  for($j=1;$j<8;++$j)for($i=$j;$i<8;++$i )$c[$i] += $a[$i-$j]*$b[$j];
  for($i=0;$i<7;++$i){$c[$i+1]+=$c[$i]>>8;$c[$i]&= 255;}$c[7]&=255;
  return $c;
}

function rgl_cript64($x) {
  $a=Array(157,254,1,223,3,31,128,196);$b=Array(181,119,108,44,75,245,179,97);
  return rgl_mul64($b,array_reverse(rgl_mul64($x,$a)));
}

function to_hidden_string($ip,$time) {
  $t=rgl_cript64(explode('.',$ip.'.'.long2ip($time)));
  return sprintf( '%02X%02X%02X%02X%02X%02X%02X%02X',$t[0],$t[1],$t[2],$t[3],$t[4],$t[5],$t[6],$t[7]);
}

function from_hidden_string($s) {
  if(gettype($s)!='string'||strlen($s)!=16||preg_match('/[^\dA-F]/',$s)) return false;
  $t=rgl_cript64(sscanf($s,'%02X%02X%02X%02X%02X%02X%02X%02X'));
  return Array(join(array_slice($t,0,4),'.'),ip2long(join(array_slice($t,4),'.')));
}

Примечания:

1. Т.к. писалось для себя, комментариев нет (я и так слету все пойму хоть через 10 лет, а большинству и комментарии не помогут). Потому что я не только написал код, но придумал алгоритм.

2. Если функцию rgl_cript64 планируется вызывать более одного раза, возможно, есть смысл два массивчика $a и $b вынести в глобальное пространство, чтобы один раз.

3. Собственно числа в массиве $a и $b можно (и нужно) поменять, это как пароль, его должен знать только тот, кто форму пишет. Числа, разумеется, могут быть не  любыми, но в одном из массивов они могут быть почти любыми (есть минимальное ограничение), ну а второй должен быть подобран к первому. За подробностями в личку.

4. Функция rgl_cript64 одна и в ту и в другую сторону, можно сделать две, тогда понадобятся два комплекта из двух массивов ключевых чисел, попарно подогнанные. Кто-то может думать, что это повысит защищенность, я уверен что и так более чем достаточно.

5. Функция to_hidden_string принимает на вход IP клиента и момент времени (напр time() или $_SERVER['REQUEST_TIME'], кому как нравится) когда он запросил форму. Функция from_hidden_string вызывается уже когда клиент заполнил форму и отправил ее. Она обратно извлекает IP и момент времени. Далее можно проверить что IP совпадает а время в допустимых пределах (скажем, прошло не больше часа, можно и не больше суток).

6. Если в скрытой строке изменить хотя бы один любой  битик, весь результат меняется непредсказуемым образом (непредсказуемым для человека, не знающего алгоритм или даже двух ключевых массивчиков).

Link to comment
Share on other sites

Первых двух функций достаточно для "шифрования" 64-битного числа, ну или массива из 8 байтов (чисел от 0 до 255). Стойкость к взлому более чем достаточная для защиты от спама, но для действительно серьезных вещей - нет. Главное достоинство - если язык не PHP а C на 64 битной операционке (а именно так он изначально и придуман), то его быстрота, ресурсов тратится несравненно меньше, чем на полноценное шифрование, т.к. фунция mul64 превращается в одну операцию умножения.

Также, md5 можно использовать на данных любого размера, никаких ограничений, моя же функция принимает данных строго 64 бита. Можно легко переделать и для бОльшего, но не сильно бОльшего, и в любом случае это будет фиксированный размер.

Edited by rgl
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy