Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-settings.php on line 472

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-settings.php on line 487

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-settings.php on line 494

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-settings.php on line 530

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-includes/cache.php on line 103

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-includes/query.php on line 21

Deprecated: Assigning the return value of new by reference is deprecated in /home/spwebru/com/wp-includes/theme.php on line 623
Проверяйте сайты на битые ссылки! - Программируем на CakePHP


Сен 04 2008

Проверяйте сайты на битые ссылки!

Раздел: Веб-разработкаМета @ 22:56

Несколько месяцев назад мы работали над одним крупным проектом. Сайт создавался на CakePHP, на тот момент содержал 7 моделей и 14 контроллеров, общее количество записей в таблицах — несколько десятков тысяч. Каково же было наше удивление, когда придя в один прекрасный день утром на работу, мы увидели что больше половины данных из базы удалено. Да и оставшиеся данные исчезали прямо на глазах.

Дурацкая мысль - «хакеры!» - была опровергнута просмотром журнала веб-сервера. Оказалось что по сайту просто лазает бот поисковой системы. Лазает уже больше восьми часов — весь вечер, ночь и наступившее утро. Доступ к сайту мы тут же закрыли, базу — восстановили из резервной копии и начали анализировать почему это произошло.

Логи веб-сервера показали, что бот поисковика ходил по страничкам панели администрирования и «кликал» по всем подряд ссылкам. А там их много — добавление, редактирование, удаление записей, связи и т.д. Вот при клике по «удалению» - информация и пропадала. Интересно что: админка была закрыта дайджест-авторизацией и логином-паролем, все ссылки удаления требовали подтверждения на javascript’е.

Решили с имитировать действия бота с помощью программы для проверки битых ссылок — Xenu Link Sleuth. Программка во всех отношениях замечательная: маленькая, простая и очень быстрая. Достаточно ввести URL проверяемого сайта, в ответ выдаст список всех найденных ссылок на всех страничках сайта и статус этих страниц — найдена, если нет, то какая ошибка, показывает размер и тип содержимого. На всякий случай выкладываю архив с программой xenu.

После сканирования страничек выяснилось следующее. Контент-менеджер сайта удалил одну из устаревших статей из базы и забыл обновить ссылки на двух или трех других страничках, ведущие на удаленную статью. И все было бы в порядке, если бы при переходе по этим ссылкам выдавалась 404 ошибка. Но как раз в этом контроллере программист забыл удалить функции (и соответствующие им виды views), сгенерированные bake-скриптом из консольного комплекта CakePHP. И вместо 404 страницы, бот (или пользователь) попадал на функцию index этого контроллера. Автоматически сгенерированные функции обеспечивали полный функционал scaffolding’а: просмотр, создание, редактирование и удаление записей соответствующей контроллеру модели. Модель была связана с другими моделями, рекурсию никто не ограничивал — поэтому база с легкостью очищалась.

Выводов два.

1.Обязательно вычищайте все контроллеры, виды и модели от отладочного мусора перед выкладыванием в интернет. У нас в студии разработка ведется в соответствии с принципами «экстремального программирования», поэтому следить за этим приходится строго.

2.Регулярно проверяйте сайт на битые ссылки. Это полезно не только с точки зрения поиска ошибок, но и положительно сказывается на посетителях — для них все разделы сайта доступны — и поисковых машинах.

Теги: , , , ,

One Response to “Проверяйте сайты на битые ссылки!”

  1. skiedr says:

    А главное проверяем в delete и edit экшенах, что запрос пришел через post.

Напиши комментарий!