21 de ago. de 2009

Multiple Upload IE8 (fakepath)

Bom estou escrevendo este artigo para detalhar um novo requisito da ferramenta Internet Explorer 8, mesmo por que eu procurei sobre o assunto, mas não encotrei muitas respostas, então acabei descobrindo um problema.

O IE 8 possui agora um item de segurança também existente no Opera Browser:A substituição do caminho do arquivo por um caminho falso.

Imagine que antes quando você selecionava um arquivo o caminho poderia ser capturado e enviado a um servidor, e via código seria possível acessar quaisquer arquivos existentes na sua máquina, até de maneira oculta, com isso o acesso a arquivo de senha gravadas para auto autenticação em sites e contas de e-mail, etc. Também é possível acessar cockies, entre outras informações. Lógico, quando se sabe o caminho em que estes arquivos estão gravados. Porém quando se tem a estrutura de pastas do sistema operacional(C:\ ou D:\) estes arquivos podem ser acessados, pois os locais de gravação seguem determinado padrão do próprio sistema operacional(e o SO pode ser identificado via javascript).

Mas como posso desenvolver um componente que funcione, sem que o usuário tenha que seguir procedimentos de adicionar o site como seguro, e etc? Tem como fazer isto?

Bom, o problema dos componente de Multi Arquivos da Web, é que eles criam os objetos de inputFile em tempo de execução, porém somente quando os arquivos devem ser realmente enviados. E geralmente a seleção dos arquivos é feita por apenas um componente input, e após isto o CAMINHO é gravado em uma lista, para que quando o arquivo for enviado um novo input seja criado e acessado pelo servidor.

O problema esta quando o componente tenta capturar o caminho do inputFile, agora quando o javascript tenta acessar o atributo "value" do inputFile o mesmo retorna o caminho falso, para que a segurança e integridade dos arquivos e senhas dos usuários seja garantida.


A solução é sempre que um arquivo tiver que ser selecionado, um novo objeto do tipo inputFile deve ser criado, pois com isso não iremos necessitar de nenhuma iteração com o caminho do arquivo, apresentando no máximo o nome do arquivo em uma lista.

Espero que as informações ajudem.

Nenhum comentário: