2011-04-09 90 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不是安全漏洞。

所以,我建議你只是擺脫這個代碼,這是沒有必要的。