fsphp 0 Denunciar post Postado Fevereiro 25, 2009 Olá pessoal, Estava lendo no Manual do Php sobre como evitar SQL Injection e teve um comentário dizendo que uma forma simples contra isso é converter as entradas em binários, não sei se entendi corretamente, mas acho que ele quis dizer que para cada caracter digitado você o modifica e insere no seu db de forma filtrada. I think that easy way to protect against SQL injection is to convert inputted data into binary format, so that whatever input is, in sql query it will consist only of 1s and 0s. Seria mais ou menos isso: function anti_injection($string) { $string = str_replace("a", "0", $string); $string = str_replace("b", "1", $string); $string = str_replace("c", "00", $string); $string = str_replace("d", "11", $string); $string = str_replace("e", "01", $string); $string = str_replace("f", "10", $string); $string = str_replace("g", "000", $string); $string = str_replace("h", "111", $string); $string = str_replace("i", "001", $string); $string = str_replace("j", "010", $string); $string = str_replace("k", "100", $string); $string = str_replace("l", "110", $string); $string = str_replace("m", "101", $string); $string = str_replace("n", "011", $string); $string = str_replace("#", "0000", $string); $string = str_replace("*", "1111", $string); $string = str_replace("--", "0001", $string); $string = str_replace(";", "0010", $string); $string = str_replace("=", "0100", $string); $string = str_replace("<", "1110", $string); $string = str_replace(">", "1101", $string); $string = trim($string); $string = strip_tags($string); return $string; } Obrigado a todos! Compartilhar este post Link para o post Compartilhar em outros sites
fsphp 0 Denunciar post Postado Fevereiro 25, 2009 ABAIXO O BERALDO FEZ UM BELO CÓDIGO PARA EVITAR SQL INJECTION Valeu http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Fevereiro 25, 2009 Uma saída é esta: $str = 'Beraldo'; $tam = strlen($str); $newStr = ''; for ( $i = 0; $i < $tam; $i++ ) { $newStr .= '' . ord($str{$i}) . ';'; } echo $newStr; Veja o HTML gerado. Aqueles números são os códigos ASCII dos caracteres. Compartilhar este post Link para o post Compartilhar em outros sites
fsphp 0 Denunciar post Postado Fevereiro 25, 2009 Opa, que legal Beraldo!!! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif Nesse caso todos os caracteres que forem enviados para o db serão transformados em ASCII, isso elimina o SQL Injection? :huh: Obrigado. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif PS: Algum moderador poderia incluir o código do Beraldo no LABORATÓRIO DE SCRIPTS no índice ligado à Anti SQL Injectio. http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Fevereiro 25, 2009 Evita, pois o código não será interpretado pelo SGBD. Por ser código ASCII, só será interpretado pelo HTML. Mas, basicamente, basta escapar aspas para evitar SQL Injection. Compartilhar este post Link para o post Compartilhar em outros sites
fsphp 0 Denunciar post Postado Fevereiro 25, 2009 Valeu Beraldo, Isso também vai resolver um problema que eu tinha quando o pessoal enviava fotos para a galeria de fotos do meu site e no computador deles as mesmas estavam nomeadas com acentos e cedilhas, o ftp sempre falhava e aparecia o link quebrado da imagem, aí eu tinha que pedir pro pessoal renomear e enviar. Matou dois coelhos com uma cajadada! BELO CÓDIGO, e simples!!! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif Compartilhar este post Link para o post Compartilhar em outros sites
Skyo 1 Denunciar post Postado Fevereiro 25, 2009 Como já postei no outro tópico, basta usar... http://br2.php.net/mysql_real_escape_string Compartilhar este post Link para o post Compartilhar em outros sites
fsphp 0 Denunciar post Postado Fevereiro 25, 2009 Pois é Skyo, essa função que você passou também é apropriada, mas eu gostei de enviar tudo em ASCII para o db, ficou uma função bastante versátil. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Fevereiro 26, 2009 esse lance de usar código ASCII parece ser bom para exibir e-mails em sites. Por enquanto, creio que poucos bots de spam estão fazendo a conversão de ASCII para caractere, para buscar e-mails em códigos-fonte... hehe mas isso pode mudar logo logo, se todos passarem a converter e-mails para códigos ASCII. Compartilhar este post Link para o post Compartilhar em outros sites
fsphp 0 Denunciar post Postado Fevereiro 26, 2009 Como assim Beraldo, não entendi sua colocação, dá pra traduzir? Isso não afeta a segurança dos dados enviados ao db, ne? Somente que os bots de spam vão varrer até códigos em ASCII, é isso? :wacko: Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Fevereiro 26, 2009 Por que afetaria a segurança? Fica até desumano conseguir ler o conteúdo, afinal, tem que usar uma linguagem para decodificar. Eu nunca usei isso num sistema, pois nunca julguei necessário. Se você realmente quiser usar, pense bem no que deve ser convertido. Por exemplo, se o sistema aceitar HTML, terá de manter as tags intactas. Quanto aos bots, eles buscam por e-mails em códigos-fontes de sites. Por isso o pessoal coloca: email @ dominio . com email at dominio dot com ... É uma tentativa de esconder os endereços. Mas os bots também evoluem, assim como os Pokemons... :P Então logo eles poderão ler e-mails codificados em ASCII. É triste pensar nisso, mas é verdade. http://forum.imasters.com.br/public/style_emoticons/default/cry.gif :( Compartilhar este post Link para o post Compartilhar em outros sites
fsphp 0 Denunciar post Postado Fevereiro 26, 2009 Entendi, Beraldo. Agora, quanto ao que você falou: Por exemplo, se o sistema aceitar HTML, terá de manter as tags intactas. Os SGBD não restringem o conteúdo que armazenam, né? Não vão interferir nele caso sejam tags html, correto? No caso terei que selecionar o tipo de COLLATION como ASCII, ou não tem nada a ver, tipo pode ser utfb, latin, etc? Agora, outra coisa, se transformar tudo em binário, como comentaram no manual do php, sendo esses binários de acordo com uma forma determinada por mim, é uma boa alternativa? Obrigado pelos ensinamentos! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Fevereiro 26, 2009 Como eu disse, eu nunca usei o que eu sugeri. Teoricamente, não há uma codificação específica para o banco. Pode usar utf8 normalmente, eu acho. Tem que testar. Mas não deve ter problemas, pois é simplesmente um conjunto de números. Não lembro se o PHP tem uma função para converetr caractere ASCII para binário. Deve ter; tem que dar uma pesquisada. Mas tem que ver, também, se o HTML converte o binário para caractere ASCII. Não entendi de onde vem esses números. 'a' é '0'? não faz sentido. 'a' é 97, em decimal, na tabela ASCII. Em binário, seria 0110 0001 , não 0 Compartilhar este post Link para o post Compartilhar em outros sites
Lucas Weizenmann 0 Denunciar post Postado Fevereiro 26, 2009 sempre usei esse... é mais simples.. mas acredito eu que funcione... function anti_injection($sql) { // remove palavras que contenham sintaxe sql $sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|truncate|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; } ou isso pode não ser totalmente seguro? Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Fevereiro 26, 2009 @Lucas Weizenmann Imagine se o fórum retirasse palavras como SELECT, ALTER TABLE etc. O que seria do fórum de SQL? Mesmo assim, o fórum é seguro, sem problemas de SQL Injection Compartilhar este post Link para o post Compartilhar em outros sites
Lucas Weizenmann 0 Denunciar post Postado Fevereiro 26, 2009 hmm.. okay. Então depende do caso né.. Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Fevereiro 26, 2009 e depende do idioma Imagine usar essa função num site em inglês. SELECT, FROM... tudo isso seria simplesmente removido. O texto ficaria sem sentido Nã é necessário remover paalavra alguma. Basta saber como tratar os dados. Basicamente, basta escapar aspas. Nem precisa converter para código ASC ou binário Vejam a discussão deste tópico: http://forum.imasters.com.br/index.php?showtopic=276729 Compartilhar este post Link para o post Compartilhar em outros sites
fsphp 0 Denunciar post Postado Fevereiro 26, 2009 Não entendi de onde vem esses números. 'a' é '0'? Esse foi um exemplo que dei, pois não sabia qual a correspondência do alfabeto com os binários. Seria uma função para enviar ao db os valores segundo um critério próprio, escolhido pelo programador, e depois, a função inversa para filtrar e jogar do banco para a tela. Será que funciona? 'a' . Em binário, seria 0110 0001 , não 0 você tem essa tabela de binários? Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Fevereiro 26, 2009 O Google tem http://www.google.com/search?ie=UTF-8&...mp;q=tabela+asc Compartilhar este post Link para o post Compartilhar em outros sites
fsphp 0 Denunciar post Postado Fevereiro 27, 2009 Interessane a tabela em ASCII, Beraldo, Depois vou dar uma analizada nela com calma. Será que tem alguma função que transforma os caracteres em binário? Também vou estudar o tópico indicado por você. Obrigado! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites