5 dicas de segurança ao desenvolver com Adianti Framework e PHP Neste artigo vou mostrar cinco dicas úteis para aumentar a segurança em aplicações desenvolvidas em PHP com o Adianti Framework. 1. Habilitar o Módulo Rewrite Alguns diretórios não podem ser acessados externamente pelo usuário, pois contém arquivos com informações sensíveis (dados de acesso à bases de dados). Para evitar o acesso externo, o framework já contém arquivos...
PD
5 dicas de segurança ao desenvolver com Adianti Framework e PHP  
Fechado
Neste artigo vou mostrar cinco dicas úteis para aumentar a segurança em aplicações desenvolvidas em PHP com o Adianti Framework.

1. Habilitar o Módulo Rewrite


Alguns diretórios não podem ser acessados externamente pelo usuário, pois contém arquivos com informações sensíveis (dados de acesso à bases de dados). Para evitar o acesso externo, o framework já contém arquivos com diretrizes de proteção, dentre eles:
app/config/.htaccess


Basicamente o conteúdo deste arquivo diz para o Apache impedir o acesso ao diretório:
AuthUserFile /dev/null AuthGroupFile /dev/null AuthType Basic AuthName "restricted area" require valid-user


Porém, para que estes arquivos sejam levados em consideração, é preciso habilitar no Apache o módulo rewrite, que faz a interpretação destes arquivos.
a2enmod rewrite service apache2 restart


2. Ligar Prepared Statements


Não é papel deste artigo explicar em detalhes o que é um ataque do tipo SQL Injection (pt.wikipedia.org/wiki/Injeção_de_SQL), mas resumidamente podemos dizer que é uma ameaça que se aproveita de falhas em sistemas para injetar comandos SQL maliciosos que podem obter ou alterar dados na base de dados em situações onde normalmente isto não deveria ser permitido.
Uma das principais técnicas de proteção contra SQL Injection são os Prepared Statements (en.wikipedia.org/wiki/Prepared_statement). No Adianti Framework, os Prepared Statements podem ser habilitados de maneira global nos arquivos de conexão à base de dados. No seguinte link temos alguns exemplos de como configurar os conectores de acesso à cada tipo de base de dados.
www.adianti.com.br/doc-framework-Persistence-Setup-SetupConnection

Basicamente é importante ligar a variável "prep". Assim, todas instruções SQL enviadas ao banco de dados por classes como TRepository e TRecord utilizarão Prepared Statements.

host = "192.168.1.102" port = "" name = "samples" user = "postgres" pass = "postgres" type = "pgsql" prep = "1"


O programador também pode realizar um SQL à mão livre, neste caso, também deve ter cuidados:
www.adianti.com.br/framework_files/tutor/index.php?class=ManualPrepa

3. Evitar ataques DDOS como módulo evasive


Outro tipo de ameaça à aplicação são ataques por negação de serviço - DDOS (pt.wikipedia.org/wiki/Ataque_de_negação_de_servi&ccedi), que basicamente são tentativas de tornar um sistema ou recurso indisponível por meio de sobrecarga. O Apache possui um módulo bastante interessante chamado Evasive, que trata justamente de negar conteúdo para requisições muito frequentes.

apt-get install libapache2-mod-evasive a2enmod evasive service apache2 restart


Bom, agora você pode refinar configurando as regras de bloqueio. Basicamente você precisará editar o arquivo a seguir.
/etc/apache2/mods-available/evasive.conf
<ifmodule mod_evasive20.c> DOSHashTableSize 3097 DOSPageCount 10 DOSSiteCount 30 DOSPageInterval 1 DOSSiteInterval 3 DOSBlockingPeriod 3600 DOSLogDir /var/log/apache2/mod_evasive.log </ifmodule>


Aqui tem uma explicação sobre as variáveis disponíveis para configuração :
www.linode.com/docs/websites/apache-tips-and-tricks/modevasive-on-ap

4. Usar o Template para gerenciar permissões


Ao utilizar o Adianti Framework você pode implementar um controle de permissões próprio, ou utilizar o Template (www.adianti.com.br/framework-template). O Template já adota uma série de boas práticas em termos de controle de acesso e utilizá-lo é altamente recomendado. Além disso, ele será sempre mantido atualizado pois é distribuído juntamente com o framework pela equipe Adianti.

5. Escondendo os parametros da requisição do usuário


Normalmente as ações via GET disparadas pelos usuários são exibidas na URL do sistema.
Ex: localhost/tutor/index.php?class=ProductForm&method=onEdit&id

Isto não é problema na maioria das vezes, visto que o Adianti Framework é utilizado na grande maioria das vezes para o desenvolvimento de sistemas. Além disso, se o usuário está vendo determinado conteúdo na URL, é por que ele possui acesso ao mesmo, caso contrário, uma mensagem de exceção é automaticamente exibida pelo Template para negar o acesso.

Mas se mesmo assim, você não quer que os dados de navegação sejam exibidos na URL, você pode desligar esse comportamento. O sistema continuará funcional, porém as URL's não serão registradas. Para atingir tal objetivo, basta desligar o atributo registerState no arquivo application.js.
app/lib/include/application.js
Adianti.registerState = false;


E caso queira usar URL's amigáveis, aqui vai o link:
www.adianti.com.br/forum/pt/view_1068?urls-amigaveis-no-adianti-fram

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (4)


RC

Formidável este Artigo.
Parabéns Pablo.
L

Ola boa tarde, como faz a configuração do envio de e-mail smtp na abra Administração/Preferências e não to conseguindo compartilhar documentos, estou conseguindo apenas enviar e receber como administrador.
WG

Bom dia, excelente artigo.

Sobre esse módulo EVASIVE, no artigo você escreveu: "...que trata justamente de negar conteúdo para requisições muito frequentes. " (SIC)

Essas requisições muto frequentes são relativas ao mesmo host ? Ou seja, trata requisições muito frequentes do mesmo IP ou trata independente do IP ?
CS

Bom dia Pablo! Sou Carlos Souza , tenho a licença do adianti e sou assinante do adiantibuilder :
Estou com algumas dificuldades:
1 - como esconder no xampp -> windows , os arquivos de configurações do banco
host = "192.168.1.102"
port = ""
name = "samples"
user = "postgres"
pass = "postgres"
type = "pgsql"
prep = "1"
porque se o usuário tiver acesso a pasta do C:xampphtdocsappconfig
vai ter acesso as informações do Banco e conseguir entrar e alterar base de dados?