Как надежно сжать файл php

#php #security #compression

#php #Безопасность #сжатие

Вопрос:

Я нашел этот код для кэширования и сжатия файлов php. Ниже приведен мой код.

 <?php if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) ob_start("ob_gzhandler"); else ob_start(); ?>
  

Я также нашел другой код, который, похоже, работает хорошо

 <?php
if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip'))
if(extension_loaded('zlib')){
    ob_start('ob_gzhandler');
}
header ('content-type: text/html; charset: UTF-8');
header ('cache-control: must-revalidate');
$offset = 60 * 60 * 24;
$expire = 'expires: ' . gmdate ('D, d M Y H:i:s', time()   $offset) . ' GMT';
header ($expire);
ob_start('compress');
function compress($buffer) {
    $buffer = preg_replace('!/*[^*]** ([^/][^*]** )*/!', '', $buffer);
    return $buffer;
}?>
  

Но, насколько я знаю, при использовании $ _SERVER это будет дырой в безопасности сайта. Кто-нибудь может сказать мне, как я могу безопасно написать приведенные выше коды, я имею в виду, не иметь возможности выполнять sql-инъекцию

Спасибо

Комментарии:

1. Если вы хотите избежать внедрения sql. Я предлагаю вам начать использовать PDO и переменные привязки, если вы еще этого не сделали (наряду с регулярной очисткой).

Ответ №1:

На этой странице не может быть никакой SQL-инъекции, вы не обращаетесь к базе данных.

Однако вам вообще не нужно проверять переменную $_SERVER.

Просто поместите ob_start('ob_gzhandler'); вверху своей страницы, и все будет в порядке.

Вероятно, лучше обрабатывать gzip на другом уровне (вы можете включить сжатие zlib в php.ini или поручить это самому вашему веб-серверу), но если вы хотите сделать это на php, вам не нужно выполнять почти столько работы.

Комментарии:

1. Как он узнает, поддерживает ли браузер «gzip», если он не проверяет переменную $ _SERVER? Что, если клиент не поддерживает «gzip»?

2. @Demento: ob_gzhandler Выполняет все согласования.

3. @Gumbo: Спасибо, в этом случае проверку, конечно, можно пропустить.

Ответ №2:

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

Использование $_SERVER также не должно быть проблемой, если PHP-реализация «substr_count» не уязвима. Если заголовок HTTP_ACCEPT_ENCODING, отправляемый клиентом, содержит «gzip», вы выполните сжатие, в противном случае вы этого не сделаете. Пока вы не используете значение из $ _SERVER[‘HTTP_ACCEPT_ENCODING’] каким-либо другим способом, это, похоже, сохраняется.

И, как уже сказал schizodactyl, есть лучшие способы обработки сжатия.

Ответ №3:

Грустно говорить, но весь вопрос не имеет смысла.

  1. Этот код не сжимает файл php, а только выводит его.
  2. В сжатии выходных данных нет особого смысла, по крайней мере таким образом.
  3. Использование $_SERVER не является дырой в безопасности.

Итак, я бы посоветовал вам просто избавиться от этого кода, в нем нет необходимости.