tanem 0 Denunciar post Postado Dezembro 29, 2009 Galera, Existe uma maneira de fazer 2 comando no mesmo sql dentro do mysql_query()? Exemplo: $sql = mysql_query("select * from tb_noticia where id=2;update tb_noticia set assunto= 'lll' where id= 2",$con); sei que esse sql, poderia ser dividido e que não tem nada a ver um com outro, só coloquei para ilustrar o exemplo. então, tem como colocar um ponto-e-virgula entre dois comando e executar na mesma query? sei que no sql puro isso funciona, ja que o memso interpreta como fim de um e inicio de outro. Valeu. Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Dezembro 29, 2009 Segundo o próprio manual: mysql_query() sends a unique query (multiple queries are not supported) http://br.php.net/mysql_query com MySQLi é mais fácil fazer multiplas querys: http://br.php.net/mysqli Compartilhar este post Link para o post Compartilhar em outros sites
tanem 0 Denunciar post Postado Dezembro 29, 2009 William obrigado pela reposta, entendido. Pensando em uma injection na url onde meu id = "$id"(variavel GET), não seria possivel fazer uma operação de update, delete, insert? Sempre me procuro me proteger dos injection, mas imagine que eu não tenha me protegido desta vez e meu comando esteja assim: $sql = mysql_query("select * from tb_noticia where id=$id",$con); Sei que consigo fazer union com select e descobrir muita coisa do banco, mas como poderia sofrer uma operação de update,insert ou delete? (imaginemos que não tem proteção, sem magic_quotes etc...) seria possivel conseguir executar essas operações citadas se o comando estiver apenas com mysql_query e não mysqli? Obrigado pela atenção. Compartilhar este post Link para o post Compartilhar em outros sites
Mário Miranda 0 Denunciar post Postado Dezembro 29, 2009 Para efetuar um injection é preciso usar caracteres como aspas no envio. Não seria melhor você usar mysqli_real_escape_string() para se proteger dos caracteres perigosos? Uma opção também seria montar uma expressão regular onde esta eliminaria palavras de comando SQL. Referência de http://revistaphp.com.br/artigo.php?id=189 <?php /* * @abstract Tratamento de injections em formulários.3. * @return string4. */ function antiInjection($str) { # Remove palavras suspeitas de injection. $str = preg_replace(sql_regcase("/(\n|\r|%0a|%0d|Content-Type:|bcc:|to:|cc:|Autoreply:|from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"), "", $str); $str = trim($str); # Remove espaços vazios.10. $str = strip_tags($str); # Remove tags HTML e PHP. $str = addslashes($str); # Adiciona barras invertidas à uma string return $str; } ?> Compartilhar este post Link para o post Compartilhar em outros sites
tanem 0 Denunciar post Postado Dezembro 29, 2009 Ok Mário entendi sua posição, tambem uso uma função quase igual a sua que trata validações de sql injection. Mas a minha dúvida é: Imaginemos que não tem esse tratamento de entrada, ou seja, é possivel um injection para o seguinte sql: $sql = mysql_query("select * from tb_noticia where id=$id",$con); Como o atacante poderia fazer um insert, alter, drop etc... pela url? uma vez que o sql ja começou com um select. Estou procurando focar no ataque e não na defesa. Como fazer isso? Estou perguntando isso não é porque quero sair atacando hem, é só mais um de meus testes para um trabalho que estou fazendo. Valeu galera. Compartilhar este post Link para o post Compartilhar em outros sites
brcontainer 16 Denunciar post Postado Dezembro 29, 2009 Bem tem alguns 'comandos': ' or'1-- ' or '1'='1 ' or 1=1-- 'or''=' ' or 'a'='a ') or ('a'='a b' or ' 1=' ' or '1 ' or '| Veja aqui os exemplos de 'teste': http://pt.wikipedia.org/wiki/Sql_injection Compartilhar este post Link para o post Compartilhar em outros sites
tanem 0 Denunciar post Postado Dezembro 29, 2009 Ok guilherme, são injection para forms porem minha dúvida seria fazer algo como: $sql = mysql_query("select * from tb_noticia where id=[b]$id;update[/b] tb_noticia set assunto= 'blablabla' where id= 2",$con); ou seja, executar o update e não o select. Levando em consideração que estamos sem proteção de aspas etc. seria algo como esse trecho do link que você passou: ------------------------------------------------------------------------------------------------------------------ SELECT id, forename, surname FROM authors WHERE forename = 'jo'hn' AND surname = 'smith' Quando uma base de dados tenta rodar esta query, ela vai retornar um erro: * Server: Msg 170, Level 15, State 1, Line 1 * Line 1: Incorrect syntax near 'hn'. A razão para isso é que a adição da aspas simples quebra a delimitação das aspas simples originais da query. Então a base de dados tenta executar 'hn' e falha. Se o atacante inserir dados assim: * Forename: jo'; DROP TABLE authors-- * Surname: ... a tabela 'authors' sera deletada, por razões que nos abordaremos posteriormente. ---------------------------------------------------------------------------------------------------- Só que não consegui fazer nada parecido no PHP. Valeu. Compartilhar este post Link para o post Compartilhar em outros sites