php - PDF uploader 脚本

标签 php security pdf upload file-rename

我花了 3 天的时间阅读和制作有关 PHP 上传脚本的教程,这些脚本用于将 PDF 文件上传到网站、重命名和移动文件。我似乎无法找到关于如何格式化脚本的一致答案。根据我的阅读,我认为以下内容对此过程很重要。我还没有找到 PDF 上传问题的良好可行答案。

  1. 通过服务器端 MIME 验证来验证 PDF 文件非常重要。
  2. Clamscan 对于保持网站清洁非常重要。上传后应立即执行此操作吗?
  3. 文件在经过类型验证且不含病毒之前不应可供访问。我的理解是,最好通过 PHP 的“重命名”功能来完成,该功能将允许移动和重命名。
  4. 我曾考虑过将 PDF 上传到我的 MySql 数据库中,但在阅读了大量在线建议后,我现在觉得这可能不是最适合我的网站的。

  5. 我将让客户通过 html 表单上传 pdf。

这是我使用的表格:

    <form action ="PHP UPLOAD.php" method="post" encrypte="multipart/form-data">
    File: <input type="file" name="file" size="30"> <input type="submit" value="upload!">
    </form>

这是我从在线教程开始使用的 PHP。

<?php

$uploaddir = "cover";
$allowed_ext = "pdf";
$max_size = "5000000";
//$max_height = "";
//$max_width = "";

$extension = pathinfo($_FILES['file'] ['name']);
$extension = $extension[extension];
$allowed_paths = explode(", ", $allowed_ext);
for($i = 0; $i < count($allowed_paths); $i++) {
if ($allowed_paths [$i] == "$extension") {
    $ok = "1";
}
}


if ($ok == "1")  {
    if($_FILES['file']['size'] > $max_size)
    {
        print "File is too big!";
        exit;
    }

// Include for images
//if ($max_width && $max_height) {
//list ($width, $height, $type, $w) =
//getimagesize($_FILES['file']['tmp_name']);
//if ($width . $max_width || $height > $max_height)
//{
//print "File height and/or width are too big!";
//exit;
//}
//}

if(is_uploaded_file($_FILES['file']['tmp_name']))
{
move_uploaded_file($_FILES['file']['tmp_name'],$uploaddir.'/'.$_FILES['file']['name']);
}
print "Your Cover Letter has been successfully uploaded!";
} else {
print "Incorrect file extension!";
}

?>

它向我返回了无效文件类型消息。

我找到了这段代码,它似乎是通过 Mime Type 进行的更好的验证,但似乎并不完整。

$allowedExts = array(
  "pdf", 
  "doc", 
  "docx"
); 

$allowedMimeTypes = array( 
  'application/msword',
  'text/pdf',
  'image/gif',
  'image/jpeg',
  'image/png'
);

$extension = end(explode(".", $_FILES["file"]["name"]));

if ( 20000 < $_FILES["file"]["size"]  ) {
  die( 'Please provide a smaller file [E/1].' );
}

if ( ! ( in_array($extension, $allowedExts ) ) ) {
  die( 'Please provide another file type [E/2]. );
}

if ( in_array( $_FILES["file"]["type"], $allowedMimeTypes ) ) 
{      
 move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); 
}
else
{
die( 'Please provide another file type [E/3]. );
}

我正在努力学习,但我似乎无法找到解决我的问题的非常清晰的路径。有人可以给我一些关于 PDF 上传和此过程的特别之处的明确答案吗?

对于背景,我使用 MAMP 和 Dreamweaver & Text Wrangler 在我的 MAC 上构建它。我将把这个实现到 GoDAddy 网站。因此,如果您知道我将面临的问题,我将不胜感激。

提前致谢!

最佳答案

我认为错误消息是因为您错过输入 enctype作为加密,请同时检查

<form action ="PHP_UPLOAD.php" method="post" enctype="multipart/form-data">
File: 
<input type="file" name="file" size="30"> 
<input type="submit" value="upload!">
</form>

关于php - PDF uploader 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12782980/

相关文章:

android - 防止共享我的应用程序的安全性

android - 确保 REST 服务仅由特定的 Android 应用程序使用

python - 在 python 中将 pdf 转换为文本/html,以便我可以解析它

Python3 Django -> HTML 到 PDF

java - 根据文件扩展名验证文件

javascript - Laravel:在允许 HTML 标签时,针对 XSS 清理用户输入

php - 使用ckeditor在网页上显示图像,在图像源中添加额外的双引号和斜杠

php - JavaScript 中 PHP 的 dirname(__FILE__) 的等价物?

php - 基于外键表列值的Mysql结果

mongodb - Mongo 3.2 SCRAM-SHA-1 身份验证问题