Principais Falhas de Segurança em PHP
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.
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 é:
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
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!
-----------
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!
Valeu pelo toque. Vou prestar mais atenção nesses detalhes.
26/10/2006 4:06pm
(~18 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
(~18 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
(~18 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
E sim falhas de segurança "em" PHP
abraços
29/06/2006 2:18pm
(~18 anos atrás)
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
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
(~18 anos atrás)
Cara!
confesso que muita coisa que vc falou, eu já deu mole!!
muito obrigado pelas dicas!!
abraços!!
confesso que muita coisa que vc falou, eu já deu mole!!
muito obrigado pelas dicas!!
abraços!!
12/06/2006 4:13am
(~18 anos atrás)
Como o artigo não é seu, somente a tradução, congratulo-o pela iniciativa.
21/05/2006 8:30pm
(~18 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
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
(~18 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
(~18 anos atrás)