Перейти к содержимому


Защита внешних форм от спама, остановка добавления данных

Спам

Сообщений в теме: 9

#1 Hamlo

    Участник

  • Пользователи
  • PipPip
  • 16 сообщений
  • Пол:Мужчина
  • Город:Молодечно

Отправлено 13 Сентябрь 2014 - 14:48

Простейшей спамилкой можно считать форму вида (получена прямо из кода страницы с пошаговым выполнением JavaScript, кнопку сабмита добавил я сам):
<form enctype="multipart/form-data" action="http://XXXXXX.clientbase.ru/questionare.php?page_charset=UTF-8&ts1410535141608"  method="post">
<input type="text" name="k_input_field_11_3821" value="Фио">
<input type="text" name="k_input_field_11_3881" value="12.09.2014">
<input type="text" name="k_input_field_11_4151" value="+37529467964">
<input type="text" name="k_rand_11" value="0.2639837335708092_1410535131728">
<input type="submit" value="ok">
</form>
Как видим добавлять записи можно не только через форму созданную в админке clientbase, но и прямыми запросами к странице http://XXXXXX.client...questionare.php, посмотрев код формы и как она генерируется, прекрасно видно что защита числами типа 0.2639837335708092_1410535131728 вовсе не защита, а так, отмазка... В общем для терпимой защиты нужно передавать секретное число которое спамер в коде страницы ну никак не найдет. И проверять это число перед добавлением данных в базу.
Теперь реализация этого на PHP (основной каркас, без валидаций и чисток, можно сюда добавить и капчу и прочие защиты, ведь данные теперь можно добавлять только с удаленного сайта):
// собираем данные из формы присланные POST запросом
$fio=$_POST["k_input_field_11_3821";// Фио
$phone=$_POST["k_input_field_11_4151"];// Телефон
$date=$_POST["k_input_field_11_3881"]; // Дата

// формируем код "Защиты" clientbase
$hash=time();
$hash1=$hash.rand(0,9).rand(0,9).rand(0,9); // три рэндома для имитации микросекунд
$hash2=(rand(1000000000000000, 9999999999999999)/10000000000000000).'_'.($hash-1).rand(0,9).rand(0,9).rand(0,9);
$post="k_input_field_11_3821=$fio&k_input_field_11_4151=$phone&k_input_field_11_3881=$date&k_rand_11=$hash2";

//  Наш секретный код
$sekretkey=546897231546;

//отправка запроса
if( $curl = curl_init() ) {
	curl_setopt($curl, CURLOPT_URL, 'http://XXXXXX.clientbase.ru/questionare.php?page_charset=UTF-8&ts'.$hash1);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
	curl_setopt($curl, CURLOPT_REFERER,$sekretkey); // передача секретного кода в HTTP_REFERER
	curl_setopt($curl, CURLOPT_POST, true);
	curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
	$out = curl_exec($curl);
	curl_close($curl);
}
Секретное число передаем всемто REFERER, его легко может подделать и спамер поэтому используем его в своих целях, REFERER отлично доходит до вычислений (как и другие серверные переменные).

Теперь вычисления в clientbase при добавлении данных в таблицу:
if($_SERVER['HTTP_REFERER']!==546897231546) data_delete($table, '`id`=', $line['ID']);

Вот и подошли в плотную к волнующему вопросу )
Пытался остановить добавление данных в вычислениях с помощью die(), редиректа, ну перепробывал все что в голову пришло и никак, помогло только удаление уже внесенных данных data_delete(), но это я бы сказал костыль.

Возможно есть системный флаг или еще какая тулза для остановки добавления данных?

Все что удалось найти на форуме это запреты добавления данных на JavaScript, но на мой взгляд это не запрет, а временное препятствие...

Сообщение отредактировал Hamlo: 14 Сентябрь 2014 - 00:43


#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 15 Сентябрь 2014 - 12:36

В документации по внешним формам написано же, что такой флаг есть, называется $event_cancel. Используется непосредственно в вычислении внешней формы.

http://clientbase.ru...nket/#calculate

#3 Hamlo

    Участник

  • Пользователи
  • PipPip
  • 16 сообщений
  • Пол:Мужчина
  • Город:Молодечно

Отправлено 15 Сентябрь 2014 - 14:01

Да, спасибки, уже сам вычитал (сами понимаете, читать некогда было когда база зарастала спамлистами)...

#4 bottrop

    Активный участник

  • Пользователи
  • PipPipPip
  • 153 сообщений
  • Пол:Мужчина
  • Город:Армавир

Отправлено 09 Март 2016 - 20:40

Добрый день.
Вопрос такой: есть Дополнительное действие "Документ", при нажатии на которое открывается файл документа в формате htm.
Само вычисление выглядит так:
echo "<script>location.href='".$config["site_root"]."/document.htm'</script>";
Вопрос: как сделать так, чтобы открывшийся документ нельзя было скачать/скопировать по нажатию правой кнопки или просмотреть код страницы?

В инете нашел скрипты запрещающие копирование и нажатие сочетаний типа Ctrl+C и других (вставлять между head), но не пойму как их нужно вставлять, чтобы запрет действовал только на этот документ при нажатии дополнительного действия.

Помогите разобраться. Спасибо заранее.

#5 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 10 Март 2016 - 09:15

Именно "при нажатии доп.действия" вы этого никак не сделаете. Запрет (если добавите) будет действовать при любом открытии документа.

Кстати, насколько я знаю, 100% защиты все равно не существует, ее не так сложно обойти при желании и минимальных знаниях.

#6 bottrop

    Активный участник

  • Пользователи
  • PipPipPip
  • 153 сообщений
  • Пол:Мужчина
  • Город:Армавир

Отправлено 10 Март 2016 - 09:46

Как сделать запрет при любом открытии документа?...или правильнее наверно при открытии любого документа или всплывающего окна в базе, верно?

#7 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 10 Март 2016 - 12:24

Так вы же сами написали "в инете нашел скрипты запрещающие копирование и нажатие сочетаний типа Ctrl+C и других"? Я так понял ко мне был вопрос только "как сделать чтобы запрет действовал только при нажатии дополнительного действия". Если же вопрос как именно сделать сам запрет, то я не специалист по этим вопросам, никогда этого не делал, да и не считаю это адекватной задачей.

#8 bottrop

    Активный участник

  • Пользователи
  • PipPipPip
  • 153 сообщений
  • Пол:Мужчина
  • Город:Армавир

Отправлено 10 Март 2016 - 16:25

Всё верно, вот скрипт:

<script type="text/javascript">
document.ondragstart = noselect;
// запрет на перетаскивание
document.onselectstart = noselect;
// запрет на выделение элементов страницы
document.oncontextmenu = noselect;
// запрет на выведение контекстного меню
function noselect() {return false;}
document.oncontextmenu;
function catchControlKeys(event){
var code=event.keyCode ? event.keyCode : event.which ? event.which : null;
if (event.ctrlKey){
// Ctrl+U
if (code == 117) return false;
if (code == 85) return false;
// Ctrl+C
if (code == 99) return false;
if (code == 67) return false;
// Ctrl+A
if (code == 97) return false;
if (code == 65) return false;
}
}
</script>

Его нужно вставить перед закрывающим тегом </head>.
А к тегу <body> добавить атрибут onkeypress=”return catchControlKeys(event)”..

Где в КБ находятся head и body? Куда вставить?

Также вопрос:
Как сделать запрет выделять контент при помощи CSS-стилей.
Для этого нужно указать для слоя, на котором размещается контент. Код следующий:

-moz-user-select: -moz-none;
-o-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
user-select: none;

Вопрос, где css искать?
Нужно чтобы все эти ограничения работали только для документов открываемых по нажатию Доп. действия.

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

Сообщение отредактировал bottrop: 10 Март 2016 - 16:27


#9 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 10 Март 2016 - 16:48

Цитата

Где в КБ находятся head и body? Куда вставить?

Причем тут КБ, не понял? Вы же пишете, что у вас открывается некий файл "document.htm". Этот файл как я понял ваш собственный и никакого отношения к КБ не имеет. В своем файле вы сами можете менять что угодно, и head и body и css. Все инструкции у вас уже есть.

Цитата

Насчет адекватности с вашей токи зрения понимаю, но для нас вопрос важный, так как воровство документов это факт, с которым пытаемся бороться

От воровства документа в сети есть только один надежный вариант - не показывать документ. Никакой другой способ не будет нормально работать. По крайней мере по моим данным.

#10 bottrop

    Активный участник

  • Пользователи
  • PipPipPip
  • 153 сообщений
  • Пол:Мужчина
  • Город:Армавир

Отправлено 10 Март 2016 - 19:00

Понял, спасибо за коммент.





Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных