1

提供されたクエリを使用するスクリプトを取得し、それらを展開すると、ディレクトリからファイルが呼び出されます。ここにスクリプトがあります

<?php
header("Content-type: text/css");

$safehash = sha1(binary-style_1afn34jdd2);

$css = '';
$root = 'css/'; //directory where the css lives
$files = explode(',',$_SERVER['QUERY_STRING']);
if(sizeof($files))
{
  foreach($files as $file)
  {
    $css.= (is_file($root.$file.'.css') ? file_get_contents($root.$file.'.css') : '');
  }
}
function compress($css){
  // Remove comments
  $css = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $css);
  // Remove spaces before and after symbols
  $css = preg_replace('/(\s(?=\W))|((?<=\W)\s)/', '', $css);
  // Remove remaining whitespace
  $css = str_replace(array("\r\n","\r","\n","\t",'  ','    ','    '), '', $css);
  return $css;
}

echo compress($css);
?>

問題は、style.php?sheet、sheet、sheet、sheet ..... ectのようなスクリプトにクエリを追加するだけで、読み取りを使い果たしてサーバーがクラッシュする可能性があるという事実です。このコードを保護するための最良の方法は?

4

1 に答える 1

1

クエリ文字列のサイズに制限を設けることができます。

if(mb_strlen($_SERVER['QUERY_STRING'])>10) {
    header('HTTP/1.0 413 Request Entity Too Large');
    exit;
}
于 2013-01-25T05:21:30.973 に答える