elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 05:35  


Tema destacado:


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits
| | |-+  Nivel Web (Moderadores: sirdarckcat, WHK)
| | | |-+  como evitar la inyeccion sql
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: como evitar la inyeccion sql  (Leído 6,130 veces)
CICOLO_111234

Desconectado Desconectado

Mensajes: 202

CICOLO_111234


Ver Perfil WWW
como evitar la inyeccion sql
« en: 19 Abril 2009, 16:16 »

hola!

tengo este codigo:
Código:
if (isset($_GET['ID'])) {
  $colname_Recordset1 = (get_magic_quotes_gpc()) ? $_GET['ID'] : addslashes($_GET['ID']);
}
mysql_select_db($database_prueba, $prueba);
$query_Recordset1 = sprintf("SELECT * FROM noticias WHERE ID = %s", $colname_Recordset1);

y me gustaria como evitar la inyeccion sql.

salu2
En línea

braulio--
Wiki

Desconectado Desconectado

Mensajes: 889


Imagen recursiva


Ver Perfil WWW
Re: como evitar la inyeccion sql
« Respuesta #1 en: 19 Abril 2009, 18:52 »

Mira esta página:
http://informatica-practica.net/solocodigo/index.php/2007/09/06/evitar-inyeccion-sql-ii/
En línea

WHK
吴阿卡
Moderador
***
Desconectado Desconectado

Mensajes: 4.113


The Hacktivism is not a crime


Ver Perfil WWW
Re: como evitar la inyeccion sql
« Respuesta #2 en: 20 Abril 2009, 01:02 »

hola!

tengo este codigo:
Código:
if (isset($_GET['ID'])) {
  $colname_Recordset1 = (get_magic_quotes_gpc()) ? $_GET['ID'] : addslashes($_GET['ID']);
}
mysql_select_db($database_prueba, $prueba);
$query_Recordset1 = sprintf("SELECT * FROM noticias WHERE ID = %s", $colname_Recordset1);

y me gustaria como evitar la inyeccion sql.

salu2

Eso tiene sql inyección ya que el addslashes solo agrega slashses a carácteres que puedan influir en la query, en este caso reemplazaría las comillas dobles y simples pero en el ejemplo que tu pusiste no se necesita una comilla para lanzar la sql inyección.


Código
$_GET['ID'] = '-1 union select 1,concat(shell_en_dword),3 into outfile test.php --';
 
if (isset($_GET['ID'])) {
 $colname_Recordset1 = (get_magic_quotes_gpc()) ? $_GET['ID'] : addslashes($_GET['ID']);
}
mysql_select_db($database_prueba, $prueba);
$query_Recordset1 = sprintf("SELECT * FROM noticias WHERE ID = %s", $colname_Recordset1);

Para poder evitar esto necesitas encerrar el valor entre comillas y de todas formas tendrías problemas con los slashses asi que simplemente puedes utilizar mysql_real_escape_string:
Código
if(isset($_GET['ID'])) $colname_Recordset1 = $_GET['ID']; else die('No hay valor');
 
mysql_select_db($database_prueba, $prueba);
$query_Recordset1 = sprintf("SELECT * FROM noticias WHERE ID = '%s'", mysql_real_escape_string($colname_Recordset1));

O también:
Código
if(isset($_GET['ID'])) $colname_Recordset1 = $_GET['ID']; else die('No hay valor');
 
mysql_select_db($database_prueba, $prueba);
$query_Recordset1 = 'SELECT * FROM noticias WHERE ID = \''.mysql_real_escape_string($colname_Recordset1.'\'';

Ahra si ID es un valor numérico puedes hacer:
Código
if(isset($_GET['ID'])) $colname_Recordset1 = $_GET['ID']; else die('No hay valor');
 
mysql_select_db($database_prueba, $prueba);
$query_Recordset1 = 'SELECT * FROM noticias WHERE ID = '.(int)$colname_Recordset1;

O también:

Código
if(isset($_GET['ID'])) $colname_Recordset1 = $_GET['ID']; else die('No hay valor');
 
mysql_select_db($database_prueba, $prueba);
$query_Recordset1 = 'SELECT * FROM noticias WHERE ID = '.(int)preg_replace('|[^0-9.]|i', '', $colname_Recordset1);
De esta forma tomará carácteres válidos y no devolverá error si realmente hay un valor numérico.
En línea

Mi foro Ultra Off-Topics: http://whk.drawcoders.com/foro/

Gracias a todos! Good bye!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
inyeccion SQL y como evitarla....
PHP
nobo 13 1,046 Último mensaje 22 Febrero 2012, 14:42
por drvy | BSM
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines