Sign in to follow this  
dron

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

Recommended Posts

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

Ну ладно, раз никто 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. Если в скрытой строке изменить хотя бы один любой  битик, весь результат меняется непредсказуемым образом (непредсказуемым для человека, не знающего алгоритм или даже двух ключевых массивчиков).

Share this post


Link to post
Share on other sites

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

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

Edited by rgl

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Member Statistics

    46,389
    Total Members
    3,128
    Most Online
    Неугомонный
    Newest Member
    Неугомонный
    Joined
  • Recently Browsing   0 members

    No registered users viewing this page.



  • Спрашивают сейчас

  • Пишут сейчас

    • https://jsfiddle.net/q2Lfaew5/2/ Пытаюсь добавить иконку к ссылке. Казалось бы, довольно простая задача, но есть несколько условностей, из-за которых пока ничего не получается. 1) Текст должен быть inline-элементом. Для того, чтобы к каждой строке применялась граница, и пустота в них была не кликабельной (как в первом примере). 2) Иконка всегда должна быть вертикально отцентрированная. Реально ли это сделать?
    • Здравствуйте. Почему в этом примере https://jsfiddle.net/pk2rgj3o/4/ в IE11 не срабатывает max-width для изображения? Мне нужно, чтобы фото не выходило за пределы родителя, при этом его ширина и ширина flex-item оставались автоматическими. В данный момент я нашел два решения этой проблемы: 1) width: 100% для фото и 2) flex: 1 для flex-item, но они оба не подходят.
    • Задаю контенту фиксированную высоту, но все равно он под футером. Вы не знаете, лучше оставить высоту футера auto?   <main class="project">
          
          <div class="blog-container">
              <div class="blog-header">
                  <div class="blog-cover">
                      
                  </div>
              </div>
              <div class="blog-body">
                  <div class="blog-title">
                      <h1><a href="#">Lorem ipsum dolor sit amet</a></h1>
                  </div>
                  <div class="blog-text"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Neque sapiente quae enim eius sit ratione doloremque, non quo, quaerat soluta sint aspernatur nostrum doloribus dolor perferendis saepe numquam molestiae rerum. Iusto explicabo molestias cumque expedita officia repellendus excepturi vitae iure.</p>
                  </div>
                  <div class="blog-tags">
                      <ul>
                          <li><a href="#">Lorem</a></li>
                          <li><a href="#">ipsum</a></li>
                          <li><a href="#">dolar</a></li>
                          <li><a href="#">consectetur</a></li>
                      </ul>
                  </div>
              </div>
              <div class="blog-footer">
                  <ul>
                      <li class="published-date">4 days ago</li>
                  </ul>
              </div>
          </div>     
      </main> <footer>
          
      <nav>
          
      <a href="index.html">HOME</a>
                      <a href="projects.html">PROJECTS</a>
                      <a href="blog.html">BLOG</a>
                      <a href="contact.html">CONTACT</a>
                      <a href="about.html">ABOUT</a>
                      <a href="services.html">SEVICES</a>
                      <a href="location.html">LOCATION</a>
                       </nav>
      <div class="logo">
          <a href="index.html"><img class="graphiclogo" src="logo.png" alt="logo"></a>
      </div>
      <div class="social">
          <a href="#"><img src="img/social/em.png" alt="em"></a>
          <a href="#"><img src="img/social/face.png" alt="em"></a>
          <a href="#"><img src="img/social/goo.png" alt="em"></a>
          <a href="#"><img src="img/social/inst.png" alt="em"></a>
          <a href="#"><img src="img/social/pint.png" alt="em"></a> </div> <p>Version 2019</p>
      </footer>
          <script src="js/script.js"></script>
      </body>                     .blog-container {
          background: #fafafa;
          border-radius: 5px;
          box-shadow: rgba(0,0,0,0.2) 0 4px 2px -2px;
          font-weight: 100;
          margin: 48px auto;
          margin-bottom: 100px;
          width: 50rem;
          height: 20px; } footer {
          width: 100%;
          height: auto;
          background: black;
          margin: 0 auto;
          text-align: center;
          padding-top: 25px;
          position:absolute; 
          bottom:0
      }
  • Popular Contributors