2016-07-12 13 views
0

私は危険なコードを知っていますが、私の人生がそれに依存していれば、何かを書くことができませんでした。私は$ _REQUEST(私は思う)を許可しないPHPの新しいバージョンを持っている新しいホスティングにWebサイトを移行しています。このコードは、PDFを暗号化するように設計されています。古いサイト(おそらく古いバージョンのPHP)でうまく動作します。
すべての$ _REQUESTを$ _GETに置き換えようとしましたが、動作しませんでした。どんな助けでも大歓迎です。私は書式設定コードと基本的なhtmlを除外しました。

<?php 
$timeArr = explode(' ', microtime()); 
$pageStartTime = $timeArr[ 1 ] + $timeArr[ 0 ]; 

$file = $_FILES['file']; 
if($_REQUEST['submit'] && (!trim($_REQUEST['password']) || $_REQUEST['password'] == 'Password')) { 
    $msg = 'Please enter a password.'; 
} 
elseif(is_array($file) && $file['error'] == 0) { 
    $enc_path = 'encrypted'; 
    $src = $file['tmp_name']; 
    $dest = "{$enc_path}/{$file['name']}"; 
    $pass = trim($_REQUEST['password']); 
    $cmd_fmt = "pdftk '$src' output '$dest' user_pw '$pass'"; 

    @mkdir($enc_path); 
    @system($cmd_fmt); 

    if(file_exists($dest)) $file_url = "http://www.company.com/{$enc_path}/" . rawurlencode($file['name']); 

} 
?> 

     } 
     </style> 
     <script type="text/javascript"> 
     function copyToClipboard(s) { 
      if(window.clipboardData && clipboardData.setData) { 
       clipboardData.setData('text', s); 
      } 
      else alert('Could not get permission to access the clipboard. Please copy the URL from the text box instead.'); 
     } 
     </script> 
    </head> 
    <body> 
    <center> 
    <div style="width: 600px;"> 
    <div style="text-align: center;"> 
     <center> 
     <form action="<?= $_SERVER[ 'PHP_SELF' ] ?>" method="POST" enctype="multipart/form-data"> 
     <div style="text-align: center;"> 
      <img src="/logo.png" border="0" style="height: 145px; margin-bottom: -10px;"> 
      <h1>PDF Encryption Tool</h1> 
     </div> 
     <br/> 
     <? if($file_url) : ?> 
      <span><a href="<?= $file_url ?>">Click here to download your file</a></span><br/> 
      <input type="text" readonly value="<?= $file_url ?>" style="width: 350px; margin: 0 0 5px 0;"><br/> 
      <input type="button" onclick="copyToClipboard('<?= $file_url ?>');" value="Copy to Clipboard"> 
      <br/> 
     <? elseif($_REQUEST['submit'] && $msg) : ?> 
      <font color="red"><b><?= $msg ?></b></font> 
      <br/> 
     <? elseif($_REQUEST['submit']) : ?> 
      <font color="red"><b>There was an error processing your request. This program only accepts PDF files.</b></font> 
      <br/> 
     <? endif; ?> 
     <br/> 
     <br/> 
     <input type="file" name="file" style="width: 350px; border: 0; margin: 0 0 5px 0;"><br/> 
     <input id="password" type="text" name="password" style="width: 350px;" 
      <?= $_REQUEST['password'] ? 'class="focus"' : ''?> 
      onFocus="this.className = 'focus'; if(this.value == 'Password') { this.value = ''; }" 
      onBlur="if(this.value == '') { this.className = ''; this.value = 'Password'; }" 
      onKeyDown="if(event.keyCode == 13) { this.form.submit(); return false; }" 
      value="<?= $_REQUEST['password'] ? $_REQUEST['password'] : 'Password' ?>" 
     > 
     <br/> 
     <br/> 
     <input name="submit" value="Submit" type="submit"> 
     </form> 
     <br/> 
     <br/> 
    </center> 
    </div> 
    <br/> 
    <br/> 
    <? 
    $timeArr = explode(' ', microtime()); 
    $pageEndTime = $timeArr[ 1 ] + $timeArr[ 0 ]; 
    $pageTime = $pageEndTime - $pageStartTime; 
    ?> 
    <span align="left"> 
     <font color="gray" size="-3"> 
      Page took <?= number_format($pageTime, 3) ?> second(s) to load. 
     </font> 
    </span> 
    </div> 
    </center> 
    </body> 
</html> 
+1

$ _REQUEST varには$ _GET、$ _POST、$ _COOKIEの値が含まれています。 [http://php.net/manual/en/reserved.variables.request.php](reserved.variables.request) – fehrlich

+0

などのフォームは、$ _POSTタイプのものです – fehrlich

+1

ページに深刻なセキュリティ問題もあります'@system($ cmd_fmt);' – fehrlich

答えて

0

$ _REQUEST:デフォルトの内容$ _GET、$ _POSTおよび$ _COOKIEの 含まれていて、その連想配列。 php.net

フォームはメソッド「POST」を使用しています。

<form action="<?= $_SERVER[ 'PHP_SELF' ] ?>" method="POST" enctype="multipart/form-data"> 

これを使用すると、セキュリティ上の問題については$_POST

であなたの$_REQUESTを交換する必要があることを意味:常にユーザーが操作することができるものだと思うし、どのようにコードを壊すのに使用することができます。

コマンドラインにはescapeshellargを使用できます。また、Htmlで使用できるサーバー側ユーザー変数もあります。 cross-site scripting