0

我在 Drupal 9 中创建了一个 Web 表单,并且我使用的是文档字段类型的文件上传字段。我们在设置中添加了仅接受 pdf、doc、docx 文件的条件。然而,用户可以使用exploit throught 脚本上传php 文件。但是在服务器上,我们检查了上传的 php 文件是否使用扩展名 txt 保存。

例如用户上传了test.php 文件,它在服务器上保存为test.php.txt 文件。

有没有办法限制用户上传php文件?

谢谢,阿克谢夏尔马

4

1 回答 1

1

您可以尝试在自定义模块中创建表单验证。 示例

在您的 custom.module 中:

 function custom_module_form_alter(&$form, FormStateInterface $form_state, $form_id) {
      if ($form_id == 'webform_submission_yourformid_add_form') {
        $form['#validate'][] = 'yourcustommodule_form_validate';     
      }
  }




  public function yourcustommodule_form_validate(array &$form, FormStateInterface $form_state) {
   
      $extensions= array('doc','docx','pdf');

      $files  = $form_state->getValue('yourfilefield');
      foreach($files["uploaded_files"] as $item => $val){
          $filename=  $val["filename"];
          $ext = pathinfo($filename, PATHINFO_EXTENSION);
          if (!in_array($ext, $extensions)) {
            $form_state->setErrorByName('yourfilefield', t('Error') );
          }
      }
}
于 2020-10-27T10:48:53.950 回答