Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: programador independiente en 25 de Septiembre 2014, 16:33
-
Buen día compañeros.
Expongo mi caso:
Hace como una semana, buscando respuesta a un problemilla que traía con el código que pondré al final de estas líneas; problema que consistía en la funcionalidad correcta de una paginación y que me ha resuelto mi amigo y compañero nuestro: dongo a quien doy todo el crédito del buen desempeño en gran parte de mi proyecto (saludos amigo dongo), "dejo el link del tema que abrí respecto a este tema de la paginación, por si acaso a alguien le pueda servir: https://www.aprenderaprogramar.com/foros/index.php?topic=1291.0"
como decía buscando una respuesta, alguien que vio mi código me comentó lo siguiente, cito textualmente:
"viendo tu codigo muy por arriba encontre esto. No va a solucionar tu problema actual pero si los futuros:
$_pagi_sql .= " AND propiedades.colonia LIKE '%" . $_POST['txtBusqueda'] . "%' ";
El problema es: ¿que pasa si envio un POST con código sql en la variable txtBusqueda? podria jugar con tu base de datos, leer, escribir, borrar, etc.
Tenes que sanitizar todas las entradas de datos siempre, ya que pueden escribir codigo por error o a proposito."
Ahora bien, yo he sustituido esa parte específica del $_POST por $_GET, no por este tema, sino por el tema de la paginación y mi código ha quedado así, al final haré mis preguntas:
<section id="contenedor_buscador">
<aside id="izquierda">
<h4>Buscar Propiedades de Nuevo León</h4><br>
<form id="form_buscar" name="form1" method="GET" action="busca_grand_nl.php">
<label>Búsqueda por Colonia:</label>
<input type="text" name="txtBusqueda" id="txtBusqueda"><br>
<label>Elija Municipio*:</label>
<select name="selCiudad" id="selCiudad">
<option value="-1" selected>Ver todas las Propiedades</option>
<?php
$tablaciudades = mysql_query("SELECT * FROM municipios_nuevo_leon ORDER BY nombre_mun ASC"); // Seleccionamos las ciudades de la tabla ciudades
while ($registrociudad = mysql_fetch_array($tablaciudades)) { // Vamos a repetir una Option (opcion), de la Lista Desplegable, por cada ciudad en la tabla
?>
<option value="<?php echo $registrociudad['id_mun']; ?>"><?php echo $registrociudad['nombre_mun']; ?></option>
<?php
} // termina la zona de repeticion
mysql_free_result($tablaciudades); // se libera la memoria usada por la tabla
?>
</select><br>
<input type="submit" name="cmdBuscar" id="cmdBuscar" value=" Buscar ">
</form>
<label id="asterisco">Los campos marcados con (*) son obligatorios</label>
</aside>
<article id="derecha">
<h2>Resultados de su búsqueda</h2>
<?php
$_pagi_sql = "SELECT propiedades.*, municipios_nuevo_leon.* FROM propiedades, municipios_nuevo_leon WHERE propiedades.id_mun = municipios_nuevo_leon.id_mun ";
if (isset($_GET['txtBusqueda'])) {
$_pagi_sql .= " AND propiedades.colonia LIKE '%" . $_GET['txtBusqueda'] . "%' ";
if (intval($_GET['selCiudad']) > 0) {
$_pagi_sql .= " AND propiedades.id_mun = '" . intval($_GET['selCiudad']) . "'";
}
}
$_pagi_sql .= " ORDER BY municipios_nuevo_leon.nombre_mun ASC";
//inicio de código para paginacion
$_pagi_conteo_alternativo=true;
$_pagi_cuantos = 6;
include("paginator.inc.php");
//fin de código para paginacion
$tabla = mysql_query($_pagi_sql);
/*de aqui hasta el "else{" es el codigo para poner el mensaje de "no se encontraron resultados y el "}" que cierra esta al final, despues de "mysql_close($conexion);".*/
$num_filas=mysql_num_rows($tabla);
if($num_filas==0){
echo "<center>No se encontraron resultados para su búsqueda</center>";
}
else{ //inicio de código para paginacion aqui se cambio ($tabla)) por ($_pagi_result))
while ($registro = mysql_fetch_array($_pagi_result))
{
?>
<?php $id = $registro['id_dir'];?><!--En esta línea del código va entre corchetes el id de la tabla propiedades-->
<div class="propiedades">
<img id="img_array"src="<?php echo $registro['imagen'];?>"/><br><br>
<label>Direccion:<?php echo $registro['direccion']; ?></label><br>
<label>Colonia:<?php echo $registro['colonia']; ?></label><br>
<label>Municipio:<?php echo $registro['municipio']; ?></label><br>
<label>Estado:<?php echo $registro['estado']; ?></label><br>
<label>Estatus:<?php echo $registro['estatus']; ?></label><br>
<img id="img_precio" src="../img/etiqueta_precio.png"/><label id="precio"><?php echo $registro['precio'];?></label><br>
<a href="detalles_nl.php?id_dir=<?php echo $id?>"><img id="img_llave" class="fade" src="../img/llave_detalle.png"/></a><label id="llave">Ver Detalles</label>
</div>
<?php
}
?>
<!--inicio de código para paginacion-->
<?php echo"<br><div class='barra-navegacion'><p>".$_pagi_navegacion."</p></div>"; ?>
<!--fin de código para paginacion-->
<?php
mysql_free_result($tabla);
mysql_close($conexion);
}
?>
</article>
</section>
Mis preguntas son:
Cómo sanitizar las entradas de datos en mi código?
Cómo puedo prevenir ataques de inyeccion SQL en mi DB?
Dónde aprender lo necesario para evitar estos ataques?
Buen día a todos compañeros y amigos. Dios les Bendiga y Conserve la Salud.
-
Hola, mira lo que se comenta aquí, quizás te pueda ayudar
https://www.aprenderaprogramar.com/foros/index.php?topic=398
-
Saludos compañero ogramar.
He leído el enlace que me has dejado y me da una idea de cómo empezar a entender esto de los ataques por inyeccion SQL.
En ese enlace el compañero "nosferacento" le indica a "eva" lo siguiente:
"Una vez logres entrar, establecer la medida para evitar el ataque. Para ello puedes usar condicionales if, o bien funciones propias de sql que sirven para limpiar cadenas de caracteres especiales (con lo que en teoría se evitaría la inyección) como mysql_real_escape_string o mysqli::escape_string,"
me parece que voy a comenzar con esto:
1. uso de condicionales if para prevenir ataques.
2. cómo limpiar cadenas de caracteres especiales.
3. investigar todo lo relacionado con la funcion:
·mysql_real_escape_string (la cual es la indicada para mi caso).
Muchas gracias compañero ogramar por esta ayuda que me has dado.
Alguna recomendación que me otorgues como añadido respecto a la forma de comenzar a encarar este tema será bienvenida y agradecida.
Saludos compañero Dios te Bendiga y te Conserve la Salud.
PD: Cuando haya sanitizado de buena forma el código, volveré aquí y lo colocaré para ejemplo de alguien a quien pueda servirle, saludos y muchas gracias por todo.
-
No sé si te servirá, pero esta información es buena: https://www.securecoding.cert.org/confluence/display/jg/07.+Prevent+code+injection
El problema es que está en inglés y es sobre java, pero quizás te puede dar buenas pistas.
Salu2
-
Muchas gracias compañero Ogramar.
Ni hablar tendré que ponerme a traducir :o.
Gracias ya expondré los resultados, saludos.
Dios te Bendiga y te Conserve la Salud.