簡體   English   中英

導致500內部服務器錯誤的腳本

[英]Script causing 500 Internal Server Error

我的網站最近經常遭受“ 500 Internal Server Error”的困擾,主持人建議該bundle.css.php腳本可能是導致...

<?php
ob_start('ob_gzhandler');
header('Content-Type: text/css');
$files = split(",",$_GET['files']);
foreach($files as $key=>$val){
    if(file_exists($val.'.css')){
        include_once($val.'.css');
    }else{
        echo "\n\n/*** File \"$val\" does not exist. ***/\n\n";
    }
}
?>

用我的主人的話說...

“它正在嘗試將所有輸出緩沖到ob_gzhandler中。它獲取了在GET變量'files'中傳遞的參數非常不安全的列表,然后試圖將這些文件包含在輸出中。我不確定確切的列表是什么參數正在傳遞,但我懷疑您的腳本中某處存在一個錯誤,該錯誤將大量文件名傳遞給此腳本,從而試圖構建一個太大的緩沖對象。”

這遠遠超出了我的專業知識,因此,解決該問題的任何建議將不勝感激。 非常感謝。


更新

錯誤日志充滿了諸如...的行

[2012年4月23日星期一15:44:41] [錯誤] [客戶端xx.xx.xx.xx](12)無法分配內存:無法創建子進程:/ home /的/ opt / suphp / sbin / suphp xxxxxy / public_html / xxxx.php,引薦網址http ://www.xxxxxxx.com/wp-content/themes/xxx/style.css

從代碼解釋開始,這里要考慮多個方面:

您正在啟動gzip輸出緩沖處理程序,發出Content-Type: text/css標頭,用逗號分割GET表單參數的內容,遍歷結果數組中的每個元素,包括必要時包括每個文件的內容,或發出CSS注釋為日志字符串。

您的PHP進程很可能沒有足夠的內存來一次處理輸出緩沖和壓縮。 您的主機也可能具有阻止此情況的應用程序層防火牆(出於充分的原因,例如mod_security),或者您的PHP也可能不支持GZIP輸出緩沖。

該腳本是一個巨大的安全漏洞! 您可以通過更改form參數,使運行此代碼的Web服務器從運行它的服務器中轉儲任意文件! 不要在生產中使用它! 曾經! 如果您不了解自己的工作或“專業知識之外”,則應立即停止編碼並找到新工作。

為了使這個腳本更輕松一些,您應該檢查是否通過isset函數設置了$ _GET變量,第二,您絕對不應讓用戶訪問您正在使用的變量,因為很容易向其中注入惡意代碼,如果可以的話請改用$ _POST或至少檢查$ _GET變量中傳遞的值是否為字母數字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM