Ir para conteúdo

POWERED BY:

Arquivado

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

tanem

2 comandos no mesmo sql

Recommended Posts

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

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

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

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

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

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

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

×

Informação importante

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