Проверка изображения php - PullRequest
       0

Проверка изображения php

2 голосов
/ 31 августа 2011

Таким образом, у кого-то есть идея, почему этот код не работает для меня

$type1 = $_FILES['textfield2']['type'];
$type2 = $_FILES['textfield3']['type']; 

if($type1 == 'image/gif' || $type1 == 'image/png' && $type2 == 'image/gif' || $type2  == 'image/png')
{
    echo 'Valid';
    echo $type1.'<br />'.$type2;
}
else
{
    echo 'Invalid';
}

Если я выберу 1-й файл в виде zip-файла или любого другого формата, а затем в качестве png, то получу подтверждение, что яне должен

Ответы [ 3 ]

2 голосов
/ 31 августа 2011

PHP * приоритет оператора делает && bind более жестким, чем ||, поэтому ваш тест выглядит так:

if($type1 == 'image/gif' || ($type1 == 'image/png' && $type2 == 'image/gif') || $type2  == 'image/png')
                            ^----------------------------------------------^

Кроме этого, не используйте предоставленные пользователем ['type']Данные для этого.Подделать его очень просто, и кто-то может установить «image / gif» при загрузке nastyvirus.exe.

1 голос
/ 31 августа 2011

Это связано с приоритетом оператора . && имеет более высокий приоритет, чем ||, поэтому ваше выражение приводит к:

    $type1 == 'image/gif'
|| ($type1 == 'image/png' && $type2 == 'image/gif')
||  $type2 == 'image/png'

Используйте скобки, чтобы прояснить свое намерение:

   ($type1 == 'image/gif' || $type1 == 'image/png')
&& ($type2 == 'image/gif' || $type2 == 'image/png')

Кроме того, обратите внимание, что тип mime является данными, предоставленными клиентом, и поэтому им очень легко манипулировать. Вместо этого вам следует проверить правильность заголовка файла GIF / PNG (например, используя библиотеку GD .)

1 голос
/ 31 августа 2011

Попробуйте:

if(($type1 == 'image/gif' || $type1 == 'image/png') && 
   ($type2 == 'image/gif' || $type2  == 'image/png'))
        {
            echo 'Valid';

            echo $type1.'<br />'.$type2;
        }
        else
        {
            echo 'Invalid';
        }

Это связано с приоритетом оператора, который задокументирован здесь: http://php.net/manual/en/language.operators.precedence.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...