Pular para o conteúdo
2 de outubro de 2018 / rafaelti

Proteger URL com Nginx

Objetivo

Proteger o acesso a uma URL através do Nginx

Plataforma

Linux, Nginx

Conhecimento

Linux, NGinx, MD5 e PHP

Introdução

Há varias formas de implementar um controle de acesso, um controle é fazer direto no servidor de aplicação

Solução

Para implementar a segurança no servidor de aplicação Nginx uma solução é utilizar o secure link module para utilizar na instalação atráves do gerenciador do pacote ou no ./configure utilizar o --with-http_secure_link_module

No config o location protegido deve seguir o código abaixo

location /secureurl/ {
.
.
.
    secure_token $args;
	secure_link_md5 "$secure_link_expires$uri$remote_addr secret";
	if ($secure_link = "") {
			return 403;
	}
	if ($secure_link = 0) {
			return 410;
	}
.
.
.
}

Para gerar a URL válida segue o código

<?php
/**
 * @param $baseUrl - non protected part of the URL including hostname, e.g. http://example.com
 * @param $path - protected path to the file, e.g. /downloads/myfile.zip
 * @param $secret - the shared secret with the nginx server. Keep this info secure!!!
 * @param $ttl - the number of seconds until this link expires
 * @param $userIp - ip of the user allowed to download
 * @return string
 */
function buildSecureLink($baseUrl, $path, $secret, $ttl, $userIp)
{
    $expires = time() + $ttl;
    $md5 = md5("$expires$path$userIp $secret", true);    
    $md5 = base64_encode($md5);
    $md5 = strtr($md5, '+/', '-_');
    $md5 = str_replace('=', '', $md5);
    return $baseUrl . $path . '?md5=' . $md5 . '&expires=' . $expires;
}
// example usage
$secret = 'secret';
$baseUrl = 'http://127.0.0.1';
$path ='/file/myfile';
$ttl = 1000;//no of seconds this link is active
$userIp = '127.0.0.1';//normally you would read this from something like $_SERVER['REMOTE_ADDR'];
echo buildSecureLink($baseUrl, $path, $secret, $ttl, $userIp);
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d blogueiros gostam disto: