2016-07-12 7 views
0

Я знаю достаточно кода, чтобы быть опасным, но не мог написать что-то с нуля, если бы от этого зависела моя жизнь. Я переношу веб-сайт на новый хостинг, который имеет более новую версию PHP, которая не позволяет $ _REQUEST (я думаю). Этот код предназначен для шифрования 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

Ваша форма использует метод «пост»:

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

это означает, что вам нужно заменить ваш $_REQUEST с $_POST

Для вопросов безопасности: всегда думают, что пользователь может манипулировать быть и как его можно использовать для разрыва кода.

Для вашей командной строки вы можете использовать escapeshellarg. У вас также есть серверные User-Variables, которые можно использовать в Html. См.

Смежные вопросы