Как Вы защитили бы базу данных ссылок от того, чтобы быть очищенным?

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

В настоящее время моя установка (который, кажется, работает) просто называет php файл как link.php? id=123, это регистрирует запрос с меткой времени в DB. Прежде чем это выложит ссылку, это проверяет, сколько запросов было выполнено от того IP за прошлые 5 минут. Если ее большее, чем x, это перенаправляет Вас к странице капчи.

Это все хорошо работает и денди, но сайт становился действительно популярным (а также получение DDOsed в течение приблизительно 6 недель), таким образом, php становился настеленным пол, таким образом, я пытаюсь минимизировать времена, я должен подбросить php ударом, чтобы сделать что-то. Я хотел показать ссылки в простом тексте вместо через link.php? идентификатор = и имеет функцию onclick для простого добавления 1 к количеству представления. Я все еще подбрасываю php ударом, но по крайней мере если он отстает, он делает так в фоновом режиме, и пользователь видит ссылку, которую они запросили сразу же.

Проблема, который делает сайт ДЕЙСТВИТЕЛЬНО scrapable. Есть ли что-нибудь, что я могу сделать, чтобы предотвратить это, но все еще не полагаться на php, чтобы сделать проверку перед выкладыванием ссылки?

6
задан 22 March 2010 в 21:42
поделиться

5 ответов

Похоже, что узкое место находится в базе данных. Каждый запрос выполняет вставку (регистрирует запрос), затем выбор (определяет количество запросов от IP за последние 5 минут), а затем любые операции с базой данных, необходимые для выполнения основной функции приложения.

Рассмотрите возможность сохранения данных регулирования запросов (IP, времени запроса) в памяти сервера, а не обременения базы данных. Два решения - это memcache ( http://www.php.net/manual/en/book.memcache.php ) и memcached ( http://php.net/manual/en/book .memcached.php ).

Как отмечали другие, убедитесь, что существуют индексы для любых запрашиваемых ключей (таких полей, как идентификатор ссылки). Если индексы созданы, а база данных все еще страдает от нагрузки, попробуйте ускоритель HTTP, например Varnish ( http://varnish-cache.org/ ).

2
ответ дан 17 December 2019 в 18:13
поделиться

Проверьте свою базу данных. Вы все правильно индексируете? Таблица с таким количеством записей будет очень быстро увеличиваться и замедляться. Вы также можете запустить ночной процесс, который удаляет записи старше 1 часа и т. Д.

Если ничего из этого не работает, вам нужно обновить / сбалансировать нагрузку на свой сервер. Прямые ссылки на страницы только выиграют у вас время, прежде чем вам все равно придется обновляться.

0
ответ дан 17 December 2019 в 18:13
поделиться

Большинство парсеров просто анализируют статический HTML, поэтому кодируют ваши ссылки, а затем динамически декодируют их в клиентском веб-браузере с помощью JavaScript.

Определенные скребки все еще могут обойти это, но они могут обойти любой метод, если данные достаточно ценны.

0
ответ дан 17 December 2019 в 18:13
поделиться

Все, что вы делаете на стороне клиента, не может быть защищено. Почему бы просто не использовать AJAX?

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

Вы можете попробовать jQuery или другие библиотеки AJAX (я использую jQuery и sAjax). И у меня есть много страниц, которые динамически меняют контент очень быстро, клиент даже не знает, что это не чистый JS.

0
ответ дан 17 December 2019 в 18:13
поделиться

Вы можете регулировать IP-адрес на уровне веб-сервера. Может быть, для вашего веб-сервера существует модуль, или, например, с помощью apache вы можете написать свою собственную карту перезаписи и попросить ее обращаться к программе-демону, чтобы вы могли делать более сложные вещи. Попросите программу-демон запросить базу данных памяти. Это будет быстро.

1
ответ дан 17 December 2019 в 18:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: