我发现这个代码使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注入
谢谢
你不可能在这个页面上有任何SQL注入,你不是在与数据库对话。
但是,您根本不需要检查$_SERVER变量。
只要把ob_start('ob_gzhandler');
放在你的页面顶部,你就没事了。
最好在不同的层处理gzip(你可以在php.ini中启用zlib压缩,或者让你的web服务器自己处理),但如果你想在php中做这件事,你不必做那么多的工作。
您提供的代码不包含sql语句,因此您不必担心sql注入,至少在这部分代码中是这样。如果在其他地方实现sql语句,当然必须采取必要的预防措施。
使用$_SERVER应该也不是问题,只要php实现的"substr_count"不容易受到攻击。如果客户端发送的HTTP_ACCEPT_ENCODING-Header包含"gzip",则执行压缩,否则不执行压缩。只要您不以任何其他方式使用$_SERVER['HTTP_ACCEPT_ENCODING']中的值,这似乎是保存。
正如schizodactyl已经说过的,有更好的方法来处理压缩
很遗憾,整个问题都没有意义。
- 这段代码不是在压缩php文件,而是在输出。
- 压缩输出没有多大意义,至少这样。 使用$_SERVER不是安全漏洞。
所以,我建议你删掉这些代码,它们都是不必要的。