Wordpress Contact Form 7 检查文件服务器端

Wordpress Contact Form 7 check file server side

这是我的问题:

在 Contact Form 7 制作的表格中,我允许下载 pdf、jpg 或 jpeg 文件类型。 我担心的是扩展控制没有完全执行。

事实上,如果我拿一个 "test.exe" 文件并将其重命名为 "text.jpg",我可以提交我的表格并且没有错误...

是否有测试这个的解决方案? (例如通过 mime 测试)

如果可以,我应该在哪里实现代码?

提前感谢您的回答,对不起我的英语(我是法国人...)

我在我们的论坛中为您找到了一些有用的答案: PHP Uploading files - image only checking

试试这个答案:

<?php
  function isImage($img){
      return (bool)getimagesize($img);
  }
?>

杰里米·哈里斯发布。

这里是getimagesize()的使用说明 http://php.net/manual/pl/function.getimagesize.php

Wordpress 使用过滤器 upload_mimes 来控制站点范围内允许的 MIME 类型。您可以通过将以下内容添加到 wp-includes/functions.php:

来自定义此列表
function safe_mime_types($mime_types){
    unset($mime_types['exe']);  //remove .exe support
    return $mime_types;
}
add_filter('upload_mimes', 'safe_mime_types', 1, 1);

您还可以添加可接受的 MIME 类型:

function safe_mime_types($mime_types){
    $mime_types['svg'] = 'image/svg+xml';  //add .svg support
    unset($mime_types['exe']);
    return $mime_types;
}
add_filter('upload_mimes', 'safe_mime_types', 1, 1);

有同样问题的朋友,我的解决方法是:

wp-includes/functions.php 中:

add_filter('wpcf7_validate_file*', 'cf7_custom_file_validation', 10, 2);
add_filter('wpcf7_validate_file', 'cf7_custom_file_validation', 10, 2);

function cf7_custom_file_validation ($result, $tag) {
    if ($tag->name === 'file-586') {
        $contentType = mime_content_type($_FILES[$tag->name]['tmp_name']);

        if ($contentType !== 'image/png' && $contentType !== 'image/jpeg' && $contentType !== 'application/pdf') {
            $result->invalidate($tag, 'Ce type de fichier n\'est pas supporté');
        }
    }

    return $result;
}