rgl

Пользователь
  • Публикации

    97
  • Зарегистрирован

  • Посещение

Репутация

0 Обычная

О rgl

  • Звание
    Участник

Информация

  • Пол
    Мужчина

Посетители профиля

1 863 просмотра профиля
  1. Первых двух функций достаточно для "шифрования" 64-битного числа, ну или массива из 8 байтов (чисел от 0 до 255). Стойкость к взлому более чем достаточная для защиты от спама, но для действительно серьезных вещей - нет. Главное достоинство - если язык не PHP а C на 64 битной операционке (а именно так он изначально и придуман), то его быстрота, ресурсов тратится несравненно меньше, чем на полноценное шифрование, т.к. фунция mul64 превращается в одну операцию умножения. Также, md5 можно использовать на данных любого размера, никаких ограничений, моя же функция принимает данных строго 64 бита. Можно легко переделать и для бОльшего, но не сильно бОльшего, и в любом случае это будет фиксированный размер.
  2. Ну ладно, раз никто 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. Если в скрытой строке изменить хотя бы один любой битик, весь результат меняется непредсказуемым образом (непредсказуемым для человека, не знающего алгоритм или даже двух ключевых массивчиков).
  3. Смотрите, проверяйте: http://dkirusfe.bget.ru/antispam_form.php
  4. У меня есть свой авторский метод защиты, нигде не прочитал, придумал сам, без использования переменной $_GET, только одно скрытое поле. Скрытое поле хранит зашифрованную информацию об ip пользователя и времени когда он открыл форму. Далее, пользователь заполняет форму, посылает ответ, на сервере проверяется 1) что ip совпадает 2) что от отрытия формы до ее отправки прошло допустимое время. Не используется md5 либо другие библиотечные методы шифрования, все сделано вручную. Стойкость - криптоаналитик взломать сможет, спаммер - нет (даже если постарается, чего он делать конечно же не будет). Только вот не понятно, как вы предполагаете из html файла вызвать код на PHP? Саму форму и код проверки можно разнести в разные файлы, но они оба будут php (хотя для пользователся можно сделать видимость html через .htaccess)
  5. Нужно сделать кнопку "поделиться картинкой в контакте" Простейший вариант <a href="https://vk.com/share.php?url=сайт/папка/картинка.png">поделиться</a> работает, но подписывает картинку "картинка.png" а хочется свой текст (ну да, тот, кто делится, может свой текст добавить, но он этого не делает) Штатный вконтактовский код https://vk.com/dev/Share НЕ работает. Причина проблемы, по-видимому вот в чем - страничка, на которой надодится (должна находится) кнопка, находится не на сайте, где сама картинка, а может вообще быть на локальном компьютере (по протоколу file://) Можно ли в ссылку добавить какой-то еще параметр (кроме url) который подскажет желательный текст? Ответ нашел, вопрос снимается.
  6. Что-то не заметил никакого js, там вроде все на PHP?
  7. То, что я искал - функция GREATEST
  8. Такая, казалось бы простая задача ставит в тупик. Есть таблица, в ней есть в т.ч. 8 интересующих полей. Нужно написать select который из каждой строчки выбирает максимальное значение из этих восьми полей. Было бы два поля, использовал бы case но выбрать из восьми - это же огромное количество вложенных кейсов получается
  9. rgl

    PHP кэш в файле, синхронизация обновления

    Похоже, нашел что искал. Буду пробовать, проверять. http://www.pvsm.ru/php-2/12115
  10. rgl

    Смена get параметра ссылки при обновлении страницы

    echo '<a href="http://site.ru/page.html?ver='.rand(100,999).'">click here</a>'; # так?
  11. rgl

    PHP кэш в файле, синхронизация обновления

    Первый запустился, файла не нашел, создает, но ДО ТОГО как он это успел, запустился второй, и тоже файла не нашел, конфликт получается. Как бы второму узнать, что первый уже задачей озаботился, и надо лишь чуток подождать? "если файл найден", "если файл не найден" - а если при запуске скрипта файл еще не найден, т.к. предыдущая инкарнация, запущенная чуток раньше, тоже файла не нашла но уже приготовилась его создавать? И поэтому, хоть и не найден, надо не создавать а чуток подождать? Вот именно на этот вопрос я и ищу ответ, увы, пока безуспешно. Есть такие страшные слова "race condition" и это то, от чего я хочу надежно, 100%-но предохраниться...
  12. Есть некий php-скрипт, который делает довольно ресурсозатратную работу (рисует картинку - график по данным). Чтобы это дело оптимизировать, хочется результат работы закэшировать, т.е. просто записать в файл чтобы при последующих запросах отдавать готовый результат. Но данные через некоторое время устаревают, т.е. кэш нужно обновлять. Вопрос - как это сделать безопасно? Т.е. вот вызвали скрипт, он понял что пора бы кэш обновить, сделал что надо, и вернул пользователю результат, но что если параллельно с ним кто-то еще вызовет тот же скрипт, и как ему понять, что кэш уже обновляют, все, что надо, это подождать секунду? Удивительно, но все попытки найти ответ в гугле ничего не дали.
  13. Скопировал часть таблицы к себе на компьютер, на тестовую базу, чтобы поинраться. Вот результаты: 1. Вариант без создания временной таблицы, работает правильно, но с увеличением размера время растет невероятно быстро. На рабочем сервере даже думать нельзя такое запускать. 2. Вариант с временной таблицей несравненно шустрее, т.е. вполне ничего
  14. 1. Первичный ключ хороший, но предлагаю не спорить на эту тему (нужно ли всегда добавлять поле id, которое в некоторых книжках называют "суррогатным ключом"). Единственное, что плохо, это имя поля TIME, совпадающее с зарезервированным словом. 2. Записи из таблицы не удалаются. 3. Добавлять дельты, или делать что-либо с этой таблицей не хочу, т.к. это для работы (нормальной) не нужно, а только для решений внештатных ситуаций. 4. Что такое "итератор ключа" я не знаю, я только начинаю осваивать SQL. Хочется понять, можно ли не меняя имеющуюся таблицу сделать запрос, чтобы получить дельты. Я вижу только два варианта 1. Создать временную таблицу для этой задачи, которую потом дропнуть. 2. Вывести данные в текстовый файл, и дальше уже скриптовым языком независимо от базы найти что хочется.
  15. MySQL Есть таблица, поле первичный ключ типа datetime, остальные поля не важны. В таблице ок. 5 млн записей. Обычно записи следуют одна за другой с интервалом 1 минута, как-то так: Нужно найти в этой таблице "провалы во времени", т.е. места, гда промежуток времени между соседними записями больше заданной величины. Все, что сам я смог придумать, так это создать временную таблицу с полем id AUTO_INCREMENTи полем datetime, скопировать в нее, а затем сделать запрос из нее со джоином на себя же, по условию t1.id+1 = t2.id А можно ли без создания временной таблицы?