2011-04-09 84 views
-1

我发现这个代码可以让php文件缓存和压缩。以下是我的代码。如何安全压缩php文件

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

,我发现了另一个代码以及使用$ _ SERVER时,据我所知,这将是该网站的一个安全漏洞,这似乎运作良好

<?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; 
}?> 

但是,。谁能告诉我怎样才能写出上面的代码安全的,我的意思是不是能够做SQL注入

感谢

+0

如果你想避免sql注入。我建议你开始使用PDO和绑定变量(如果你还没有定期清理)。 – PiZzL3 2011-04-09 02:03:09

回答

2

你不可能有这个页面上的任何SQL注入,你不是说要一个数据库。

但是,您根本不需要检查$ _SERVER变量。

只需将ob_start('ob_gzhandler');置于页面顶部,您就会安然无恙。

在不同的层上处理gzip可能会更好(你可以在php.ini中启用zlib压缩,或者让它通过web服务器本身来处理),但是如果你想在php中完成,你不需要必须做几乎那么多的工作。

+0

他如何知道浏览器是否支持“gzip”,如果他没有检查$ _SERVER变量?如果客户端不支持“gzip”会怎么样? – Demento 2011-04-09 07:57:35

+1

@Demento:['ob_gzhandler'](http://php.net/ob_gzhandler)完成所有的协商。 – Gumbo 2011-04-09 08:04:34

+0

@Gumbo:谢谢,在这种情况下,支票可以跳过当然。 – Demento 2011-04-09 08:08:44

0

您提供的代码不包含SQL语句,因此您至少在代码的这部分中不必担心SQL注入。如果你在其他地方执行SQL语句,你当然必须采取必要的预防措施。

只要“substr_count”的PHP实现不存在漏洞,使用$ _SERVER也不应该成为问题。如果客户端发送的HTTP_ACCEPT_ENCODING-Header包含“gzip”,则将执行压缩,否则您不执行压缩。只要您不以任何其他方式使用$ _SERVER ['HTTP_ACCEPT_ENCODING']的值,这似乎是保存。

作为schizodactyl已经说过,有更好的方法来处理压缩。

0

很难说,但整个问题没有意义。

  1. 此代码不压缩php文件,但它只是输出。
  2. 压缩输出没有多少意义,至少是这样。
  3. 使用$ _SERVER不是安全漏洞。

所以,我建议你只是摆脱这个代码,这是没有必要的。