{"id":2684,"date":"2013-06-06T16:10:39","date_gmt":"2013-06-06T16:10:39","guid":{"rendered":"http:\/\/deuzebranaweb.com.br\/?p=2684"},"modified":"2013-06-06T16:10:39","modified_gmt":"2013-06-06T16:10:39","slug":"protegendo-suas-paginas-com-htaccess-do-apache","status":"publish","type":"post","link":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/2013\/06\/06\/protegendo-suas-paginas-com-htaccess-do-apache\/","title":{"rendered":"Protegendo suas p\u00e1ginas com .htaccess do Apache"},"content":{"rendered":"<h1>Protegendo suas p\u00e1ginas com .htaccess do Apache<\/h1>\n<p>O <em>\u201c.htaccess\u201d<\/em> \u00e9 um arquivo de configura\u00e7\u00e3o distribu\u00eddo (j\u00e1 que pode ser usado em v\u00e1rios diret\u00f3rios), sendo seu uso relacionado a webservers em geral, principalmente o <em>Apache<\/em>.<\/p>\n<p>Um arquivo, contendo uma ou mais diretivas de configura\u00e7\u00e3o, quando colocado dentro de um diret\u00f3rio, aplica essas diretivas a ele e a todos sub-diret\u00f3rios, tendo essa nova configura\u00e7\u00e3o prioridade sobre a estabelecida para este diret\u00f3rio no <em>httpd.conf<\/em>.<\/p>\n<p>Lembrando que voc\u00ea pode tamb\u00e9m mudar o nome do <em>.htaccess<\/em> para <em>.config<\/em>, por exemplo, atrav\u00e9s da diretiva <em>AccessFileName<\/em> do Apache (necess\u00e1rio permiss\u00e3o para isso).<\/p>\n<p>Entre as v\u00e1rias utilidades desse arquivo de configura\u00e7\u00e3o <em>(.htaccess)<\/em>, vamos destacar algumas abaixo, com rela\u00e7\u00e3o a seguran\u00e7a de p\u00e1ginas ou sites na internet:<\/p>\n<h2>AUTENTICA\u00c7\u00c3O<\/h2>\n<p>Digamos que voc\u00ea tenha criado um Administrador para seu site e este administrador esteja no endere\u00e7o www.seudominio.com.br\/admin e, al\u00e9m disso, precise proteger seu Administrador de modo f\u00e1cil, seguro e r\u00e1pido. Isso poderia ser feito da seguinte maneira:<\/p>\n<div align=\"left\">\n<pre>AuthType Basic\nAuthName \"TITULO DA JANELA\"\nAuthUserFile \"\/home\/usuario\/.htpasswds\/public_html\/admin\/passwd\"\nrequire valid-user<\/pre>\n<\/div>\n<p>Na configura\u00e7\u00e3o acima, \u00e9 estabelecido um tipo de autentica\u00e7\u00e3o no qual aparece uma janela solicitando usu\u00e1rio e senha para acessar determinada \u00e1rea (para trancar ou proteger a pasta <em>\u201cadmin\u201d<\/em>, basta colocar o arquivo <em>.htaccess<\/em> com as configura\u00e7\u00f5es acima na respectiva pasta).<\/p>\n<p>Na linha 2, pode-se colocar um nome ou t\u00edtulo para a janela que ir\u00e1 aparecer para o usu\u00e1rio.<\/p>\n<p>Na linha 3, est\u00e1 o endere\u00e7o do arquivo que cont\u00e9m os usu\u00e1rios e senhas dos quais t\u00eam acesso permitido \u00e0 \u00e1rea. Esse arquivo (<em>passwd<\/em>) n\u00e3o pode ser acessado externamente (quando configurado corretamente) e o seu conte\u00fado \u00e9 <em>\u201cusuario:6YNFCJWSDGpA2\u201d<\/em> . Repare que a senha (que vem depois dos \u2018dois pontos\u2019 e \u00e9 \u201cusuario\u201d) est\u00e1 encriptada para maior seguran\u00e7a.<\/p>\n<h2>INTRANET<\/h2>\n<p>Outra utilidade bastante interessante do <em>.htaccess<\/em> \u00e9 quando se tem uma Intranet rodando em um servidor web (que n\u00e3o seja interno a rede da empresa) e precisa-se permitir o acesso de determinados IPs (ou faixas de IPs) a essa Intranet. Pode-se, ent\u00e3o, usar o seguinte c\u00f3digo em um arquivo .htaccess e coloc\u00e1-lo no diret\u00f3rio onde est\u00e1 sua Intranet:<\/p>\n<div align=\"left\">\n<pre>&lt;Files pagina_erro_403.php&gt;\nOrder Deny,Allow\nDeny from all\nAllow from 192.168.\n&lt;\/Files&gt;<\/pre>\n<\/div>\n<p>O c\u00f3digo acima faz com que apenas os IPs da rede local, ou seja, os IPs do tipo \u201c192.168.x.x \u201c, onde \u201cx\u201d representa um n\u00famero de 0 a 255, seja permitido.<br \/>\nDessa forma, todos os outros IPs ser\u00e3o negados e nenhum IP fora da rede ser\u00e1 aceito onde possuir o arquivo .htaccess. Na primeira linha, \u00e9 definida uma p\u00e1gina que ser\u00e1 exibida \u00e0queles que n\u00e3o possuem permiss\u00e3o para acessar a \u00e1rea (nesse caso a p\u00e1gina de erro 403, ou acesso negado, ser\u00e1 exibida).<\/p>\n<h2>P\u00c1GINAS DE ERROS<\/h2>\n<p>As p\u00e1ginas de erros que s\u00e3o exibidas, como quando n\u00e3o se acha um arquivo ou p\u00e1gina no servidor e exibe uma p\u00e1gina de \u201cN\u00e3o Encontrado\u201d, podem ser personalizadas atrav\u00e9s do <em>.htaccess<\/em>.<\/p>\n<p>Essas p\u00e1ginas s\u00e3o importantes e deve-se dar uma aten\u00e7\u00e3o especial a elas, j\u00e1 que uma tentativa de ataque ou uma inten\u00e7\u00e3o maliciosa podem ser descobertas atrav\u00e9s de uma monitora\u00e7\u00e3o constante de logs ou avisos, gerados com o aux\u00edlio de linguagens din\u00e2micas (PHP, Python, etc). O c\u00f3digo abaixo mostra como se pode personalizar ou alterar essas p\u00e1ginas de acordo com suas necessidades ou interesses.<\/p>\n<div align=\"left\">\n<pre>ErrorDocument 403 \/acesso_negado.php\nErrorDocument 404 \/nao_encontrado.php\nErrorDocument 500 \/erro_interno_servidor.php<\/pre>\n<\/div>\n<p>No c\u00f3digo acima, foram personalizados os erros mais comuns (note que aos erros s\u00e3o associados n\u00fameros), e existem v\u00e1rios erros, como os erros de n\u00famero 400, 401, 402 que s\u00e3o associados aos \u201cerros de cliente\u201d, e os erros acima de 500 que s\u00e3o associados aos \u201cerros de servidor\u201d.<\/p>\n<p>Na primeira linha, \u00e9 definida uma p\u00e1gina para quando o usu\u00e1rio n\u00e3o tem permiss\u00e3o de acesso.<br \/>\nNa segunda, quando um usu\u00e1rio tenta acessar um arquivo ou diret\u00f3rio inexistente no servidor, ser\u00e1 exibida a p\u00e1gina \u201cn\u00e3o_encontrado.php\u201d.<br \/>\nE, por \u00faltimo, ser\u00e1 exibido a p\u00e1gina \u201cerro_interno_servidor.php\u201d quando acontecer um erro interno no servidor.<\/p>\n<p>Com esse recurso, voc\u00ea pode criar uma p\u00e1gina PHP (por exemplo) que envia um e-mail e\/ou armazena em algum banco de dados as informa\u00e7\u00f5es do usu\u00e1rio que acessou tal p\u00e1gina e, caso perceba algo suspeito, tomar\u00e1 provid\u00eancias de modo a corrigir uma suposta falha ou problema de seguran\u00e7a.<\/p>\n<h2>MOD_REWRITE<\/h2>\n<p>O mod_rewrite \u00e9 um m\u00f3dulo do Apache que permite reescrever regras para tornar as URL\u2019s Amig\u00e1veis. Assim, pode-se atrair mais visitantes ao seu site (os endere\u00e7os do seu site ir\u00e3o se tornar mais relevantes nos motores de busca) e ainda tornar seus sites mais seguros. Abaixo, iremos mostrar como:<\/p>\n<div align=\"left\">\n<pre>RewriteEngine On\nRewriteCond %{SCRIPT_FILENAME} !-f\nRewriteCond %{SCRIPT_FILENAME} !-d\nRewriteRule ^(.*)$ index.php?pagina=$1<\/pre>\n<\/div>\n<p>A primeira linha \u00e9 a respons\u00e1vel por ativar a regra que altera as URL\u2019s (endere\u00e7os dos sites).<\/p>\n<p>A segunda e a terceira fazem com que essa regra n\u00e3o seja aplicada a outros arquivos e diret\u00f3rios respectivamente.<\/p>\n<p>Na \u00faltima linha, \u00e9 exibida a regra de reescrita onde qualquer string (.*) ap\u00f3s a pasta, onde estiver o <em>.htaccess<\/em>, ser\u00e1 interpretado por <em>\u201cindex.php\u201d<\/em> passado na vari\u00e1vel <em>\u201cpagina\u201d<\/em>; ou melhor, quando se digitar um endere\u00e7o do tipo \u201cwww.seusite.com.br\/secao\/subsecao\/\u201d, o Apache entender\u00e1 que voc\u00ea digitou \u201cwww.seusite.com.br\/index.php?pagina=secao\/subsecao\/\u201d.<\/p>\n<p>Dessa maneira, voc\u00ea cria os links de seu site para o primeiro endere\u00e7o citado, escondendo dessa forma a linguagem da p\u00e1gina e as vari\u00e1veis de include, evitando que usu\u00e1rios mal intencionados possam injetar c\u00f3digos maliciosos (usando, por exemplo, o XSS).<\/p>\n<p>As utilidades do arquivo <em>.htaccess<\/em> s\u00e3o in\u00fameras e nesse tutorial foi priorizado o uso para tornar as p\u00e1ginas ou sites mais seguros. Obviamente, para tornar uma p\u00e1gina segura, deve-se priorizar uma programa\u00e7\u00e3o bem feita das p\u00e1ginas e uma configura\u00e7\u00e3o correta dos servi\u00e7os e\/ou protocolos do servidor, mas o uso do <em>.htaccess<\/em> pode servir como uma ferramenta de ajuda e as vezes mais do que isso.<\/p>\n<p>\u00c9 importante ressaltar que o uso de <em>.htaccess<\/em> n\u00e3o deve sobrepor ao uso correto (configura\u00e7\u00f5es corretas) do arquivo principal <em>httpd.conf<\/em> do Apache pelas raz\u00f5es aqui citadas de seguran\u00e7a , por raz\u00f5es de seguran\u00e7a e desempenho principalmente.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3>2- Protegendo pastas do Apache com senha<\/h3>\n<div><\/div>\n<p>Hoje eu tive que colocar senha numa pasta do apache e como nunca tinha feito isso tive que correr atr\u00e1s no google. Ent\u00e3o axei um <a href=\"http:\/\/www.bestlinux.com.br\/index.php?option=com_content&amp;task=view&amp;id=1604&amp;Itemid=145\">site<\/a> que me ajudou muito<\/p>\n<p>Ent\u00e3o adaptando um pouco l\u00e1 vai:<\/p>\n<p>entre na pasta do apache que deseja proteger, por exemplo \/var\/www\/pasta_com_senha\/<\/p>\n<p>utilize o comando abaixo para criar o arquivo com a senha<\/p>\n<p># htpasswd -c \/var\/www\/pasta_com_senha\/.htpasswd web<\/p>\n<p>Explicando:<\/p>\n<p>\/var\/www\/pasta_com_senha\/.htpasswd \u00e9 o arquivo que armazena a senha, voc\u00ea pode utilizar o nome que quiser por\u00e9m por quest\u00f5es de seguran\u00e7a sempre o mantenha oculto. Obrigatoriamente ele deve estar na pasta que voc\u00ea deseja proteger.<\/p>\n<p>web \u00e9 o usu\u00e1rio que vai acessar a pasta, voc\u00ea pode escolher qualquer usu\u00e1rio.<br \/>\n<strong><\/strong><br \/>\nap\u00f3s executar o comando ele vai pedir uma senha, que ser\u00e1 a de acesso junto com o usu\u00e1rio web.<\/p>\n<p>Agora no arquivo de configura\u00e7\u00e3o do Apache 2, \/etc\/apache2\/apache2.conf , adicione o seguinte trecho:<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;directory &#8220;\/var\/www\/pasta_com_senha\/&#8221;&gt;<br \/>\nAllowOverride None<br \/>\nOptions Indexes MultiViews<br \/>\nOrder allow,deny<br \/>\nAllow from all<\/p>\n<p>AuthType Basic<br \/>\nAuthName &#8220;Acesso Restrito: &#8221;<br \/>\nAuthUserFile &#8220;\/var\/www\/pasta_com_senha\/.htpasswd&#8221;<br \/>\nRequire valid-user &lt;\/directory&gt;<\/p>\n<p>Explicando as \u00faltimas linhas:<\/p>\n<p>AuthType Basic \u00c9 o tipo de autentica\u00e7\u00e3o<br \/>\nAuthName &#8220;Acesso Restrito: &#8221; \u00c9 a mensagem que aparece quando pedir a senha<br \/>\nAuthUserFile &#8220;\/var\/www\/pasta_com_senha\/.htpasswd&#8221; \u00c9 o arquivo que armazena a senha<br \/>\nRequire valid-user Essa linha indica que usu\u00e1rio pode acessar, pode trocar valid-user pelo nome do usu\u00e1rio no caso web.<\/p>\n<p>Para testar crie um arquivo php dentro da pasta com o seguinte conte\u00fado:<\/p>\n<p>&lt;?<br \/>\nphpinfo()<br \/>\n?&gt;<\/p>\n<p>Agora renicie o apache2<\/p>\n<p># \/etc\/init.d\/apache2 stop<br \/>\n# \/etc\/init.d\/apache2 start<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Protegendo suas p\u00e1ginas com .htaccess do Apache O \u201c.htaccess\u201d \u00e9 um arquivo de configura\u00e7\u00e3o distribu\u00eddo (j\u00e1 que pode ser usado em v\u00e1rios diret\u00f3rios), sendo seu uso relacionado a webservers em geral, principalmente o Apache. Um arquivo, contendo uma ou mais diretivas de configura\u00e7\u00e3o, quando colocado&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_angie_page":false,"page_builder":"","footnotes":""},"categories":[5],"tags":[],"class_list":["post-2684","post","type-post","status-publish","format-standard","hentry","category-apache2"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/posts\/2684","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=2684"}],"version-history":[{"count":0,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/posts\/2684\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=2684"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=2684"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.deuzebranaweb.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=2684"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}