Избегайте запросов, которые занимают много времени Apache

Я собирался запрограммировать класс, который проверяет данные из браузеров, и один из этих методов проверяет длину строк, тогда мне пришло в голову что-то: что если кто-то отправит очень большую строку с 2 миллионами символов или более (или что-то еще)?

Если я использую strlen () для подсчета байтов, он будет считаться до последних байтов.
Было бы бесполезно считать все эти байты.

Подумав немного, я сделал что-то вроде этого:

   Class Validator
{
static public function verify_str_length($str, $min, $max)
{
$i;
$counter = $min;
$msg = "";
// looling until null char is found
//
for($i=$min-1;$i<$max;$i++) {
if(!isset($str[$i])) {
if($i == ($min -1)) {
// if first iteration
// we find the null char so early.
// $i starts with the minimum length allowed, the string
// length is lower than that so it is too short
$msg = 'Too short string';
return -1;
}
return 0;
}

}
if(isset($str[$i])) {
// if we reach the max and keep without finding the null char so
// the string length is higher than $max
$msg = 'Too long string';
return 1;
}
return 0;
}
//
/*  Others Methods
..... */
}

Обратите внимание, что мне не нужно количество символов в строке, только если оно больше, чем $ min, и меньше, чем $ max. Я откажусь от всех других символов.

Мой вопрос: было бы хорошей идеей сделать это вместо использования strlen ()?

Есть ли другой способ сделать это, например, настроить APACHE, чтобы остановить выполнение, если сервер обрабатывает запрос более X секунд?

Или я могу использовать оба варианта?

Заранее спасибо!

0

Решение

Вы можете использовать PHP post_max_size директива об ограничении количества представленного контента. Будьте осторожны с этим параметром, потому что если у вас есть загружаемые файлы, они также должны соответствовать этому размеру.

http://php.net/manual/en/ini.core.php#ini.post-max-size

Чтобы ограничить время, затрачиваемое на анализ входных данных, вы можете использовать max_input_time.

http://php.net/manual/en/info.configuration.php#ini.max-input-time

Чтобы ограничить время выполнения, используйте max_execution_time.

http://php.net/manual/en/info.configuration.php#ini.max-execution-time

Вы можете установить их в .htaccess, например так:

php_value post_max_size 1M
php_value max_execution_time 30
php_value max_input_time 5

Для проверки вы должны использовать PHP фильтр функции, например:

$content = filter_input( INPUT_POST, 'content', FILTER_VALIDATE_REGEXP, [ 'options' => ['regexp' => '/^[\w-]{1,64}$/']] );

Это гарантирует, что если $ _POST [‘content’] не состоит из букв, цифр, подчеркиваний или дефисов и не имеет длины от 1 до 64 символов, он не будет принят.

http://php.net/manual/en/function.filter-input.php

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]