<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