Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Andre Summers

PHP Injection

Recommended Posts

Como faço pra proteger os sites que faço de inserção de códigos maliciosos?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso já foi bem discutido aí no forum. Se você pesquisar, achará muita coisa sobre.

 

Aqui tem algumas referências sobre:

 

http://www.htmlstaff.org/ver.php?id=1356

http://www.htmlstaff.org/ver.php?id=1357

http://www.htmlstaff.org/ver.php?id=1678

http://www.htmlstaff.org/ver.php?id=2831

http://www.htmlstaff.org/ver.php?id=6350

Compartilhar este post


Link para o post
Compartilhar em outros sites

Atualmente eu uso o seguinte nas minhas paginas

<?if (!$_GET[pagina]){$_GET[pagina] = inicial?><?}?><?include("$_GET[pagina].php");?>

Como aplico esse codigo...

<?php//cabeçalho do site$page = $_GET['page'];//para ter certeza que $page é alfanumérico.if(eregi("^[a-z0-9-_.]+$", $page, $regs)) {    $dir = "includes/"; //pode ser branco    $ext = ".php"; //.php, .html, .txt, whatever    if(file_exists($dir . $page . $ext)) {        include($dir . $page . $ext); //ou outro tipo de extensão se não for necessariamente um arquivo .php    } else {        echo '404 - Not Found'; //ou algo similar    }} else {    echo 'Naughty Naughty, very Naughty.'; /rodapé do site}?>

no lugar do anterior?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O Fabyo postou uma função a um tempo atrás que é muito boa para remover caracteres indesejados.Procure por ela aqui no forum em laboratório de scripts.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem como alguém invadir uma tabela mysql atraves do codigo PHP?Se tiver, como impedir?

Compartilhar este post


Link para o post
Compartilhar em outros sites

se seu sistema não estiver protegido contra sql injection, dependendo das permissões do usuário, acho que ele pode até deletar o bd.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Andre Summers, tudo bem?

Bom cara, é o seguinte, hoje, você sempre estará susceptível quando for utilizar páginas dinâmicas. Mesmo que todo o seu site esteja com o código-fonte impecável, você ainda corre risco de ser invadido não através do seu site, mas de outro site armazenado em seu servidor. Através desse outro site, eles injetam um código PHP (PHP Injection), fazem upload de arquivos maliciosos e abrem portas do servidor que possibilitam a invasão (backdoors).

Resumindo: Você "sempre" estará susceptível a ter seu site "hackeado" (defaceado seria o termo mais correto) por alguém que não tem nada pra fazer e fica por aí procurando sites para "defacear" (estragar, descaracterizar a estrutura de uma aplicação/site da WEB). Diríamos que tais pessoas são meros "lammers" (e não hackers), que nem precisam saber muito de PHP, SQL ou Java Script, mas que deixam de estar aprendendo Física, Matemática, ou de jogar Futebol para ficar apurrinhando a vida de outras pessoas.

 

Bom, creio que aqui no imasters não será o local mais apropriado para você tirar as suas dúvidas, pois já existe muito conteúdo sobre segurança em PHP, tanto em relação a práticas como XSS, PHP Injection e/ou SQL Injection, e também fóruns muitos específicos para tal assunto. Existem ainda diversas vídeo-aulas que você podem ser baixadas e que mostram, passo-a-passo, onde residem as vulnerabilidades de uma página dinâmica. Elas ensinam ainda até mesmo invadir um site, quais programas são necessários e quais procedimentos você deve seguir. No entanto, sugiro você utilizar essas informações apenas para aprender sobre segurança, ok?

 

Bom, vamos ao que interessa. Sua primeira pergunta foi:

Como faço pra proteger os sites que faço de inserção de códigos maliciosos?

1 - Faça sites apenas em HTML (sei que não é tão legal, mas ajuda);

 

2 - Não coloque formulários, ou campos de textos em seu site (sei também que não é legal, mas ajuda a previnir contra XSS, que é em Java Script);

 

Bem, como os itens 1 e 2 dificilmente serão seguidos por programadores PHP, vamos então nos ater à segurança aplicada a essa linguagem:

Protegendo contra PHP Injection:

3 - Não utilize comandos de inserções em seu código, como 'include', 'include_once', 'require', 'require_once', pois o PHP Injection é "injetado" justamente através desses includes que os "lammerzinhos" descobrem em seu sistema.

 

4 - Se for utilizar as funções de inserções descritas no item anterior (3), procure sempre validar qualquer valor que poderia recebido através delas (por exemplo, um include que recebe um valor passado por GET, como por exemplo: www.seusite.com.br/index.php?pag=downloads.php). Veja que no lugar de downloads.php o "lammer" poderia colocar um site com código-fonte malicioso (que eles chamam de "cmd", ou seja, um arquivo php (ou até mesmo gif, acredita?!) com várias funções como uploads, criar diretórios, remover arquivos, etc.)

 

5 - Evite, portanto, ficar passando informações via GET (vide item 4), pois os "lammerzinhos" descobrem o que você está pretendendo passar e podem usar isso contra você, caso seu código esteja vulnerável.

 

6 - Se for utilizar o método GET, procure SEMPRE, SEMPRE, SEMPRE validar tudo o que poderia ser recebido como parâmetro. Se o arquivo a ser incluído estiver em outro servidor (é muito raro, mas pode acontecer), faça um if verificando se o endereço é o que realmente você quer que seja. Você pode também criar um array que lista todas as páginas que poderiam estar sendo passadas via GET, e criar uma função que faria o seguinte:

 

Se o valor que está sendo passado existe no array, então incluir esse valor, por exemplo:

<?php//Valor recebido do GET;$valor = "index.php";//Lista de todos os valores que poderiam ser recebidos via GET:$permissoes[0]="index.php";$permissoes[1]="downloads.php";$permissoes[2]="imagens.php";$incluir = "0"; // 0:não, 1:sim,for ($i=0; $i<count($permissoes); $i++){	if($valor==$permissoes[$i]){		//Altera o valor da variável $incluir;		$incluir++; 	}}if($incluir!=0){	//include($valor);	echo "include(".$valor.")";}else{	echo "Mensagem de erro!";}?>
7 - Se o arquivo que está sendo incluído está no seu servidor, coloque o valor recebido antes de "../" (se for utilizar a pasta pai) ou "./" (se o arquivo estiver na pasta atual ou em uma de suas descendentes).

 

Para isso, basta alterar o último bloco do if do código anterior para:

if($incluir!=0){	//include($valor);	include("./".$valor);}else{	echo "Mensagem de erro!";}
Bom, isso são algumas coisas que você poderá usar para evitar PHP Injection.

 

 

Vamos passar para a segunda pergunta?

Sua segunda pergunta foi: e como protejo contra sql injection?

 

Bom, o SQL é injetado onde é possível injetá-lo, ou seja, em áreas do site onde os comandos SQL são utilizados. Exemplo: Dados vindos de formulários ou, mais uma vez, do famoso GET.

Bem, não vou ater muito ao SQL Injection pois existe um artigo formidável para isso:

http://www.totalsecurity.com.br/article.php?sid=732

Obs: Está demorando um pouco para carregar...

 

 

Para saber mais sobre XSS, PHP Injection, SQL Injection, você poderá acessar o link:

 

http://www.forum-invasao.com.br/novo/viewforum.php?f=20

 

Nesse link eles ensinam tudo que você precisa saber sobre "defaces". A minha intenção aqui é divulgar segurança. Se vocês leitores desejarem utilizar as informações do link para o mal, a responsabilidade é suas, não minha, pois não posso mudar o caráter de ninguém....

 

Vale ressaltar que, tudo que você fizer, eles sempre terão o seu IP gravado! Por isso, não tente fazer nada para prejudicar outras pessoas pois, com certeza, você responderá depois por isso!!! Quem avisa amigo é!

 

Dica: Aí vai um programa excelente, que informa com bastante se seu site é vulnerável a ataques ou não:

Acunetix Web Vulnerability Scanner

 

No mais, abraços e muita segurança a todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Atualmente eu uso o seguinte nas minhas paginas

 

<?if (!$_GET[pagina]){$_GET[pagina] = inicial?><?}?><?include("$_GET[pagina].php");?>

Como aplico esse codigo...

 


//para ter certeza que $page é alfanumérico.

if(eregi("^[a-z0-9-_.]+$", $page, $regs)) {

$dir = "includes/"; //pode ser branco

$ext = ".php"; //.php, .html, .txt, whatever

if(file_exists($dir . $page . $ext)) {

include($dir . $page . $ext); //ou outro tipo de extensão se não for necessariamente um arquivo .php

} else {

echo '404 - Not Found'; //ou algo similar

}

} else {

echo 'Naughty Naughty, very Naughty.'; /rodapé do site

}

?> linenums:0'><?php//cabeçalho do site$page = $_GET['page'];//para ter certeza que $page é alfanumérico.if(eregi("^[a-z0-9-_.]+$", $page, $regs)) { $dir = "includes/"; //pode ser branco $ext = ".php"; //.php, .html, .txt, whatever if(file_exists($dir . $page . $ext)) { include($dir . $page . $ext); //ou outro tipo de extensão se não for necessariamente um arquivo .php } else { echo '404 - Not Found'; //ou algo similar }} else { echo 'Naughty Naughty, very Naughty.'; /rodapé do site}?>

no lugar do anterior?

 

Cara,

 

O site da minha empresa foi invadido essa semana , e gostaria de saber como aplica esse código que foi postado para proteger.(Injetaram arquivos)

Sei que tenho que validar todas as paginas, mas como?

 

No meu site existe uma index.php que renderiza dentro da div conteudo a pagina quem-somos automatico.

A index possui o seguinte codigo php.

 

<?

session_start();

$img = $cont;

 

if($cont == '' || !file_exists($cont . ".php") ) $cont = "quem-somos";

$cont .= ".php";

 

?>

 

Dentro dela tem uma div que possui uma função include , para incluir a variavel cont - para incluir outras paginas

 

 

<div id="box2">

 

<? include ($cont); ?>

 

</div>

 

Quando preciso chamar outras paginas uso index.php?cont=qualquercoisa

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu utilizo essa função feita pelo Fabyo:

 

# function anti_injection($sql)
# {
# // remove palavras que contenham sintaxe sql
# $sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$sql);
# $sql = trim($sql);//limpa espaços vazio
# $sql = strip_tags($sql);//tira tags html e php
# $sql = addslashes($sql);//Adiciona barras invertidas a uma string
# return $sql;
# }
#

# //modo de usar pegando dados vindos do formulario
# $nome = anti_injection($_POST["nome"]);
# $senha = anti_injection($_POST["senha"]);
#

# ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.