#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:
Грустно говорить, но весь вопрос не имеет смысла.
- Этот код не сжимает файл php, а только выводит его.
- В сжатии выходных данных нет особого смысла, по крайней мере таким образом.
- Использование $_SERVER не является дырой в безопасности.
Итак, я бы посоветовал вам просто избавиться от этого кода, в нем нет необходимости.