• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Gooden

Sistema Download hidden

13 mensagens neste tópico

Bom isto é o seguinte eu queria saber como funciona os sistemas de downloads tipo  rapidshare.

Porque os links directos para os ficheiros não tao disponiveis. Tem de se ir atraves de Tickets ??

Alguem me podia  esplicar e se poder arranjar um exemplo de como funciona.

e eskecime de uma coisa :D controlar tipo limites de downloads etc... tipo o hdd

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma forma seria (deve haver muitas), guardares os links numa base de dados e depois com um simples script mandavas o conteúdo desse link como header de forma que no browser do utilizador o ficheiro seja "sacável". Assim, o link directo está escondido e para protecção extra, deves sempre puder definir algumas protecções para não permitir acesso directo a esse directório, mas só usando o script.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu nunca me meti a analizar o funcionamento desses sistemas mas pela lógia quase que metia as minhas mãos no fogo que funcionam assim:

Assim que o servidor web recebe um pedido http cujo url seja o de um ficheiro, então a aplicação web, tenta ver se o utilizador está logado procurando para isso um cookie. Se este existir e for válido então envia-se o ficheiro através de um socket tcp adicionando só os respectivos headers no inicio.

Se o utilizador não estiver ligado, então mostra-se aquela pagina que pergunta se queremos continuar com um acesso gratuito, se queremos registar ou se nos queremos autenticar. Se usarmos a opção gratuita, então é emitido um bilhete qualquer temporário, que atribui ao respectivo ip a possibilidade de receber o ficheiro passados não sei quantos segundos. Claro que esse bilhete temporario tem validade e esta é gerida pelo servidor deles, para alem disso só deve ser valida para um ip. Se não podias pegar num analizador de trafego ( wireshark por exemplo ) e sacar o pedido HTTP que tem como resposta o ficheiro.

É importante entender que o protocolo http não tem que ser usado da forma que estamos habituados que é, por uns ficheiros numa directoria, o servidor fazer um mapeamento de urls para esses ficheiros e o utilizador poder fazer download deles.

O protocolo http pode ser usado para enviar dados de qualquer natureza e da forma que se quiser, dentro das suas limitações claro está.

Moral da história: um sistema que se baseie em esconder o url ( e headers do pedido ) não é uma protecção efectiva pois por muito que se esconda esse url é sempre possivel de descobrir. A solução é mesmo um url único para cada acesso.

Espero não ter explicado de forma confusa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pedro tuga esse wireshark tbm tem linux???

Uma forma seria (deve haver muitas), guardares os links numa base de dados e depois com um simples script mandavas o conteúdo desse link como header de forma que no browser do utilizador o ficheiro seja "sacável". Assim, o link directo está escondido e para protecção extra, deves sempre puder definir algumas protecções para não permitir acesso directo a esse directório, mas só usando o script.

também axo que a lógica seja essa. mas tipo eu keria controlar os limites... isso era o mais importante... porque por exemplo... o meu objectivo é para uma comunidade onde dependendo do teu desempenho tens direito a X megas de downloads. entendes???

por isso é que eu queria um certo controlo em "esconder" ou proteger o download do ficheiro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso é perfeitamente possivel mas dá trabalho a implementar.

Sim, o wireshark usa o GTK, por isso sim, corre em onde o gtk estiver instalado, como é o caso de qualquer ambiente de trabalho que use o gtk ou que o tenha instalado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mas tipo desculpa lá estar a ser chato mas com isso do do wireshark é possivel fazer em php tipo filtros de limites por ip's e isso??? Sem contar que não vai ser necessário pelos vistos. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O Wireshark apenas captura pacotes, bastava teres pesquisado para o saberes.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei exactamente como isso funciona mas eu a implementar fazia assim.

Tinha na base de dados tinha uma tabela com o nome do ficheiro, o path real e o path fictício, quando um pedido é feito ao servidor ele procurar pelo link nos paths fictícios se encontrar reencaminha o conteúdo para o cliente possivelmente com http headers apropriadas para evitar a descoberta dos paths reais.

Para saber se o utilizador já fez algum download podes também usar a base de dados onde tens o IP, e a hora a que o download foi feito. Depois podes usar um script ou até mesmo um trigger para ir removendo os IPs que já podem sacar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei exactamente como isso funciona mas eu a implementar fazia assim.

Tinha na base de dados tinha uma tabela com o nome do ficheiro, o path real e o path fictício, quando um pedido é feito ao servidor ele procurar pelo link nos paths fictícios se encontrar reencaminha o conteúdo para o cliente possivelmente com http headers apropriadas para evitar a descoberta dos paths reais.

Para saber se o utilizador já fez algum download podes também usar a base de dados onde tens o IP, e a hora a que o download foi feito. Depois podes usar um script ou até mesmo um trigger para ir removendo os IPs que já podem sacar.

até certo pontos ja entendi.... falta e entender essa parte dos headers... que era o que me interessava realmente.... tipo isto?:

code:

<?php

if(ini_get('zlib.output_compression'))

ini_set('zlib.output_compression', 'off');

// Prevent abuse

$file = str_replace(array("/", ".."), "", $file);

//set allowable extensions

$ext_filter = array("rar");

//get file extension

$file_extension = strtolower(substr(strrchr($file,"."),1));

if (!in_array($file_extension, $ext_filter)) {

exit('Não tem premições.');

} else if (!file_exists($file)) {

exit('Ficheiro não existe.');

}

//do download

header("Pragma: public");

header("Expires: 0");

header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

header("Cache-Control: private",false);

header("Content-type: application/force-download");

header("Content-Disposition: attachment; filename=\"".basename($file)."\";" );

header("Content-Transfer-Encoding: binary");

header("Content-Length: ".filesize($file));

readfile("$file");

exit();

?>

O Wireshark apenas captura pacotes, bastava teres pesquisado para o saberes.

Ya mas podia ter algum code para através de php aceder a esses pacotes ou até a quantidade de informação mandada para um certo ip.... ou não?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu falei no wireshark só para frizar que por um url não ser visivel a um utilizador enquanto este navega usando o seu browser, pode sempre ser descoberto utilizando um packet sniffer o wireshark por exemplo.

Mas isso não tem nada a ver com o que implementas no servidor.

Esse código que aí tens não faz qualquer tipo de protecção pois deita o ficheiro cá para fora sem qualquer verificação.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim mas se eu fizer um if com uma funçao de verificar user e fazer as ceninhas todas depois axam que e possivel pegar e ver o Tamanho do ficheiro adicionar ao historico do utilizador e fazer calculos verificaçoes etc.....

if (premitido) {

exit('Fazendo Download.....');

//do download

header("Pragma: public");

header("Expires: 0");

header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

header("Cache-Control: private",false);

header("Content-type: application/force-download");

header("Content-Disposition: attachment; filename=\"".basename($file)."\";" );

header("Content-Transfer-Encoding: binary");

header("Content-Length: ".filesize($file));

readfile("$file");

exit();

} else {

exit('Não premitido.');

}

?>

por exemplo tas a entender??? eu tava a usar aquele codigo para saber se quando falavam de headers era aquilo que tavam a falar X)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim é isso. Esse código tem alguns bugs, mas é isso.

É perfeitmente possivel fazer essas coisas todas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

fixe. :) Mais uma vez pessoal agradeço a vossa ajuda :D Tava meio enferrujado com o PHP :)

Brigado mais 1 vez :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora