hasvanbinsun
Проверенные
- Сообщения
- 407
- Реакции
- 75
- Баллы
- 5,530
При многократном обращении к главной странице авторизованным пользователем, процессы PHP наглухо забивают CPU.
Необходимо защитить форум от подобных фокусов. Данная тема будет полезна пользователям которые используют слабые VPS или шаред хостинг.
Нашел вот такой материал
или
или
Внимание, вопрос знатокам и любителям PHP. Как это можно прикрутить к форуму? Возможно установить такую защиту как для авторизованных, так и для обычных пользователей которые бродят по форуму?
Необходимо защитить форум от подобных фокусов. Данная тема будет полезна пользователям которые используют слабые VPS или шаред хостинг.
Нашел вот такой материал
Не давно один мой знакомый показал мне один фокус как уложить сайт на лопатки!
или проще говоря как вывести сайт из строя, все оказалось довольно просто все что нужно это перейти на сайт жертвы и зажать на секунд 10 кнопку F5, тем самым происходит обновления страницы чаще чем раз в 1 секунду, из за таких частых обращений и ложится сервер, правда не на долго но все равно не приятно.
Данная информация сразу заставила задуматься и принять экстренные меры :-)
Так был написан простенький, но эффективный скрипт на ограничение запросов к сайту.
Код:
#F5
session_start();
if(isset($_SESSION[session_id()]) AND (time()-$_SESSION[session_id()]) <= 1){
die('<html><head><meta http-equiv="Refresh" content="2" /><title>You have made too many requests per second.</title></head>
<body><h1>You have made too many requests per second.</h1>Please, wait few seconds and refresh this page.</body></html>');
}else{$_SESSION[session_id()] = time();}
или
Код:
header('Content-Type: text/html;charset=UTF-8');
session_start();
$limit = 5;
if(isset($_SESSION[session_id()]) AND (time()-$_SESSION[session_id()]) <= $limit)
exit('Фууууу.. ддоссер.... кышь!');
else
$_SESSION[session_id()] = time();
или
Код:
<?php
session_start(); // Начинаем сессию
$ts = time(); // Получаем текущее время
$s_time = (empty($_SESSION["time"]))? 0: $_SESSION["time"]; // Если пользователь обращается к скрипту впервые, то устанавливаем значение 0, иначе берём его из сессии
$_SESSION["time"] = $ts; // Обновляем значение сессии
if ($ts - $s_time > 2) { // Если с момента предыдущего обращения прошло больше 2 секунд
echo "Тут сложный скрипт"; // Выполняем скрипт
}
else echo "Хватит постоянно обновлять страницу!"; // Выводим сообщение об ошибке
?>
Внимание, вопрос знатокам и любителям PHP. Как это можно прикрутить к форуму? Возможно установить такую защиту как для авторизованных, так и для обычных пользователей которые бродят по форуму?