1

最近、私のサイトで「500 内部サーバー エラー」が発生することが多く、ホストは、この 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 xxxxy/public_html/xxxx.php、リファラー: http://www.xxxxxxx.com/wp-content/themes/xxx/style.css

4

2 に答える 2

0

コードの説明から始めて、ここで考慮すべき複数のポイント:

gzip出力バッファリングハンドラーを起動し、Content-Type: text/cssヘッダーを発行し、GETフォームパラメーターの内容をコンマで分割し、必要に応じて各ファイルを含む結果の配列の各要素をループするか、CSSコメントをログ文字列として発行します。

PHPプロセスには、出力バッファリングと圧縮を一度に処理するのに十分なメモリがない可能性があります。ホストがこれを防ぐアプリケーション層ファイアウォールを持っている可能性もあります(正当な理由でmod_securityのようなもの)、またはPHPがGZIP出力バッファリングをサポートしていない可能性もあります。

このスクリプトは巨大なセキュリティホールです!フォームパラメータを変更することで、このコードを実行しているWebサーバーに、実行しているサーバーから任意のファイルをダンプさせることができます。これを本番環境で使用しないでください。これまで!自分が何をしているのかわからない場合、または「専門知識の範囲外」である場合は、今すぐコーディングを中止して、新しい仕事を見つける必要があります。

于 2012-04-23T16:57:51.713 に答える
0

このスクリプトを少し安全にするには、isset 関数で $_GET 変数が設定されているかどうかを確認する必要があります。次に、悪意のあるコードを挿入するのは簡単なので、使用している変数へのアクセスをユーザーに許可しないでください。代わりに $_POST を使用するか、少なくとも $_GET 変数で渡された値が英数字かどうかを確認してください。

于 2013-03-12T16:07:23.293 に答える