i.Surfer 0 Denunciar post Postado Agosto 13, 2005 Eu esperimentei usar a funcao Anto SQL Injection e nao funcionou Fabyo... Eu a coloquei igual voce disse, recebendo a variavel do formulario, exemplo: PHP [*] [*]$nome = anti_injection($_POST['nome']); [*] Quando tentava logar no sistema, ele transformava qualquer coisa que colocava tanto em nome como senha em ' A ' (sem aspas). O que acontece? Compartilhar este post Link para o post Compartilhar em outros sites
Marconian 0 Denunciar post Postado Agosto 14, 2005 Cola seu código completo aí pra gente dar uma olhada. Marcos Alves Compartilhar este post Link para o post Compartilhar em outros sites
Claudio Escudero 0 Denunciar post Postado Setembro 21, 2005 Eu nao gosto muito de usar o comando trim() no anti_injection. Pq a propria senha do usuario pode querer colocar um espaco no comeco ou no final se ele acha mais seguro. Mas o codigo esta muito bom Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Setembro 21, 2005 essa função que eu fiz ja ta velha e quase obsoleta, mas eu criei uma versao nova pra quebrar o galho, com o mysqli do php5 nao temos mais problemas com sql injection = ) function anti_injection($txt){ $txt = get_magic_quotes_gpc() == 0 ? addslashes($txt) : $txt; return preg_replace("@(--|\#|\*|;|=)@s", "", $txt); } o mysql entende como comentario ', # , /* */ e -- e ( ; ) ele encerra uma instrução sql e começa uma nova por isso é bom remover o ponto e virgula pois podem usar ela para executar um novo comando sql ignorando o atual do script leiam: http://dev.mysql.com/doc/mysql/pt/comments.html http://dev.mysql.com/doc/mysql/pt/ansi-diff-comments.html Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Setembro 21, 2005 se usar o mysqli(Função melhorada do Mysql) nao tem mais problema só usar as funções novas do mysli para passar os dados como parametros antes de executar a query Compartilhar este post Link para o post Compartilhar em outros sites
xatria 0 Denunciar post Postado Setembro 23, 2005 Eu tenho fiz um sisteminha legal pra sqçinjetion ... ve se é dahora eu tbm uso ele pra filtrar palavras com palavrao essas coisas PHP [*]<? [*]function filtra($texto) { [*] [*]$badchar[1] = "drop"; [*]$badchar[2] = "select"; [*]$badchar[3] = "delete"; [*]$badchar[4] = "update"; [*]$badchar[5] = "insert"; [*]$badchar[6] = "alter"; [*]$badchar[7] = "destroy"; [*]$badchar[8] = "table"; [*]$badchar[9] = "database"; [*]$badchar[10] = "drop"; [*]$badchar[11] = "union"; [*]$badchar[12] = "TABLE_NAME"; [*]$badchar[13] = "1=1"; [*]$badchar[14] = 'or 1'; [*]$badchar[15] = 'exec'; [*]$badchar[16] = 'INFORMATION_SCHEMA'; [*]$badchar[17] = 'TABLE_NAME'; [*]$badchar[18] = 'like'; [*]$badchar[19] = 'COLUMNS'; [*]$badchar[20] = 'into'; [*]$badchar[21] = 'VALUES'; [*] [*]$y = 1; [*]$x = sizeof($badchar); [*]while ($y <= $x) { [*] $pos = strpos(strtolower($texto), strtolower($badchar[$y])); [*] if ($pos !== false) { [*] $texto = str_replace(strtolower($badchar[$y]), "", strtolower($texto)); [*] } [*] $y++; [*] } [*]return $texto; [*]}?> pra chamar a função é echo filtra($texto); ve se é dahora ai Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Setembro 23, 2005 só uma dica você eliminando apostrofo e comentarios ja praticamente nao tem como ter sql injection dai nao precisa filtrar essas palavras do select por exemplo se você filtrar só os comentarios e escapar as aspas quando der um select ele ira buscar pelo nome e nao ira executar o select exemplo: $nome = "select"; select * from tabela where nome = '$nome' vai ficar: select * from tabela where nome = 'select' entendeu ele nao ira achar o nome select e nem os outros: drop, insert, delete, etc. qualquer comando sql sera lido como uma string qualquer agora sobre apostrofos: $nome = "1' or 1 = '1"; select * from tabela where nome = '$nome' reslutado: select * from tabela where nome = '1' or 1 = '1' agora escapando os apostrofos: select * from tabela where nome = '\'1 or 1 = \'1' pronto tbm nao vai achar essa string no banco e nao executara o comando sql e sim ira fazer uma simples busca Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Setembro 27, 2005 eu costumo injetar sqls em sistemas feitos em ASP, 50% deles passam numa boa, o que mais utilizo é sse:'; GRANT ALL PRIVILEGES ON *.* TO 'msstr'@'%' WITH GRANT OPTION; --cria um usuário chamado "msstr" com todas as permissões e acesso remoto, com isso obtém-se total controle do bd. E à partir do bd pode-se criar arquivos de script para ir fuçando no servidor inteiro.tudo por causa de uma simples brecha num sistema de loginou em algum campo de entrada.o PHP já vem configurado por padrão para usar o adslashes por isso é mais difícil burlar mesmos os sistemas mais simples. Compartilhar este post Link para o post Compartilhar em outros sites
JuSeH 0 Denunciar post Postado Dezembro 25, 2005 faz tempo q eu nao venho aki, nem sabia que jah tava obsoleta. Mas de qualquer maneira vou contribuir com meu code(alteracao): <!--PHP-Head--><div class='codetop'>CODE</div><div class='codemain'><!--PHP-EHead--><?php function anti_injection_array($array) { foreach($array as $chave => $valor){ // remove palavras que contenham sintaxe sql $valor = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$valor); $valor = trim($valor);//limpa espaços vazio $valor = strip_tags($valor);//tira tags html e php $valor = addslashes($valor);//Adiciona barras invertidas a uma string $return["$chave"] = $valor; } return $return; } ?> </span><!--PHP-Foot--></div><!--PHP-EFoot--> Exemplo: <!--PHP-Head--><div class='codetop'>CODE</div><div class='codemain'><!--PHP-EHead--><?php // Todos os dados do form limpos pra uso, nao precisa fazer um por um :)/> extract(anti_injection_array($_POST)); //OU $_POST = anti_injection_array($_POST); ?> </span><!--PHP-Foot--></div><!--PHP-EFoot--> Compartilhar este post Link para o post Compartilhar em outros sites
Ariel 0 Denunciar post Postado Maio 5, 2006 JuSeH,nao funcionou em todos os campos do meu form nao... alguns nao pegaram as variaveis... pq? alguma ideia? Compartilhar este post Link para o post Compartilhar em outros sites
rsddaros 0 Denunciar post Postado Maio 10, 2006 Qual é o link do manual que fala sobre injections?? to procurando lá e não achei...Pode passar?Valeu Compartilhar este post Link para o post Compartilhar em outros sites
cassabarbosa 0 Denunciar post Postado Maio 17, 2006 Qual é o link do manual que fala sobre injections?? to procurando lá e não achei...Pode passar?Valeu http://www.php.net/manual/pt_BR/security.d...l-injection.php Compartilhar este post Link para o post Compartilhar em outros sites
Apokalypse 0 Denunciar post Postado Junho 12, 2006 <?php function anti_injection_array($array) { foreach($array as $chave => $valor){ // remove palavras que contenham sintaxe sql $valor = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$valor); $valor = trim($valor);//limpa espaços vazio $valor = strip_tags($valor);//tira tags html e php $valor = addslashes($valor);//Adiciona barras invertidas a uma string $return["$chave"] = $valor; } return $return; }?>Somente complementando: se por exemplo o valor recebido de um item do post for array?? ai vai dar pau...heheh... O certo seria: <?php function anti_injection_array($array) { foreach($array as $chave => $valor) { if (is_array($valor)) { anti_injection_array($valor); } else { // remove palavras que contenham sintaxe sql $valor = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$valor); $valor = trim($valor);//limpa espaços vazio $valor = strip_tags($valor);//tira tags html e php $valor = addslashes($valor);//Adiciona barras invertidas a uma string $return["$chave"] = $valor; } } return $return; }?> Abraço. Compartilhar este post Link para o post Compartilhar em outros sites
miketo 0 Denunciar post Postado Junho 24, 2006 Oi galera... meu amigo esta tendo problema com SQL INJECT, ele tem um servidor de um jogo chamado MU tem alguns caras que conseguem invadir o SQL e se EDITAR no jogo.. eles estao conseguindo dar SQL INJECT(pelo site na area de logar,criar conta,etc) eu queria saber se vcs podem ajudar.. por exemplo eu presisava de 1 codigo que blokiase o SQL INJECT,ou algo assim... QUALQUER COISA Q IMPEDISEM ELES DE FAZER ISSO... SE ALGUEM PODE ME AJUDA POR FAVOR POSTE ALGO AKI.. MUITO OBRIGADO! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif/> Compartilhar este post Link para o post Compartilhar em outros sites
MatheusWC 0 Denunciar post Postado Junho 28, 2006 Queria saber sobre as tags para PostgreSQL, tem que se tomar o mesmo cuidado, ou elas são ja seguras como mysqli?Obrigado =) Compartilhar este post Link para o post Compartilhar em outros sites
FelipeMorais 0 Denunciar post Postado Julho 3, 2006 Bom, eu usava assim... $xa = getenv('REMOTE_ADDR');$badwords = array(";","'","\"","*","union","del","DEL","insert","update","=","drop","sele","$");foreach($_POST as $value)foreach($badwords as $word)if(substr_count($value, $word) > 0)die("Aviso!<br />Não utilize caracteres especiais"); Ele busca todos os dados q sao enviados por fomulários... Mas gostei desse do Fabyo, o chato é lembrar de colocar a função em todos os campos... Vou tentar juntar os dois... Compartilhar este post Link para o post Compartilhar em outros sites
misterviralata 0 Denunciar post Postado Julho 5, 2006 AmigosSou iniciante em PHP e estou assustado com este negocio de códigos maliciososEntendi que tenho que colocar a função no inicio da pagina e quando receber os dados do formulário deve tratá-lo como no exemplo:$dados = anti_injection($_POST["dados"]);Caso eu tenha mais de um formulário na pagina, como devo proceder?Como funcionam estes códigos maliciosos, o Eclesiastes postou algo assim:Exemplo: 1' OR 1='1Isso é um código malicioso é inserido no campo do formulário? Como funciona. Como se proteger?Obrigado pela atenção amigos! Compartilhar este post Link para o post Compartilhar em outros sites
roger_php 0 Denunciar post Postado Julho 20, 2006 Como faço para chamar esta função? respostas: $variavel = anti_injection($variavel); Compartilhar este post Link para o post Compartilhar em outros sites
Bobrinha 4 Denunciar post Postado Agosto 16, 2006 pessoal vamos dar mais continuar com esse assunto que afeta a muita gente...Uma duvida so se pode invadir um banco de dados usando sql injection por campos de formularios? Compartilhar este post Link para o post Compartilhar em outros sites
adalton 0 Denunciar post Postado Setembro 1, 2006 GaleraEstou começando a ter problemas com SQL INJECTION e realmente gostaria de me informar sobre issoEstou num estagio de lammer pra ser sinceroQuem puder ajudar indicando um TUTO ou coisa do tipo[]'s Compartilhar este post Link para o post Compartilhar em outros sites