seo-блог

SEO-блог Остров МЫСЛЕЙ: сео (поисковая оптимизация), монетизация и раскрутка сайта, ресурсы сети.

В избранное :: В загрузку :: В печать
Bookmark and Share

Защищаем авторский скрипт на php: генератор случайных паролей, привязанных к имени домена сайта, заданной длины




#208 Programming.  Защищаем авторский скрипт на php: генератор случайных паролей, привязанных к имени домена сайта, заданной длины

С самого начала, когда начал писать модуль для ДЛЕ – IsleMap, заинтересовала сначала статистика (кто поставил модуль, что на нем включил или выключил и т.д.), но потом также стала волновать его защита, чтоб все функции версии "Ультимат" были доступны только покупателям. Конечно же нет идеальной защиты, но простенькая защита, так сказать "защита от дурака" нужна обязательно, что просто элементарно не остаться вовсе без гонорара, ведь в нашем обществе не принято просить и тем более предлагать пожертвованиия.

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

Как правило, многие используют такое шифрование паролей для своих скриптов:

$key = 'islepoemru';
echo md5($key).'<br />';
echo base64_encode($key);

Кто-то чуток посложней, например, чтоб пароль сложней было подобрать, используют, например, текущую дату и/или секретное слово:

$psw = eval(gzinflate(base64_decode());
$key = md5($domain.$SecretWord);
$key = md5($date,$domen,$SecretWord);
$key = eval(gzinflate(base64_decode($str)));
$password = substr(md5(md5($key.$SecretWord.$site)),$start,$count);

Кто-то "зипует" и/или "раздувает" пароль до N символов:

$compressed = gzdeflate('Compress me',9);
$uncompressed = gzinflate($compressed);
echo $uncompressed;

В общем, вариантов много и все они имеют свои недостатки и преимущеста, так, например, пароль, зашифрованный base64_encode($str) легко расшифровать обратно base64_decode($str). То есть такая защита спасет на 5 минут и то, если человек, купивший (скачавший) скрипт не знает язык программирования, на котором написан сам скрипт.

Защит паролей придуманно очень много, всего их в паблике (свободном доступе) около полусотни (точно не подсчитывал). Список наиболее распространенных доступных алгоритмов инкриптеров/декриптеров (шифрование) и кодировщиков/раскодировщиков (кодирование) приведен ниже.

Шифрование от кодирования отличается тем, что нет необходимости скрывать источник (например, пароль), а нужно просто перевести слово на другой "язык"; при необходимости можно выполнить обратное действие, вот основные форматы: ASCSII, Binary, Base 64, Hex, Caesar Bruteforce. Наиболее полный список форматов:

•ASCII to Binary, Binary to ASCII, ASCII to Hex, Hex to ASCII, Binary to Hex, Hex to Binary, Backwards,
•Base 64 (Encode, Decode), Caesar Bruteforce, DES Crypt (one way),
•HTML Entities (Encode, Decode),
•l33t 5p34k 3nc0d3, l33t 5p34k d3c0d3, MD2, MD4, MD5 Crypt (one way), Igpay Atinlay, Un-Pig Latin, ROT-13,
•URL (Encode, Decode), SHA-1,
•SHA-1, SHA256, SHA384, SHA512,
•ripemd128, ripemd160, ripemd256, ripemd320, whirlpool, snefru, gost, adler32, crc32, crc32b.

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

Защищаем авторский скрипт на PHP: генератор случайных паролей, привязанных к имени домена сайта, заданной длины.

$psw_sign_num = 16; #Максимальное количество символов в пароле.
$psw_sign_max = 16; #Максимальное количество символов в имени домена.
$psw_sign_min = 6;  #Минимальное количество символов в имени домена.
$psw_sign_div = 4;  #На сколько равных частей делим пароль.
$psw_sign_ins = '–';#Символ разделения равных частей пароля.
$psw_sign_token = 0; #0 – letter &amp; digit; 1 – letter; 2 – digit.
$psw_word = 'zgr'; #Кодовое слово, например, ник, желательно не более 5-8 символов.
$psw_digit = range(0,9); #Цифры, добавляемые к паролю: 0,1,2,...

$domen = $_SERVER['HTTP_HOST']; #Имя домена для пароля.
#Удаляем весь "мусор", кроме латинских букв в имени домена.
$str = str_replace(array('www.','–','_','+'),'',$domen);
#Всего около 400 типов доменов, основных – около 250.
$str = str_replace(array('.ru','.ua','.net','.com'),'',$str);
$str = str_replace('.','',$str); #Удаляем ненужные символы.
#Удаляем цифры, если они есть.
if (strlen($str)&gt;=$psw_sign_max)
 $str = srt_replace(array('0','1','2','3','4','5','6','7','8','9'),'',$str);

if (strlen($str)&gt;=$psw_sign_max) {
 #Получаем: Array([0]=>i,[1]=>s,[2]=>l,[3]=>e,[4]=>p,[5]=>o,[6]=>e,[7]=>m).
 $arr = str_split($str);
 $duplicates = array_unique(array_diff($arr,array_unique($arr)));
 $unique = array_unique($arr);
 unset($arr);
 #Создадим массив уникальных букв из имени домена.
 $arr = array_merge($duplicates,$unique);
 #Создадим новую переменную для генерации пароля.
 $str = implode('',$arr);
 #Удалим промежуточные вычисления.
 unset($arr,$duplicates,$unique);
}
$len = strlen($str) + strlen($psw_word);
#Добавляем секретное слово, если есть свободное место в пароле.
if ($len&lt;=$psw_sign_max) $str .= $psw_word;
$len = strlen($str);
while($len&lt;$psw_sign_max) {
 foreach($psw_digit as $i) {
 $len = strlen($str);
 if ($len&lt;$psw_sign_max) $str .= "$i";
 }
}
#Получаем: islepoemzgr01234.
$len = strlen($str);
$arr = str_split($str);
#Перемешиваем массив символов пароля в случайном порядке.
shuffle($arr); #Получаем: 1z04ol3espermg2i.
$str = strtoupper(implode('',$arr));
$psw = ''; $len = strlen($str);
$d1 = 0; $d2 = $psw_sign_div – $len;
for ($i=0;$i&lt;$psw_sign_div;$i++) {
 $psw .= substr($str,$d1,$d2).$psw_sign_ins;
 $d1 += $psw_sign_div; $d2 = $d2 + $psw_sign_div;
 if ($d2==0) $d2 = $psw_sign_div;
}
#Удаляем последний разделитель пароля.
$psw = substr($psw,0,strlen($psw) – strlen($psw_sign_ins));
echo $psw; #Получаем: 1Z04–OL3E–SPER–MG2I

Ну вот, теперь мы получили простенький, но вполне эффективный случайный пароль 1Z04–OL3E–SPER–MG2I, зависимый от имени домена сайта, т.е. под другой домен будет генерироваться совершенно другой случайный завязанный пароль. Текущий генератор случайных паролей заданной длины с привязкой к домену всего лишь пример того, что можно сделать, если же хочется запутать и обезопасить пароль еще больше, то можно, например, указать конкретный набор цифр, а не перечислять все от 0 до 9. Цифры добавлять можно разные и затем делать проверку только на наличие конкретных чисел или какой-то их диапазон, например, от 1 до 3, если диапазон превышен, значит, пароль не верен.

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

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

Расшифровка пароля на стороне клиента и его постоянная сверка при вызове определенных функций или через определенный промежуток времени аналогичен: создаем пароль, вернее, создаем аналогичный набор символов, который входят в наш пароль, а затем методом последовательных исключений проверяем сначала правила формирования последовательности символов (например, нахождение в пароле только определенных цифр), если последовательность символов верна, то взаимоисключаем из массивов одинаковые символы, вот и все: если нет остатка, то пароль верен, можно продолжать выполнение скрипта дальше. Ну все, успехов в защите своих скриптов!

Нашли ошибки, знаете больше? - Пишите, исправим и дополним.


Другие статьи по теме seo (оптимизация), монетизации и раскрутке:

Просмотров: 1,410
Комментариев: Комментарии (2)
Опубликованно: Четверг, Июль 22nd, 2010 в 15:12
Обновлено: 22 Июль 2010 в 15:22.
Директории: Programming
Автор: admin, все авторы.


В статье: 934 слов. Ссылки на странице.
Bookmark and Share
УжасноПлохоНормальноХорошоОтлично
(голоса: 1, оценка: 3.00 из 5)
Источник: http://isle-blog.ru/programming/safeguard-script-php/


Понравилась статья? - Не пропустите следующую, подпишитесь на RSS-канал[?], e-mail или читайте блог Остров МЫСЛЕЙ через Яндекс.Ленту или Google.Reader.

Также Вы можете оставить комментарий, или trackback[?] на Вашем сайте.
На эту статью ссылаются:



Эту статью находят по поисковым запросам:
Оставьте свой комментарий на seo-блоге Остров МЫСЛЕЙ
Нам важно Ваше мнение. (Комментарии (2))
Grigoriy пишет:
Октябрь 9th, 2010 Комментариев: 1
#1

Не задействовано в скрипте

$psw_sign_token

Очень прошу, приведите пример вариантов обратной расшифровки пароля на стороне клиента.

admin пишет:
Октябрь 10th, 2010 Комментариев: 77
#2

Вы не до конца уловили мысль топика, пример которого очень приметивен, но действенен в простых ситуациях. На самом деле пароль, если генерируется, то он уже не расшифровывается, пароль просто проверяется по шаблону и, если шаблон совпадает, то пароль подтверждается скриптом и скрипт работает. Если как-либо генерировать пароль нет надобности, то «жесткая» последовательность символов просто «вшивается» на сервере и в скрипте клиента.

Указанный пароль в топике используется как генератор на стороне клиента, так и на стороне сервера, проверяется по шаблону, если всё ок, то передается на сервер, там аналогично генерируется, сверяется с шаблоном и уже жестко прописывается в БД, т.е. более не меняется, поэтому обновление будет получать только тот клиент, у которого шаблон пароля похож и пароль соответствует паролю, сохраненному на сервере при передаче во время регистрации скрипта.

Надеюсь, доступно пояснил, если не понятно все равно, стучите в асю, объясню подробней.



RSS-канал[?] комментариев данной статьи или всего блога Остров МЫСЛЕЙ.
Для установки аватара (фотография комментатора) используйте gravatar!
Оставляя комментарий, Вы соглашаетесь с правилами комментирования.

Прокомментировать

XHTML-теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

символов осталось из 2000.

Trackbacks

    Пример: SEO, PageRank, ТИЦ, Search.
    banner banner banner
    Рекламный блок РБ3 (360x60 или 125х125 пх). Здесь может быть Ваша реклама (текст, ссылки, баннеры) - сквозная прямая ссылка на всех страницах всего за 40 $/мес. Подробности по размещению рекламы в блоге Остров МЫСЛЕЙ: 463768885, zgr@bk.ru...
    Май 2013
    Пн Вт Ср Чт Пт Сб Вс
    « Июл    
     12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
    advertising На этом месте могла
    быть Ваша реклама.
    advertising На этом месте могла
    быть Ваша реклама.
    advertising На этом месте могла
    быть Ваша реклама.
    Регистрация в блоге:

    Частые комментаторы:

    gravatar Марина
    Комментариев: 13
    Сайт: biznes-mesto.ru
    gravatar Олли
    Комментариев: 13
    Сайт: zhenskayalogika.ru
    gravatar Alex
    Комментариев: 8
    Сайт: blog.xx-web.ru
    gravatar Елена
    Комментариев: 8
    Сайт: Ru-party.ru/blogg
    gravatar Светлана Бобровская
    Комментариев: 6
    Сайт: vseuch.ru
    Пользователи:

    Администраторы: 1 (admin)
    Редакторы: 1 (admin)
    Авторы: 1 (admin)
    Публикаторы: 1 (admin)
    Зарегистрировано: 1
    Всего пользователей: 53

    Авторы:

  • admin 1 (78)

  • Статистика блога:

    Предложить работу:

    Обратная связь:

    gravatar Блогер-сеошник, веду сайты: Остров ПОЭЗЫ, Остров УСЛУГ, Остров ЛИТЕРАТУРЫ. Это техническая страница, более подробно обо мне смотрите здесь.Также приглашаю заглянуть в раздел О блоге и посетить личный блог.

    Autor: Зайва Игорь Леонидович

    E-mail: zgr@bk.ru

    ICQ: 463-768-885

    Reserve:

    Reserve:

    Рейтинг@Mail.ru Рейтинг блогов Rambler's Top100
    Также читайте раздел: Блогосфера.

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

    Блогролл:

    Пока пусто, но Вы можете предложить свой тематический ресурс.
    Я.ру
    Мой мир
    Мой круг
    Мир тесен
    Моя Опера
    В контакте
    В одноклассниках
    topics
    RT @RusBase: Всероссийская база данных населения http://t.co/JT9Bs9Eu 2012-02-13
    • RT @RusBase: Всероссийская база данных населения http://t.co/JT9Bs9Eu 2012-02-13
    • RT @nepenucb: Архив переписи населения теперь в общем доступе. В нём есть и ты! Бесплатный сервис поиска на http://t.co/PzmiowL7 2012-02-06
    • RT @bazapoiska: Бесплатный поиск информации о любом человеке http://t.co/siZpIVtm 2012-01-30
    • RT @adam00011: Не можете победить лишний вес? Перестаньте кушать ЭТО http://t.co/oZicB7eZ 2012-01-27
    • RT @adam00011: Национальный поиск данных http://t.co/jAuF6N7F 2012-01-26
    • More updates...

    Posting tweet...

    Nahaa.ru
    SetLinks.ru
    linkfeed.ru
    Uniplace.ru

    Sape.ru

    ProfitBlog.ru
    j2j.ru

    1ps.ru
    Regone.ru
    Seopult.ru
    Все партнеры seo-блога Остров МЫСЛЕЙ. Также читайте статью Монетизация сайта: биржи статей и ссылок, а также статью Прогон сайта; бесплатная регистрирация.
    Последние комментарии:
  • Трекбеки и пингбеки:
  • Умные деньги: Законы блогосферы | Честный бизнес
  • Эстафета продолжается в статьях и комментариях.: Это уже позже я прочитала на блоге Игоря статью “Акции,...
  • Блог Береза Владимира: Алгоритм Google или определяем PR
  • Анонс лучших статей блогосферы: КАРТА САЙТА И БРЕДОСАЙТЫ: ХИТРОСТИ И ЭФФЕКТИВНОСТЬ.


  • Бэклинки (внешние ссылки):


    Статистика ссылок
    Яндекс: 0, Гугл: 0, Яху: 0.
    Самые любимые статьи:

    Использование материалов разрешено только при указании источника.
    Подписаться на рассылку RSS всего блога или только комментариев.
    Блог рожден: 1. 10. 2008, живет: 4 года, 7 мес. и 19 дней.
    SEO-блог Остров МЫСЛЕЙ работает на WordPress
    Copyright © 2008-2013 isle-blog.ru PageRank
    Республика Казахстан, Алматы
    Widgetize!

    seo
    Этот домен продается на telderi