Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Ocultando URL dos arquivos (PHP ou JS)

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Tutorial Ocultando URL dos arquivos (PHP ou JS)

    Por segurança, por beleza ou por outras razões muitos de nós desenvolvedores ocultam o endereço original do arquivo, mostrando outro endereço no lugar. Isto deve ser feito com cuidado, pois pode abrir brechas na segurança do seu projeto, se mau desenvolvido.
    Pensando nisso, escrevi este pequeno informativo, mostrando as diferentes maneiras de se fazer o feito. Procuremos não copiar códigos, mas estudá-los, dissecá-los para que fique facilitado na hora de editá-lo.
    São várias maneiras, mas, como diz o velhíssimo ditado, a segurança vem em primeiro lugar. Por isso, primeiro vamos estudar a maneira mais rápida e mais perigosa de se fazer. Como alguns dizem, o visitante é seu pior inimigo. E, neste caso, pior é um termo muito relativo.

    <?
    // Fazemos include para a página que a variável "página" aponta.
    include($_GET['pagina']);
    ?>

    Percebeu o perigo? O include é feito na página que a variável mandar. Isto quer dizer que se um usuário mal-intencionado apontar para uma outra página, com um código malicioso para fazer sabe-se lá, ele vai ter sucesso na operação. Não adianta afirmar que seu servidor é bloqueado contra includes de terceiros, pois muitos dos sites possuem outras brechas de segurança que vamos tratar numa próxima vez. Pelo sim ou pelo não, nunca faça dessa forma. Se você quiser ser rápido, o melhor a fazer é o seguinte:

    <?
    // desativamos as aspas
    $pagina = addslashes($_GET['pagina']);

    // definimos o caminho deste arquivo
    $arquivo = "arquivos/".$pagina.".htm";

    // verificamos a existência do arquiv
    if (file_exists($arquivo)) {
    // fazemos o include
    include($arquivo);
    } else {
    // se o arquivo não existir, por questões de segurança, ele pára.
    exit;
    }
    ?>

    Neste caso, a segurança é maior. O link ficaria desta forma:
    ?pagina=sobre

    Modo B:
    Esta é uma forma segura, simples e eficaz que apresenta maior segurança.

    <?
    // desativamos as aspas
    $pagina = addslashes($_GET['pagina']);

    // verificamos o que está escrito e fazemos o include

    if($pagina=="inicio"){
    include("inicio.php");
    }
    elseif($pagina=="sobre"){
    include("sobre.php");
    }
    else {
    // se nao estiver escrito nada disso, ele vai para a página inicial
    header("Location: /?pagina=inicio");
    }
    ?>

    Este meio é seguro, pois possui as variáveis aceitáveis definidas pelo programador.
    O link ficaria assim:
    ?pagina=sobre

    Modo C:
    Esta é uma outra maneira com resultados semelhantes ao modo B. O nível de segurança é o mesmo.

    <?
    $pagina = $_GET["pagina"];

    switch($pagina){
    case "inicio":
    $url = "inicio.php";
    break;
    case "sobre":
    $url = "sobre.php";
    break;
    default:
    $url = "inicio.php";
    break;
    }
    include($url);
    ?>

    Considerando "case" como "if", o segundo "case" como "elseif" e "default" como "else" fica fácil entender o código, pois, como já disse, é uma alternativa ao modo B.
    O link ficaria desse jeito:
    ?pagina=sobre

    Modo D:
    Esta também é uma maneira segura e eficaz, que só se diferencia na forma do link. Na verdade, é como o Orkut: uma gambiarra que dá certo.

    <?
    if (isset($_GET['home'])) {
    $page = "home.htm";
    }
    if (isset($_GET['sobre'])) {
    $page = "sobre.htm";
    }

    // agora fazemos o include
    // você pode colocar o include em qualquer lugar da página html.
    include($page.".".$extensao);

    ?>

    E o link seria:
    ?sobre

    Modo E:
    Novamente, uma opção: uma alternativa ao modo D.
    O diferencial deste modo é poder escolher o que aconteceria se o usuário digitasse o link com o parâmetro incorreto.

    <?
    $pagina = getenv("QUERY_STRING");
    if($pagina=="") {
    header ("Location: /?inicio");
    }

    elseif (ereg("inicio",$pagina)) {
    include "inicio.htm";
    }

    elseif (ereg("sobre",$pagina)) {
    include "sobre.html";
    }

    else {

    header("Location: /?inicio");
    }

    ?>

    Como em toda alternativa, o nível de segurança é o mesmo.
    E, o link, como era de se suspeitar:
    ?sobre

    Modo F
    Esta é a maneira de se fazer utilizando JavaScript, um client-side. Claro que, apesar da segurança contra invasões ser excelente, qualquer usuário com um pouco mais de conhecimento consegue saber o real endereço da página. Fazemos isso mais por uma questão de estética. Primeiramente, vamos usar uma função pronta para receptar variáveis em formulários GET: getQueryVariable().

    <html>
    <head>
    <script type="text/javascript">
    function getQueryVariable(variable) {
    var query = window.location.search.substring(1);
    var vars = query.split("&");
    for (var i=0;i<vars.length;i++) {
    var pair = vars[i].split("=");
    if (pair[0] == variable) {
    return pair[1];
    }
    }
    alert("Variável " + variable + " não encontrada.");
    }

    Em seguida, vamos criar nossa função. Ela usará o valor que está escrito em um campo, pego pela função acima, e mostrará a página dentro do iframe.

    function mostrar(id,ext) {
    var url = getQueryVariable(id);


    document.write('<iframe id="jURL" name="jURL" frameborder="0" marginheight="0" marginwidth="0" scrolling="auto" src="' + url + "." + ext + '" width="100%" height="100%" allowtransparency="true">Navegador não compatível. Atualize-o.</iframe>');

    }
    </script>
    </head>

    Criada nossa função, encerramos o Header e iniciamos o Footer, onde chamaremos a função mostrar().

    <body>
    <script> mostrar("pagina", "htm"); </script>
    </body>
    </html>

    Façamos apenas isto e nossa função se encarregará de fazer o restante. O uso da função mostrar(), que criamos, é o seguinte:
    mostrar("nome do campo", "extensão dos arquivos");
    E o link ficaria desta forma:
    ?pagina=sobre

    Modo G
    Esta é uma alternativa à anterior. Suas vantagens são: usar variáveis já definidas e previstas e poder colocar uma página de erro 404.

    <html>
    <head>
    <script type="text/javascript">
    function getQueryVariable(variable) {
    var query = window.location.search.substring(1);
    var vars = query.split("&");
    for (var i=0;i<vars.length;i++) {
    var pair = vars[i].split("=");
    if (pair[0] == variable) {
    return pair[1];
    }
    }
    alert("Variável " + variable + " não encontrada.");
    }
    function mostrar(id,ext) {
    var pedido = getQueryVariable(id);
    if (pedido=="inicio") {
    url = "inicio";
    }
    else if (pedido=="sobre") {
    url = "sobre";
    }
    else {
    url = "inicio";
    }

    document.write('<iframe id="jURL" name="jURL" frameborder="0" marginheight="0" marginwidth="0" scrolling="auto" src="' + url + "." + ext + '" width="100%" height="100%" allowtransparency="true">Navegador não compatível. Atualize-o.</iframe>');

    }
    </script>
    </head>
    <body onLoad="mostrar("pagina", "htm");">
    </body>
    </html>

    E o link ficaria semelhante ao anterior:
    ?pagina=sobre

    Bem, considerando que já foi o bastante, vamos parar por aqui. Claro que há milhares de outras maneiras para se fazer isso. Isso foi só uma iniciação. Esperamos que você estude bastante o código, principalmente se o assunto for novo para você. A cópia não é permitida. A penalidade não é perante a lei, mas perante seu conhecimento. A não-aprendizagem proposital é um crime perante a ele. Se você já for um nativo e quiser mostrar uma outra maneira, sinta-se à vontate, pois o formulário de comentários é logo abaixo.

    Ao utilizar desses sistemas lembre-se de moderar, coloque-se no lugar do visitante que quer decorar o endereço de uma página interessante e veja se ficou fácil.
    Até a próxima.
    Este material pode ser compartilhado, desde que os devidos créditos sejam dados.



    Notify-list · Twitter · Blog

    Nova lei: Invadir computadores protegidos é crime.
    Lógica: Se eu invadi, não é protegido. Logo, não é crime :-)
    Similar Threads
X
Working...
X