Существует много способов оптимизации сайта под поисковые системы. Будь то составление семантического ядра сайта, правильная расстановка тегов, мета тегов, ключевых слов, регистрация в каталогах, а также проставление внешних линков с уважаемых ресурсов. Но всё это не важно для правильного поисковика, ведь основное внимание уделяется контенту. Причём, чем контент уникальнее, тем выше место сайта в серпе.
Если у вас супер оптимизированный ресурс с натыренным со всей сети контентом, то грош цена всей этой оптимизации. Нет, конечно, вы получите свою долю поискового трафика, и можно даже добиться того, что позиция вашего сайта в серпе будет выше источников, непосредственно, вашего контента, но это сложно и долго.
А чтобы появляться в топе поисковой выдачи, надо иметь на своём сайте уникальный контент, и чем больше, тем лучше. А где его взять? Вот об этом сегодня и речь. Ничего палить не буду, всё уже спалено до нас, просто обобщу и структурирую известные мне способы добычи уникального контента.
Конечно же, первое, что приходит на ум - писать контент самому. Но вряд ли кому-то захочется сидеть часами за компом и набирать тысячи самых разных слов, местами объединённых общим смыслом. Причём должно ещё читабельно и понятно получиться, а то не удержите посетителей на сайте. Конечно есть такие ребята, которые получают неимоверный кайф от творения креатива тоннами, но большинство вебмастеров интернета, к своему несчастью, даже фантазию имеют скудную, не то что там, статьи писать.
Сюда же относится и свободная перепечатка статей. Есть наиболее удачный вариант, когда вы пишете короткую рецензию на какую-нибудь длинную и занудную статью, тогда люди предпочтут прочитать именно ваш текст. Но это опять же нужно сидеть и писать, тратить время.
Генерировать уникальный контент автоматически, пользуясь алгоритмом цепей Маркова. Суть такова: берётся исходный текст килобайт на 200-300 (а можно и больше, зависит от целей), этот текст разбивается на фразы длины от 2х до 5ти слов, причём последнее слово в первой фразе становится первым во второй, и т.д. Далее каждому уникальному слову из текста сопоставляется набор фраз, начинающихся на это слово, и, таким образом, получается двумерый массив, из которого мы будем выбирать случайным образом слово, затем одну из соответствующих ему фраз, затем снова слово - то, на которое фраза заканчивается. Не забываем проставлять знаки препинания, чтобы текст показался поисковым ботам наиболее правдоподобным. Подмешиваем в текст ключевые слова, и получаем полностью уникальный текст для поисковой системы, содержащий в себе, кроме всего прочего, необходимые кейворды. Подробнее алгоритм опишу позже, и пример тоже покажу.
Переводить веб-страницы, пользуясь гугл-переводчиком. Ребята из гугла как-то признались, что бот считает текст одного сайта, переведённый на другой язык, совершенно уникальным. Правда перевод получится пиратский (но явно качественнее, чем промтовый), и нормальные юзеры врядли будут его с удовольствием читать, но зато всегда смогут убежать по АдСенсовым объявлениям, как и в предыдущем случае. Итак, берём выдачу гугла по нужному запросу, там, напротив нерусских сайтов стоит такая ссылочка [Translate this page], вот контент той страницы качаем, парсим, получаем уникальный контент, соответствующий запросу. Если хочется это всё делать ручками, ходим сюда: http://www.google.ru/language_tools
Сюда же отнесём хитрый способ юзанья переводчиков. Берётся английский текст, переводится сначала на какой-нибудь язык, а потом обратно на английский. Тут подойдёт любой переводчик, даже промт, но удобнее пользоваться опять же гугловым.
Публикация контента, которого нет в индексе гугла. Сюда попадает как перепечатка статей, опубликованныхв каких-нибудь старых газетах, журналах или книгах, об авторских правах которых никто беспокоиться не будет, так и копипастинг контента веб-ресурсов, которые гугл не проиндексировал. Дофига таких сайтов тут: http://web.archive.org - в бэкапе интернета. Ищем в нём какой-нибудь старый сайт, желательно закрытый сейчас, и спокойно копируем оттуда инфу. Про авторские права врядли кто-то пикнет.
Сюда же: публикация локальных ресурсов. В вашей локальной сети есть форум, недоступный извне? А сервис блогов, где тринадцатилетние дети пишут о жизненных неприятностях? Правда этот контент нифига не будет тематическим и хорошим, зато уникальным.
Организация какого-нибудь сервиса, где любой юзер может творить свой контент. Это сервисы блогов, статей, социальные сети и т.д. Кстати, сервисы статей почему-то не получили широкого распространения в рунете, хотя это очень перспективно. Ведь каждый желающий может написать краткий обзор на любую тему, поставив на себя ссылку, а может даже две, получив тем самым ссылку на свой сайт с тематически схожей страницы уважаемого сайта. У нас почему-то предпочитают статьи тупо копипастить. Но создание таких сервисов требует серьёзного подхода и больших затрат, как материальных, так и временных.
Известных способов генерации контента много, и, чувствую, что что-то забыл. Если вспомню, допишу.
А действительно, как его получить? Существует куча легальных и не очень способов заманивания людей и разнообразных ботов, одним словом, трафика, на свои сайты. Многие делают десятки, и даже сотни дорвеев, оптимизированных под определённые поисковые запросы, сплетённые невероятным образом линками друг на друга и посылающие трафик в итоге на раскручиваемый сайт.
Их часто можно увидеть, используя поиск Яндекса, гугл же их тщательно и очень аккуратно фильтрует. Не банит, не бьёт вебмастера по голове, и не забивает на все остальные его сайты, а отфильтровывает так, что в топ поисковых результатов попадают в большинстве своём не просто релевантные запросу документы, а страницы, в которых действительно юзер найдёт то, что искал. Но это если не используется клоакинга и прочих чёрных методов сео. С чёрными дорвеями мне работать пока не приходилось, но подозреваю, что с ними всё жёстче, поэтому сильно и не хочется в это дело лезть.
Кроме дорвеев бывают ещё всякие сплоги, спам по социальным сетям типа дигга и т.д.
Но мы ведь хотим оригинальный способ, такой, чтобы всё было легально, и трафик пёр, и чтобы нам ничего делать не надо было. Кнопочку нажал, и всё само поехало, механизмы заработали. А нам надо только успевать карман подставлять для денег, полученных из этого трафа нехитрыми способами.
Творить уникальный контент тут не пойдёт, ибо творить его надо постоянно, с завидным упорством каждые энное количество дней, а лучше вообще каждый день, набирая в браузере сотни и тысячи слов. И тогда снизойдут поисковики до нашего сайта и пригонят кучу трафа, но руки-то к тому времени уже отвалятся, и нечем будет бабло в карманы сгребать. А автоматические методы генерации контента - тоже не интересно, ибо гугл-то они понравятся, а вот человек, пришедший из него, увиденному, мягко говоря, удивится. Уйдёт и больше не вернётся, не найдя на сайте того, чего искал, и даже не ткнёт на прощанье по рекламке АдСенса, из вредности. А боты, которых мы таким образом целую ораву привлечём, по АдСенсу не тыкают.
Ну а если рассчитывать на непоисковый трафик? На постоянных посетителей. Чтобы они возвращались на сайт снова и снова, можно организовать для них какой-нибудь интересный сервис, и при том, чтобы этот сервис был юзабилен для широкого класса интернет аудитории.
И довольно много народу из этой рунет-аудитории играет в браузерные онлайн игры. Вообще довольно интересно, у буржуев таких текстовых онлайн игр вроде бы и не было раньше никогда, а сейчас тем более. А у нас вот развелось. И народ играет. Вот живёт русский в Америке и играет в эти игры, а американец, который работает с ним в одной конторе, с которым они ещё пьют вместе, не играет, потому что не хочет тратить время на такие пустяки, или даже так: не играет, потому что на работе американцы работают. В общем, нам не понять их. У них менталитет другой.
Так вот, получив в рунете довольно широкое распространение, многие, даже самые популярные многопользовательские онлайн игры, далеки от оригиналов игроков, и в них часто не хватает каких-нибудь полезных сервисов.
Для примера, возьмём тот же GanjaWars, имея 5000 пользователей онлайн ежедневно, его форум толстеет на сотни документов в день. И каждый день одно и то же, одни и те же вопросы новичков о различных сферах игрового мира, и т.д. А всё потому, что поиска нет на форуме. И нет его потому, что, по словам разработчиков, слишком бы он нагружал игровые сервера. Поиск, конечно, не сделает форум идеальным, пять тысяч человек контролировать сложновато, но облагородит точно.
Так почему бы не сделать сервис поиска по этому форуму на внешнем ресурсе? То есть делаем всё грамотно, каждый день, во время минимального онлайна, то есть в районе 4-6 часов утра по Москве, производим индексацию документов форума, появившихся за сутки. Можно, конечно, делать её чаще, но за тормоза серверов, порождённых вами, никто по голове не погладит, но даже чего похуже сделают. В каком виде будут выводиться результаты, это дело ваше, можно сделать как в этом блоге, но главное не переборщить, ведь сервис для людей, а не для поисковых ботов.
Далее втыкаем форму поиска себе на сайт, вешаем сбоку блок AdSense, разбавляем ссылками всяких Affiliate programs, авось кто-нибудь ткнет, и даже зарегистрируется, аудитория-то разношёрстная. Хорошенько пиарим новый сервис в игре, и хорошо будет, если модераторы форума или другие представители администрации вывесят информацию о таком новом мегасервисе в общедоступных местах игры. Верхом блаженства будет размещение вашей формы прямо на форуме игры, но для этого нужно будет приложить много усилий.
И, наконец, то, к чему так долго шли, получаем некоторое постоянное количество хостов в день на свой сайт. С GanjaWars, у которого в день больше 20000 хостов, можно рассчитывать на 200 хостов в день. Если сервис внутри игры как следует раскрутить, чтобы новичкам при любых вопросах сразу показывали дорогу к вам, то будет и больше.
Последнее, что нужно сделать, это удержать пришедший трафик на сайте подольше, пусть побродят по разделам, почитают инфу, заинтересуются. И тогда они вернутся снова, приведя с собой кого-нибудь ещё. А о пользе постоянного, и даже постоянно растущего трафика, неизбежно влекущего за собой увеличение количества бэков, говорить не стоит.
Буквально на днях столкнулся с интересной проблемой. Всем известно, что гугл, как и прочие поисковики, воспринимает домены site.ru и www.site.ru как два совершенно независимых сайта и упорно индексирует все документы сначала на домене без www, а потом и с ним, съедая при этом изрядную долю вашего трафика, который, как известно, не резиновый, и если халявная месячная норма трафика на хостинге кончится, придётся выкладывать свои родные, потом и кровью заработанные, зелёные шуршащие бумажки.
И всё из-за какого-то тупого бота. Хотя нет, наверное не тупого, ибо в гугле не дураки работают, и всё не просто так.
Итак, чтобы не заставлять бота два раза бегать по одним и тем же документам, и чтобы сэкономить наш трафик, который уходит в небытие, напишем в файле .htaccess в корне нашего сайта такие волшебные строчки:
Строки пронумерованы только для наглядности, не вздумайте писать эти циферки в самом файле :)
Итак, первой строкой мы включаем возможность преобразования урлов, второй - не разрешаем смотреть содержимое файла .htaccess. Хитрый юзер, который наберёт в браузере http://site.ru/.htaccess, желая поближе познакомиться с вашим ресурсом в интернете, увидит сообщение об ошибке "403 Forbidden".
Теперь, собственно, то, ради чего всё затеяно. Четвёртой строкой устанавливаем путь от корня папки, в которой лежит .htaccess до директории, в которой будем производить замены урлов. В нашем случае, поскольку мы пока рассматриваем корень сайта, это будет "/". Далее идёт условие RewriteCond, и если оно выполнено, то есть если обращение было к www.yourdomain.com, то сработает следующее за ним правило замены RewriteRule. Но только одно, если требуется несколько правил, для каждого нужно писать RewriteCond отдельно. У нас RewriteRule перенаправляет любой запрос 301-м редиректом в http://yourdomain.com/, подставляя его же, после слэша.
Какой редирект лучше использовать, 301-й (Moved Permanently) или 302-й (Moved Temporarily), вроде бы с точки зрения сео, не важно. Какой вам больше нравится.
Теперь начинается самое интересное. А что если у нас на сайте есть директория, в которой тоже куча скриптов, вот, например, этот самый блог. Вроде бы тут всё ясно, копируем .htaccess из корня в /blog/, не забывая изменить RewriteBase и в RewriteRule прописать http://yourdomain.com/blog/ и всё работает. Ан-нет. Попробуйте набрать в браузере: http://www.yourdomain.com/blog. Ага. Ошибка 404 - не найдено?
Ещё где-то мне довелось прочитать, что если ИЕ в избранное подсунуть подобную ссылку, только со слэшем в конце, то он тот слэш забудет. Сам не испытывал, но с учётом количества косяков и осле, можно принять эту гипотезу как верную. И что получается, пользователь пришёл на страничку со слэшем в конце, ему понравилось, добавил в избранное, а вернуться не может. Видит 404 и ничего понять не может. Это, конечно, только совсем неопытный юзер не догадается попробовать дописать слэш в конец, но тем не менее.
Здесь сразу напрашивается простое решение. Дописать вопросительный знак после последнего слэша в шестой строчке:
И если мы теперь снова попытаемся открыть страницу http://www.yourdomain.com/blog, невероятным образом увидим путь от корня операционной системы хостинга до несчастной папки /blog. Таким образом, мы палим свой логин на хостинге. Весело-то как. По крайней мере на моём хостинге именно так. А на нём хостится немало народу, даже не подозревающих об этом подвохе.
Решение не заставило себя долго ждать, однако, оно несколько нетривиально. Нужно всего-то дописать перед RewriteCond такую строчку:
RewriteCond %{REQUEST_FILENAME} !-d
Которая проверяет, является ли строка (то есть кусок урла от RewriteBase) не директорией. Здесь начинаются непонятки, лично для меня.
Мы имеем два условия, и если они одновременно выполнены, то срабатывает преобразование урла, то есть редирект на домен без www. В таком случае, нас интересуют варианты:
http://www.yourdomain.com/blog
http://www.yourdomain.com/blog/
http://www.yourdomain.com/blog/script.html
Во всех случаях, срабатывают оба условия! Если с последним всё ясно, оно - не директория, то первые два заставляют задуматься. И опытым путём выяснилось, что строка:
RewriteBase /blog/
На результат редиректа не влияет ни коим образом.
Всё, конечно, работает, но когда оно работает не понять как, это вызывает некоторые опасения.
Что касается редиректов, которые происходят уже непосредственно внутри php-скрипта, то можно устроить вот такой редирект обращениям с www:
Но всё же те задачи, которые можно решить ресурсами апача, нужно ими и решать. Так что дружно юзаем .htaccess.
Последнее, если вдруг кто-то набрал неправильный урл, или пришёл по неправильной ссылке, лучше бы его вежливо так средиректить на индекс, не забывая про такую вещь, как сео:
Header("HTTP/1.0 301 Moved Permanently");
Header("Location: http://".$_SERVER['HTTP_HOST']."/index.html");
"Тогда эти неверные ссылки стопудово склеятся с верными, и
с точки зрения сео все будет хорошо." - говорю я, словами Мастера Ласто, который плохого не посоветует.
Любому веб-программисту когда-нибудь приходилось делать свой собственный сайт. Именно себе, а не какому-то там зажравшемуся и всю свою жизнь думающему, что веб-странички клепаются в ворде парой взмахов мышью заказчику, и именно для себя и, наверное, о себе. У большинства даже с этого всё начиналось, когда промучившись три дня и три ночи над html-кодами всяких разных страничек, наконец выкладываешь этот сайт на народе, и с гордостью раздаёшь ссылку своим друзьям и родным. Ах, да, ещё на сайте присутствуют в огромных количествах всякие анимированные гиф картинки, ненужные стрелочки, бегущие строки, а на страницах, которые в меню есть, но заполнять их лень или чаще всего просто нечем, стоит такая большая, на всю страницу картинка "Under Construction".
Но не о том сегодня речь. Точнее, почти не о том. Так вот, когда мы раздали ссылку на наш свежеиспечённый сайт всем знакомым, и увидели как выросли циферки на счётчике посещаемости аж до 20 (!), мы обрадовались и пошли спать. Проснувшись утром, и снова зайдя на свою страничку, обнаружим, что цифры-то на счётчике не увеличиваются, да и не будут увеличиваться, даже если мы будем ложиться спать и вставать в два раза чаще.
Почему на сайт никто не ходит? Ответ прост. Тут два варианта:
Публика о нём не знает.
Он ей не интересен.
В случае вышеописанного сайта, сделанного на коленке начинающим хобетом всё понятно, и оба случая имеют место. А если мы имеем большой сайт, наполненный уникальным интересным контентом, регулярно обновляющийся и всячески холимый и лелеемый его автором, получающий на себя даже какое-то количество поискового трафика, даже умеренно популярный в своей сфере. Но пусть он немного популярен, пусть его любят поисковые боты и отдают ему часть поискового трафика, всё равно вам, то есть его создателю, всегда будет хотеться больше.
И разговор даже не о том, что можно получить больше трафика оптимизируя html-код страниц, ставя больше внешних ссылок с уважаемых поисковиками сайтов, грамотно организуя структуру сайта, а чтобы получить этот трафик на халяву, почти не прилагая никаких усилий. Собственно для этого нужно сотворить что-нибудь эдакое, что никто до этого не делал и даже не задумывал. И чтобы народ сам, зайдя на сайт, поспешил дать ссылку всем своим друзьям, родственникам и знакомым, а также знакомым друзей родственников.
В далёком 2005м году один умный товарищ сделал сайт, на котором стал продавать пиксели. Просто табличка из миллиона пикселей, разделённых на клеточки 100х100, в каждую из которых покупатель волен был разместить ссылку на свой сайт в виде маленькой картинки. На третий день существования сайта нашёлся первый покупатель, купивший сразу аж 4 клеточки. А дальше пошло-поехало. Народ попёр туда толпой, пиксели исчезали на глазах, об этом сайте писали все онлайн-издания, и естественно PageRank сайта взлетел до небес. И те, кто урвал кусок сайта, вовсе не дураки, они получили вечную ссылку, ещё и графическую, с сайта с PageRank равным 7. А это ой как хорошо.
Ну и я сейчас внесу свой вклад в поднятие Пэйдж Ранка этого сайта, пусть даже самый маленький. В здравом уме и светлой памяти даю ссылку:
Но это было в 2005м. И не в рунете. Рунет ещё в 2003м году сотрясался от пакетиков ганджубаса, который продавали направо и налево все кому не лень. Я тогда в интернете почти не присутствовал, но подозреваю, что тогда реферальные ссылки в русском интернете были ещё в диковинку, и народ клюнул. Сайт ganja.loopback.ru тогда поднялся в топ самых посещаемых ресурсов рунета за 1 день. Сейчас этот сайт перерос в мощного гиганта, называемого GanjaWars.Ru, а автор его, придумавший ту самую затею с пакетиками травы, сейчас живёт себе мирно и обеспеченно и в ус не дует.
Но это всё история. А как же день сегодняшний? Сегодня в рунете мы имеем некий проект, призванный объединить студентов и выпускников ВУзов России, имя ему vkontakte.ru. Идея сайта проста до безумия: любой желающий, зарегистрировавшись на сайте, может добавлять себе в контакт своих одногруппников и друзей по ВУЗу, единственное, что требуется, это знать их e-mail. После процесса добавления друга, этому самому другу приходить на электронный ящик письмо, в котором красочно описано, что дескать, такой-то такой-то добавил вас в список друзей, ваш пароль такой-то, ссылка для изменения вашей инфы такая-то. И всё. Никакой муторной регистрации, никаких проблем. Естественно, обрадованный друг, пройдя по ссылке поспешит добавить и всех своих друзей в контакт. Вот сайт и разрастается в неимоверной скоростью, поскольку студенты в большинстве своём - народ дружный и идея централизации контактов их всех очень хороша.
Вконтакте.ру имеет кучу хостов ежедневно и уже, по словам alexa.com входит в сотню самых посещаемых ресурсов рунета. Но разработчики утверждают, что никакой рекламы не будет, что сайт создан только для объединения студентов по всей России, что они работают за идею. Похвально, но всё равно это кощунство, ни одного малюсенького баннера ни на одной из страниц, при таком потенциале, отдача тоже должна быть. Некоторые из моих знакомых удавились бы.
Вот так вот. Чтобы получить невероятное количество трафика на свой сайт, нужно сотворить что-нибудь мегаоригинальное, что привлечёт внимание интернет-аудитории не всякими цветными баннерами, а своей сущностью, идеей (и не просто идеей, а идеей по Платону). И такие идеи, чаще всего валяются под ногами, нужно только наклониться, и подобрать.
Ах, да, у меня праздник, гуглбот сегодня первый раз посетил этот сайт, и даже проиндексировол 16 страниц. Эхх...
Этот пост будет о том, как защитить свои скрипты от всякого рода нехороших товарищей, которые спят и видят, как бы сломать очередной сайт и повесить на его индекс какую-нибудь надпись, типа "здесь был Вася", получив от этого невероятное удовольствие. Но если вы являетесь админом или просто создателем того несчастного сайта, который похачили, вам жизнь легче не станет.
Вот чтобы не получить лишний геморрой в виде разбора завалов, созданных на вашем любимом сайте подлым кулхацкером, надо предохраняться. Предохраняться мы будем самыми простыми, но невероятно действенными методами.
Итак, пусть у нас есть форма ввода каких-нибудь данных, например, та же самая форма для отправки комментария к этому посту. В ней несколько полей: тема сообщения, ваше имя, е-мэйл, контрольный код, и само сообщение (про числовой код мы говорить сегодня не будем, это тема для отдельного разговора). Прежде всего, ограничим максимальное количество символов в полях:
<input type=text name=title maxlength=20>
Это, конечно, не остановит никакого, мало-мальски уважающего себя хакера, но зато ограничит пользователя от случайного ввода лишних символов.
Далее, не дадим злоумышленнику отправлять данные формы с другого домена. То есть, если он сохранит себе html-код формы отправки комментария себе на локаль, что-то там изменит, и будет выдавать за чистую монету, сервер его обламает и отправит курить бамбук в сторонке. Сделаем мы это вот как:
if(!strstr($_SERVER['HTTP_REFERER'],"http://".$_SERVER['HTTP_HOST']))
{
echo "Произошла ошибка<br>
Форма исполняется лишь на этом домене.";
exit;
}
То есть мы проверяем наличие нашего доменного имени в урле страницы, с которой нам шлют данные. Если его нету, выдаём ошибку.
Теперь, убедившись, что мы получили данные с собственного домена, приступаем к жёсткой обработке и фильтрации этих самых данных. Напишем несколько функций:
//Эта функция проверяет, если в строке есть хотбя бы один символ,
//отличный от: a-z, 0-9, она возвращает пустое значение
function az09($str)
{
if(ereg("^([a-zA-Z0-9]+)$",$str)) return $str;
else return "";
}
//Проверяем E-mail на валидность. В нём может быть сколько угодно
//минусов и подчерков, но должны быть символы "@", ".", он должен весь
//быть из латинских символов, и зона должны состоять из 2-4 симоволов.
function email($str)
{
if(ereg("^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+\.[a-zA-Z]{2,4}\$",$str))
{
return $str;
}
else return "";
}
//Запрещаются все html-теги, кроме перечисленных
function text($str)
{
return strip_tags($str,"<p><br><b><u><i>");
}
Этими функциями всё сказано. Вешаем нужную нам функцию на нужную переменную и получаем обработанный результат:
$title=az09($_POST['title']);
Если в $_POST['title'] содержались символы, отличные от a-z, 0-9, функция вернёт пустую строку.
Ещё, поскольку мы ограничили поля ввода в html, неплохо бы сделать substr полученным данным, то есть обрезать в строке все лишние символы:
$title=substr(az09($_POST['title']),0,20);
Этого набора функций вполне хватает для безопасной работы с данными из форм и т.д. Конечно, сразу хочется дополнить эти функции. Например, разрешить пользователю использовать минус в заголовке, тогда в функции az09() изменим [a-zA-Z0-9] на [a-zA-Z0-9-].
Часто, при всякого рода регистрациях в различных сервисах бывает необходимо записать введённый пользователем пароль. Естественно его всегда хранят в зашифрованном виде, чтобы злоумышленник, даже получив базу хэшей паролей, долго ломал над ней голову, и расшифровывал. Обычно просто берётся введённый пароль и шифруется стандартным алгоритмом шифрования md5(). Но мы будем хитрее, и напишем вот такую функцию:
Как видите, расшифровать такую строку будет непросто. Расшифровка по словарю не даст результата. А от тупого перебора никто не застрахован, но он требует много времени и ресурсов.
Но мы можем пойти дальше, и немного застраховать себя и от тупого перебора. Поскольку алгоритм md5() выдаёт строку длины 32 символа, значит их конечное число, а паролей может быть бесконечно много. Значит существуют другие комбинации символов, отличные от вашего пароля, хэш которых совпадает с вашим. Их ещё называют коллизиями. Так вот чтобы обезопасить себя от случайного подбора злоумышленником одной из коллизий, будем при регистрации сохранять в базу не только md5-хэш пароля, но и хэш этого же пароля, но перевёрнутого наоборот. И при авторизации пользователя будем сверять оба этих хэша с соответственно хэшом перевёрнутого или нет пароля. Таким образом, количество коллизий сильно сократится, хотя они и не исчезнут совсем. Тут уже можно проявить фантазию и хранить хэши от слов, полученных из паролей всякими изощрёнными алгоритмами.
Вот и всё, что накопилось в моей голове на эту тему. Перечисленными сособами не ограничиваются все методы защиты скриптов от некорректных данных и других неприятных вещей, главное - проявлять фантазию. Существует уже достаточно много статей на тему безопасного веб-программирования, надеюсь, этот пост будет к ним хорошим дополненнием.