+5

Principais Falhas de Segurança em PHP

criado por Diego R. Vieira em 30/03/2006 5:04pm
Ver código fonte
-----------
Eu já vi e provavelmente vocês também vários sites que possuem links para que se possa ver o código fonte da própria página. Normalmente um link é chamado viewsource.php?file=about.php ou tanto faz. É uma idéia legal, mas isso geralmente acaba deixando o site vulnerável para que se possa ver qualquer código fonte de um arquivo no servidor. Algo que certamente você não quer que aconteça. Pois certos arquivos podem conter senhas de bancos de dados etc.

<?php
// mal, muito mal
if($file == 'config.php') {
    die("You may not view this file");
}
?>

O problema com isto é que você pode fazer o seguinte viewsource.php?file=./config.php e isso irá checar com os caracteres adicionais ./
O melhor jeito de fazer isso é:

<?php
// agora sim
if(stristr($file, "config.php")) {
    die("You may not view this file");
}
?>

Comandos Shell
--------------
Comandos Shells são outro caso de falha. No PHP executar comandos shell é fácil, pois existem varias funções para isso, como system(), exec(), popen(), backticks, passthru, etc.

No geral você nunca deveria usar qualquer valor vindo de um usuário para executar como um comando shell

<?php
$text = $_GET['text'];
$banner = `banner $text`;
?>


Se alguém colocar: x; rm -rf /

Isso causaria muitos problemas..

Você pode usar a função escapeshellcmd(); para se proteger de dados perigosos vindos de usuários. Está função escapa qualquer caractere em uma string que possa ser utilizado para enganar um comando shell para executar comandos arbritários. E também é aconselhável usar alguma regex para ter certeza ;} Ou melhor ainda, NÃO USE valores de um usuário em comandos shell ;)

Senhas de Banco de dados
------------------
Se sua aplicação tiver algum tipo de lista de usuários que cada usuário tem uma senha, é aconselhável armazenar as senhas com algum tipo de encriptação. Se alguém conseguir roubar os dados do seu banco de dados, não poderá usar as senhas pois estarão encriptados ;} Uma dica é usar md5(), É claro que senhas com md5 podem ser quebradas porém isso é bem difícil e muito mais difícil do que falar hehe!

Comentários:

Mostrando 1 - 10 de 26 comentários
Valeu pelo toque. Vou prestar mais atenção nesses detalhes.
26/10/2006 4:06pm (~12 anos atrás)

Falhas ou Não, é necessário estár atendo as possíveis invasões... de qualquer forma o artigo é muito bom, parabéns!!!
15/09/2006 5:23am (~12 anos atrás)

Ok, se você não conhece outros DB, não deveria ter tanta propriedade em desmerecê-los em favor do MySql que é muito mais limitado - inclusive quanto à segurança de banco e não aplicação - que os grandes de mercado. Há muitas funcionalidades disponíveis em outros DB que não se encontram no Mysql e que os DBAs necessitam
06/07/2006 5:41pm (~12 anos atrás)

Não é falhas de seguranca do PHP, acho que você leu errado não?
E sim falhas de segurança "em" PHP
abraços
29/06/2006 2:18pm (~12 anos atrás)

Adler Medrado disse:
Eu não concordo quando diz falhas de seguranca do PHP.
Acho que existem falhas de seguranca do programador. O PHP por facilitar muito as coisas, permite que os programadores facam muitas besteiras.
[]s

adler medrado
www.neshertech.net
adler.neshertech.net
25/06/2006 7:34am (~12 anos atrás)

Cara!
confesso que muita coisa que vc falou, eu já deu mole!!
muito obrigado pelas dicas!!
abraços!!
12/06/2006 4:13am (~12 anos atrás)

Daniel Santos disse:
Cara estou aconpanhando esse artigo e ele esta muito bom.
08/06/2006 5:10am (~12 anos atrás)

Fabiano Shark disse:
Como o artigo não é seu, somente a tradução, congratulo-o pela iniciativa.
21/05/2006 8:30pm (~12 anos atrás)

Primeiramente OTIMO artigo. Eu sou bem novato em php e este artigo vei muito bem a calhar.

No caso de tratamento de query diretamente tambem poderia ser utilizado:

$login = isset($_POST["login"]) ? addslashes(trim($_POST["login"])) : FALSE;

Desta forma todos os dados escapados como aspas simpes(') e aspas duplas(") seria vistos com caracteres normais.

Prontinho minha contribuicao.

Abraco
07/05/2006 6:11pm (~12 anos atrás)

Realmente alguns são bons programadores, porém acabam se esquecendo de um fator importante: segurança. Apenas um deslize poderá ser fatal um dia... Parabéns pelo artigo :-)
29/04/2006 5:47pm (~12 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)