+5

Principais Falhas de Segurança em PHP

criado por Diego R. Vieira em 30/03/2006 5:04pm
Cross Site Scripting (CSS/XSS)
------------------------------
Cross site scripting é feito quando você não filtra tags htmls vindas de um usuário e acaba executando elas, por exemplo:

<?php
if(mysql_num_rows($result) < 1) {
    echo "Your search for {$_GET['q']} yielded no results";
    exit;
} else { 
    //blah
}
?>

search.php?q=&lt;script>alert("hello");&lt;/script>

Em uma busca mal sucedida exibiria isto;

"Your search for &lt;script>alert("hello");&lt;/script> yielded no results"

Esse javascript seria interpretado pelo navegador e uma alerta seria exibido.
Enquanto esse exemplo pode parecer relativamente inofensivo, é possível colocar coisas que irão pegar dados de cookies, podendo até roubar sessões, porem isso fica pro próximo artigo.
Os dados devem ser checados antes de serem interpretados SEMPRE, como no caso de sql injection, em xss também, existem dois métodos para fazer isso:

a função strip_tags(); Irá remover todas as tags html de uma string. Ou,
a função htmlspecialchars(); Que irá converter caracteres especiais do html para um tipo que não poderá ser interpretado no browser como função do html e sim texto.

<?php
echo "Your search for ".htmlspecialchars($_GET['q'])." yielded no results"; //convert
echo "Your search for ".strip_tags($_GET['q'])." yielded no results"; //remove
?>

O correto é que nenhum valor vindo de um usuário deve ser executado sem uma devida checagem antes.

Comentários:

Mostrando 1 - 10 de 26 comentários
Valeu pelo toque. Vou prestar mais atenção nesses detalhes.
26/10/2006 4:06pm (~11 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 (~11 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.)