Pergunta

Os critérios é basicamente isso:

  • pastas existirá por cerca 24-48hrs
  • pastas nomes não podem ser facilmente guessable por um usuário (se for usado em uma URL)
  • nomes de pasta deve ser curto 5-15 caracteres

pensamentos iniciais:

printf('%u',crc32(microtime(true)));

Detalhes: Ao fazer upload de um arquivo, eu basicamente quer manter o nome do arquivo original como nomeado pelo carregador, de modo a evitar qualquer colisão de nomes que eu gostaria de colocá-lo em um diretório exclusivamente nomeado ...

Foi útil?

Solução

[Edit] Espere um segundo. PHP inclui direito na biblioteca padrão de um Unique ID função de gerador . Há outras abordagens também.

Outras dicas

A técnica clássica é algo como

  + uploader-name  
    + 20090401
      + 010000     // hhmmss
      + 013000     // hhmmss
      + 014500     // hhmmss
    ...

    + 20090402

acrescentando níveis, acrescentando "a", "b", "c", ... etc. baseado em granularidade desejada.

Isso funciona esp. bem se o usuário se relaciona com os arquivos em tudo cronologicamente.

Você acaba fazendo algumas enumerações existência, mas não é tão doloroso. Eu usei isso muitas vezes (incluindo com PHP), principalmente porque a resistência do usuário é menor do que para qualquer alternativa que eu encontrei.

Se você é tão inclinado que você pode embelezar as expressões de data -. "2009-Abr-01", "01:45 AM", etc

A língua não foi especificado, em Ruby eu faria:

require 'digest/md5'
Digest::MD5.hexdigest(Time.now.to_s)

=> "f531384b3cc8c60b7c5b7ad087cb0ae4"

Isso soa como uma "segurança por obscuridade" problema. Eu recomendaria contra qualquer coisa que cria dados potencialmente sensíveis e expõe-lo (mesmo que por um curto período de tempo) de uma forma que é segura só porque há uma expectativa de que ninguém vai adivinhar a localização. existem bruta ataques de força, e eles podem rasgar este tipo de "segurança".

Use a data e hora, a fim de gerar o nome

Eu usaria algo como:

$salt='Whatever you want';
$folderName=SHA1($salt.date('U'));

Date ( 'U') retorna os segundos desde o Unix Epoch (01 de janeiro de 1970 00:00:00 GMT) para que ele provavelmente vai ser único, a menos que você está gerando várias pastas ao mesmo tempo?

Nesse caso, apenas sutilmente alterar o valor $ sal (torná-lo um nome de usuário ou número aleatório etc).

Baseando o hash (ou md5 ou sha) no tempo torna guessable se o usuário sabe mais ou menos quando o diretório é gerado. Tudo que eles precisam fazer é configurar um script simples para gerar todas as possibilidades cobertas um ou outro lado alguns segundos e depois bateu o site à procura de uma resposta. Adição de um sal, enquanto ele vai ajudar, não faz muito bom no longo prazo.

Para o OP, o acima significa verdade para qualquer método. Se a execução de um servidor muito rápido, você vai precisar para monitorar os hits contra diretórios aleatórios. Só tem 5 letras diretórios significa que alguém poderia bater manualmente o site vezes o suficiente para descobrir o diretório. 15 faz aumentá-lo um pouco, mas com algumas máquinas fazendo isso de uma maneira script, ele não está fora de possibilidade.

C ++ padrão tem funções tmpfile e tmpnum, tanto no cstdio (stdio.h), e cria um ficheiro temporário e nome de ficheiro temporário em conformidade. tmpfile é excluído no final do programa embora. Eu ligá-los, mas infelizmente eu não posso postar links ainda.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top