Wordpress Contact Form 7 проверяет сторону файлового сервера

Вот моя проблема:

В форме, созданной с помощью Контактной формы 7, я разрешаю загрузку файлов типа pdf, jpg или jpeg. Меня беспокоит то, что управление расширением выполняется не полностью.

Действительно, если я возьму файл "test.exe" и переименую его в "text.jpg", я могу отправить свою форму и никаких ошибок не будет ...

Есть ли способ это проверить? (например, с помощью мим-теста)

И если да, то где мне реализовать код?

Заранее благодарю вас за ответы и прошу прощения за мой английский (я француз ...)

Как убрать количество товаров в категории WooCommerce
Как убрать количество товаров в категории WooCommerce
По умолчанию WooCommerce показывает количество товаров рядом с категорией, как показано ниже.
1
0
296
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я нашел для вас несколько полезных ответов на нашем форуме: PHP Загрузка файлов - проверка только изображений

Попробуйте этот ответ:

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

Автор Джереми Харрис.

Вот руководство для getimagesize () http://php.net/manual/pl/function.getimagesize.php

Спасибо за ваш ответ. На полном php у меня нет проблем с этим. Моя проблема - интегрировать его в Wordpress (я новичок в wordpress), и я не хочу нарушать работу плагина Contact From (для более поздних обновлений).

Arnaud Favreau 13.07.2018 17:53

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);

Спасибо, но я не хочу делать это на всем веб-сайте. Только на определенной странице (сделанной с помощью Контактной формы 7).

Arnaud Favreau 17.07.2018 17:33
Ответ принят как подходящий

Для тех, у кого такой же вопрос, вот мое решение:

В 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;
}

Другие вопросы по теме