Eu tenho um caso de uso muito específico em que o site criado para um advogado e cada um de seus clientes pode fazer login em sua própria 'página / portal específico' (tipo de postagem personalizado) sem a capacidade de acessar o wp-admin etc. (criei todos os páginas de login / registro / edição de perfil no front-end). Nesta página / portal, o advogado deixará mensagens e arquivos para download do cliente , agora teoricamente falando, um cliente pode adivinhar (ou se tiver conhecimento dos arquivos de outro cliente) outros nomes de arquivo e fazer o download, criando um problema de privacidade / segurança / material confidencial etc.
Estou procurando idéias / conceitos para uma solução, meu pensamento inicial era ter o link de download apontado para algum download.php enviando o ID do anexo, o ID do usuário, o ID da página / portal e o nonce e, por outro lado, processando isso. .
O que você acha? Estou no caminho certo ou esta abordagem é falha?
Obrigado!
Respostas:
O que precisa acontecer é que você precisa solicitar solicitações de download por proxy para os tipos de arquivos que deseja através do WordPress. Vamos supor que você restrinja o acesso a arquivos ".doc".
1. Defina uma variável de consulta que indica o arquivo solicitado
2. Atualize .htaccess para encaminhar solicitações de arquivos restritos ao WordPress
Isso capturará solicitações para os arquivos que você deseja restringir e as enviará de volta ao WordPress usando a variável de consulta personalizada acima. Insira a seguinte regra antes das
RewriteCond
linhas.3. Capture o nome do arquivo solicitado na variável de consulta personalizada; e verifique o acesso ao arquivo:
Nota: esta solução funciona apenas para instalações de site único ! Isso ocorre porque o MU do WordPress já encaminha solicitações de arquivos carregados em sub-sites
wp-includes/ms-files.php
. Também existe uma solução para o MU do WordPress, mas é um pouco mais envolvida.fonte
intercept_file_request
ou que esteja sendo chamada em qualquer lugar, como essa função é acionada?wp
, atualizei o exemplo.Recentemente, tive um problema relacionado e escrevi este artigo sobre ele .
Suponho que os downloads sejam enviados por meio da manipulação de mídia do WordPress - ou você tem um ID de anexo para o download.
Esboço da solução
.htaccess
para bloquear qualquer tentativa de acessar diretamente os arquivos no diretório de uploads (ou um subdiretório) - por exemplo, viamysite.com/wp-content/uploads/conf/2012/09/myconfidentialfile.pdf
)Ressalvas
.htaccess
para fornecer segurança . Se isso não estiver disponível / ativado (servidores nginx, por exemplo), você não terá muita segurança. Você pode impedir que o usuário navegue no diretório uplods. Mas o acesso direto funcionará.Bloqueando o acesso direto
Para fazer isso na sua pasta de uploads (ou em uma subpasta - todo o material confidencial deve residir, a qualquer profundidade, dentro desta pasta). Coloque um
.htaccess
arquivo com o seguinte:A seguir, suponho que você anexará material confidencial ao tipo de postagem 'cliente'. Qualquer mídia carregada na página de edição do cliente será armazenada na
uploads/conf/
pastaA função para configurar o diretório de uploads protegidos
Upload de material confidencial
Feito isso, o conteúdo carregado deve estar dentro
uploads/conf
e a tentativa de acessá-lo diretamente usando o navegador não deve funcionar.Download de conteúdo
Isso é facil. O URL do download pode ser algo
www.site.com?wpse26342download=5
(em que 5 é o ID do anexo do conteúdo carregado). Usamos isso para identificar o anexo, verificar as permissões do usuário atual e permitir o download.Primeiro, configure a variável de consulta
Agora configure um ouvinte para (talvez) acionar o download ...
Comentários finais
O código acima pode conter erros de bugs / sintaxe e não foi testado, e você o utiliza por sua própria conta e risco :).
O URL do download pode ser "pré-modificado" usando reescritas. Conforme declarado nos comentários, você pode adicionar um espaço
index.php
em branco dentro de cada filho da pasta protegida para impedir a navegação - mas isso deve ser evitado pelas.htaccess
regras de qualquer maneira.Um método mais seguro seria armazenar os arquivos públicos fora de um diretório público. Ou em um serviço externo como o Amazon S3. Para o último, você precisará gerar um URL válido para buscar o arquivo da Amazon (usando sua chave privada). Ambos exigem um certo nível de confiança no seu host / serviço de terceiros.
Eu ficaria cauteloso ao usar quaisquer plug-ins que sugiram que eles oferecem 'downloads protegidos'. Não encontrei nenhum que ofereça segurança suficiente. Por favor, não as advertências desta solução também - e eu gostaria de receber sugestões ou críticas.
fonte
Provavelmente, você já deve ter conhecido esse truque. Esse código verificará o nome de usuário do usuário conectado no momento e, se ele corresponder, exibirá o link de download para esse arquivo, caso contrário, não mostrará nada.
aqui está o código:
No entanto, essa não será uma boa abordagem, como os arquivos são armazenados nos servidores, qualquer pessoa com link pode fazer o download desse arquivo.
fonte
Suponho que essas informações sejam confidenciais e, portanto, além de ocultar os links para os arquivos, você deseja torná-los inacessíveis completamente a qualquer pessoa na web, mesmo que adivinhem o URL, a menos que o usuário tenha permissão explícita para fazer o download os arquivos.
Examine o armazenamento seguro dos arquivos no Amazon S3 e, em seguida, forneça URLs pré-assinados (com tempo limitado) para o arquivo, desde que as verificações de segurança corretas tenham sido atendidas (por exemplo, o usuário fez login no site e é quem eles dizem que são).
Há um SDK da AWS muito bom que torna muito simples fazer isso.
O que você precisará pesquisar é como enviar arquivos enviados pela interface de upload do WP para o S3, em vez disso, criar o seu próprio remetente .
Outras opções também seriam procurar o código do WP e-commerce . Eles oferecem download seguro de arquivos de software (por exemplo, MP3s). Acredito que os arquivos sejam convertidos em hashes com uma chave de criptografia gerada por usuário na compra. Isso levaria uma certa decifração para ver como funcionava, mas o processo não será exclusivo desse plug-in, portanto outros exemplos estarão disponíveis (em algum lugar).
fonte
Eu acho que a criptografia dos arquivos é o caminho a seguir, como a resposta acima. Existe um plugin no Wordpress.org que permite proteger os downloads. http://wordpress.org/extend/plugins/download-protect/ Você também pode usar o serviço amazons ou o google drive. Existem muitos serviços que oferecem downloads protegidos, como o drop box.
fonte