Jump to content


Photo

Vulnerabilidade Em Query String - Php


  • Faça o login para participar
20 replies to this topic

#1 gmps

gmps

    Amsdã

  • Usuários
  • 969 posts
  • Sexo:Não informado

Posted 09/03/2004, 19:56

ola, eu estou com um codigo de query string em PHP de um site dum amigo meu, o query string eh esse:
<? if(isset($area)) include($area.".php"); else include("br-principal.php"); ?> , esse codigo permite a famosa "SQL injection" que eh: /index.php?area=http://....
entao eu gostaria de saber como eu ficaria ainda com esse index.php?area= mas nao dando ao usuario malicioso em dar index.php?area=http://...
gostaria de uma ajuda
"Se você não puder ajudar, atrapalhe; afinal, o importante é participar..."

#2 John Doe

John Doe

    Novato no fórum

  • Usuários
  • 9 posts
  • Sexo:Não informado

Posted 09/03/2004, 21:11

Põe todas as áreas num array, e verifica(com a função in_array()) se a área digitada está num array... E também use um str_replace para tirar " e ' da string...
(agora eu to sem tempo, se der depois eu posto um exemplo ok?)

Abraços

#3 thiagorsl

thiagorsl
  • Visitantes

Posted 09/03/2004, 21:16

ele deve ter um a pagina de erro né ai ele faz assim se a area tiver http ele manda pro erro tipo assim strstr("http://",$area); manda pra pagina de erro é muito simples

#4 Klaus

Klaus

    @ ubuntu jaunty

  • Ex-Admins
  • 7924 posts
  • Sexo:Masculino
  • Localidade:127.0.0.1

Posted 10/03/2004, 08:31

Olá! :yes:

Simples... Basta fazer um switch... Veja:

<?php
  $area = $_GET["area"];
  switch ($area) {
    case "intro":
      include_once ("default.php");
      break;
    default:
      include_once ("404.php");
      break;
  }
?>


Faça uns testes e veja que, se $area == "intro", a página incluída será "default.php", caso $area != "intro", ou seja, qualquer coisa... Será incluída 404.php :D
Klaus Paiva
Conheça também: Taperás

#5 hail

hail

    Normal

  • Usuários
  • 78 posts
  • Sexo:Não informado

Posted 11/03/2004, 10:44

desculpe a minha ignorancia mas oq isso tem a v com SQL Injection ?

num vi nenhum comando SQL ae...

:(

#6 gmps

gmps

    Amsdã

  • Usuários
  • 969 posts
  • Sexo:Não informado

Posted 20/03/2004, 20:28

Ola, eu nao quero fazer com esse treco de swich ai sei la oq, tem jeito de arrumar somente a linha, mas eu nao sei, alguem pode me ajudar..?
"Se você não puder ajudar, atrapalhe; afinal, o importante é participar..."

#7 Red Hot

Red Hot

    12 Horas

  • Usuários
  • 168 posts
  • Sexo:Masculino
  • Localidade:Minas Gerais

Posted 20/03/2004, 22:12

Acho que funcionaria!
$simbolos = array("/", ":", " ", "'", ",");//especifica os caracteres especiais não aceitos
$area = str_replace($simbolos, "", $area); //Retira os arateres especiais definidos por você.
if(isset($area)) 
include($area.".php"); 
else 
include("br-principal.php");


#8 Cristiano Galdino

Cristiano Galdino

    Dark Defender

  • Administradores
  • 3738 posts
  • Sexo:Masculino
  • Localidade:Brasília, DF

Posted 21/03/2004, 05:24

desculpe a minha ignorancia mas oq isso tem a v com SQL Injection ?

num vi nenhum comando SQL ae...

:(

SQL Injection, literalmente falando, é o ato de "injetar" algum código SQL não esperado numa aplicação com fins não muito amigáveis.
Esse termo ultimamente vem sendo usado para descrever tipos de inclusões de arquivos que estão fora do servidor.

Caso queira ler um pouco mais sobre isso acesse http://www.securityf...om/infocus/1768
Cristiano Galdino
- http://cristiano.galdino.net/

“Since 2003”


#9 Red Hot

Red Hot

    12 Horas

  • Usuários
  • 168 posts
  • Sexo:Masculino
  • Localidade:Minas Gerais

Posted 21/03/2004, 06:18

Realmente o nosso companheiro Cristiano está certo!

#10 dokkalfr

dokkalfr

    Ich bin der Geist der stets verneint

  • Usuários
  • 203 posts
  • Sexo:Não informado
  • Localidade:Svartheim
  • Interesses:Programação e sexo

Posted 21/03/2004, 15:18

Na verdade o nome seria "PHP Injection" já que o código "injetado" é em PHP ... a maneira mais simples de resolver o problema é utilizando file_exists(). Já que nos includes as páginas são locais ... no caso de URLs file_exists() vai retornar false!
Ainda com dúvida? Os melhores programadores PHP estão aqui
=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Blog PHPClube
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Bookmarks

#11 thiagorsl

thiagorsl
  • Visitantes

Posted 21/03/2004, 15:34

vc tem esse codigo
<? if(isset($area)) include($area.".php"); else include("br-principal.php"); ?>

deixe ele assim
<?
if(isset($area)) {
if ((eregi("http://",$area))==0){
include($area.".php");
} else {
include("erro.php");
}
} else {
include("br-principal.php");
}
?>


ai vc faz uma pagiana erro.php que ela abrira quando o kra tentar isso



fui --------------- > :P ;)

Edição feita por: thiagorsl, 21/03/2004, 15:35.


#12 gmps

gmps

    Amsdã

  • Usuários
  • 969 posts
  • Sexo:Não informado

Posted 21/03/2004, 18:55

Na verdade o nome seria "PHP Injection" já que o código "injetado" é em PHP ... a maneira mais simples de resolver o problema é utilizando file_exists(). Já que nos includes as páginas são locais ... no caso de URLs file_exists() vai retornar false!

como eu faço esse esquema de: file_exists() ?
"Se você não puder ajudar, atrapalhe; afinal, o importante é participar..."

#13 thiagorsl

thiagorsl
  • Visitantes

Posted 21/03/2004, 19:14

assim se usa o file exists
if (isset($area)){
$pagina="$area.php";
if ((file_exists($pagina))==true){
include("$pagina");
} else {
include("erro.php");
}
} else {
include("principal.php");
}
lembrando que tem que existir o erro.php que é a pagina de erro

Edição feita por: thiagorsl, 21/03/2004, 19:16.


#14 CwB

CwB

    Novato no fórum

  • Usuários
  • 11 posts
  • Sexo:Não informado

Posted 25/03/2004, 01:07

assim se usa o file exists
if (isset($area)){
$pagina="$area.php";
if ((file_exists($pagina))==true){
include("$pagina");
} else {
include("erro.php");
}
} else {
include("principal.php");
}
lembrando que tem que existir o erro.php que é a pagina de erro

Po cara, valeu !

Eu nem durmi de noite pensando que eu tinha que fazer um switch do tamanho do mundo.

o file_exists() resolveu o problema !

#15 Cristiano Galdino

Cristiano Galdino

    Dark Defender

  • Administradores
  • 3738 posts
  • Sexo:Masculino
  • Localidade:Brasília, DF

Posted 25/03/2004, 01:14

Só enriquecendo mais o tópico uma coisa legal de usar é o ternário, da uma olhada em:
http://forum.wmonlin...ndpost&p=305165
Cristiano Galdino
- http://cristiano.galdino.net/

“Since 2003”





1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq