Por que os períodos duplos (“..”) são inválidos em um nome de arquivo de imagem do Wordpress?

4

ms-files.php contém o seguinte fragmento de código:

$file = rtrim( BLOGUPLOADDIR, '/' ) . '/' . str_replace( '..', '', $_GET[ 'file' ] );
if ( !is_file( $file ) ) {
    status_header( 404 );
    die( '404 — File not found.' );
}

Este código determina se o arquivo pode ou não ser encontrado. No entanto, faz algo que eu acho ... Estranho. Remove todos os períodos duplos ("..") da string. Normalmente, isso não importa, mas fizemos com que os usuários façam upload de arquivos com dois períodos consecutivos (suspiro), fazendo com que essa parte do código relate incorretamente o código 404 (não encontrado).

Estou tentado a remover a estranha natureza de remoção do período duplo deste código, mas temo que, inadvertidamente, eu quebre outra coisa. Por que esta funcionalidade está presente como está codificada?

Obrigado! :)

Editar: para ficar claro, parece que os períodos duplos NÃO são inválidos no Wordpress, mas eles não podem ser servidos por esse código ... Então, eles não são inválidos, mas quando acessados via este mecanismo, 404 é relatado incorretamente.

    
por rinogo 23.01.2014 / 02:08

1 resposta

4

Parece que isso é um defeito. Ish.

Como @s_ha_dum mencionado, isso é para evitar um ataque de passagem de diretório. No entanto, o Wordpress 'Media Library terá o prazer de enviar um arquivo com dois ou mais períodos seguidos, mesmo que ms-files.php se recuse a exibi-lo.

Então, nada é tecnicamente "quebrado", mas isso certamente não é o ideal. Há um patch para evitar isso, mas parece que nunca foi adicionado ao núcleo:

enlace

Mais informações sobre esse defeito: enlace

    
por rinogo 23.01.2014 / 02:18