Comunidad oficial de diseñadores web, web developers y Webmasters. Aqui podemos tratar temas actuales sobre diseño y tecnología. Podemos compartir y actualizarnos. Photoshop, Flash, PHP, ASP, Java, HTML, CSS, MySQL, CMS, etc. Unite YA y lee los Sticky

Ver más
  • 13,065 Miembros
  • 9,531 Temas
  • 3,449 Seguidores
  • 0

Evitar inyecciones en sql

hola gente, estoy desarrollando una web y ahora me viene el tema de la seguridad...

la pagina posee un sistema de logueo.. los pass los guardo encriptados y le limpio los espacion antes y despues de la variable....

$pass_php=md5(trim($_POST["pass"]));

y antes de ejecutar cualquier cambio en mi base de datos paso la sentencia de sql por la siguiente funcion

function limpiarSQL($mensaje){

if (get_magic_quotes_gpc()) {
$mensaje = stripslashes($mensaje);
}
return $mensaje;
}



pero ahora quiero hacerles una pregunta...

como hago que en un campo textarea acepte texto links e imagenes... pero nada mas que eso y asi evitar inyecciones, ademas algunos tags que solo yo permita... como los filtro a los demas o permito solo los que yo quiera?
  • 0
  • 0Calificación
  • 5Seguidores
  • 262Visitas
  • 0Favoritos

13 respuestas

@pudymody dijo Hace más de 9 meses:

htmlspecialchars + mysql_real_escape_string

¿?¿?¿?

@mercadotecnia_ dijo Hace más de 9 meses:

pudymody dijo:

htmlspecialchars + mysql_real_escape_string

¿?¿?¿?

@pichoncitotv dijo Hace más de 9 meses:

primero que nada deberías deshabilitar magic quotes en la configuración del servidor.

Para realizar una consulta limpia simplemente escapa comillas con addslashes() o mysql_real_escape_string() y obviamente, utiliza comillas para la consulta.

MAL CON IDs
<?php
$sql 
'SELECT * FROM usuario WHERE id = '.$_GET['id'];


CORRECTO CON IDs
<?php
$sql 
'SELECT * FROM usuario WHERE id = "'.(int) $_GET['id'].'"';


MAL CON STRINGS
<?php
$sql 
'SELECT * FROM usuario WHERE usuario = '.$_GET['usuario'];


CORRECTO CON STRINGS
<?php
$usuario 
addslashes$_GET['usuario'] );
$sql 'SELECT * FROM usuario WHERE usuario = "'.$usuario.'"';


Esta noche voy a hacer twitcam sobre SQLi espero puedas verlo por si te interesa entenderlo bien.

@macadamQuejoso dijo Hace más de 9 meses:

dijo:

Esta noche voy a hacer twitcam sobre SQLi espero puedas verlo por si te interesa entenderlo bien.


Avisanos!

@alexnavarrova dijo Hace más de 9 meses:

function preparar_consulta($consulta)
{
$mq_activado = get_magic_quotes_gpc();
if(function_exists("mysql_real_escape_string")
{
if($mq_activado)
{
$consulta = stripslashes($consulta);
}
$consulta = mysql_real_escape_string($consulta);
}
else
{
if(!$mq_activado)
{
$consulta = addslashes($consulta);
}
}
return $consulta;
}
esta funcion por si en algunos servidores no tienen activada la funcion u otros ya vienen activadas

@staticpo dijo Hace más de 9 meses:

alguien debería mencionar que md5 no es seguro para encriptar nada en estos días

@Pampelito dijo Hace más de 9 meses:

schweiko dijo:

y que encriptacion utilizas entonces??



md5, pero toqueteando un poco,
nose, doble con slat por ejemplo


<?php
md5
("#!$".md5("hola"));

@syneto dijo Hace más de 9 meses:

md5 y sha1 y demás estan depreciados para encriptar en php por su naturaleza insegura y por la facilidad con la que esta encriptación es reversible con el poder actual de computación en poco tiempo.

aquí pueden encontrar info al respecto y posibles soluciones para una mejor seguridad:

http://www.php.net/manual/en/faq.passwords.php#faq.passwords.fasthash

@bit001 dijo Hace más de 9 meses:

primero que nada deberías deshabilitar magic quotes en la configuración del servidor.

Para realizar una consulta limpia simplemente escapa comillas con addslashes() o mysql_real_escape_string() y obviamente, utiliza comillas para la consulta.

MAL CON IDs
<?php
$sql 
'SELECT * FROM usuario WHERE id = '.$_GET['id'];


CORRECTO CON IDs
<?php
$sql 
'SELECT * FROM usuario WHERE id = "'.(int) $_GET['id'].'"';


MAL CON STRINGS
<?php
$sql 
'SELECT * FROM usuario WHERE usuario = '.$_GET['usuario'];


CORRECTO CON STRINGS
<?php
$usuario 
addslashes$_GET['usuario'] );
$sql 'SELECT * FROM usuario WHERE usuario = "'.$usuario.'"';


Esta noche voy a hacer twitcam sobre SQLi espero puedas verlo por si te interesa entenderlo bien.


una pregunta en el ultimo de los addslashes, osea le agregas las barras lo guardas en la base de datos y a la hora de imprimirlo se los quitas?

pregunto porque lo hago así
saludos

@tangamandapia dijo Hace más de 9 meses:

este es el codigo que yo uso y no me ah fallado hasta el momento por que tiene todo lo que mi web ocupa encriptacion no permitir el acceso a quien no a activado su cuenta no permitir acceso a qien no escribe bien el password o a los que intentan iniciar sesion y no existen en mi base de datos por que no estan registrados

if ($_POST['login'])
{
//get form data
$username = addslashes(strip_tags($_POST['username']));
$password = addslashes(strip_tags($_POST['password']));

if (!$username||!$password)
echo "Ingresa un Usuario y Password";
else
{
//log in
$login = mysql_query("SELECT * FROM tblusuario WHERE strEmail='$username' ";
if (mysql_num_rows($login)==0)
echo "<br/><b>El usuario que ingresastes no existe! Intenta de nuevo
<a href='acceso.php'>Pulsa aqui!</a></b>";
else
{
while ($login_row = mysql_fetch_assoc($login))
{

//get database password
$password_db = $login_row['strPassword'];

//encrypt form password
$password = md5($password);

//check password
if ($password!=$password_db)
echo "<br/><b>El Password Que Ingresastes Es Incorrecto! Intenta de nuevo
<a href='acceso.php'>Pulsa aqui!</a></b>";
else
{
//check if active
$active = $login_row['intActivo'];
$email = $login_row['strEmail'];
$_SESSION['MM_idUsuario'] = $login_row["idUsuario"];
$_SESSION['MM_intActivo'] = $login_row["intActivo"];
$_SESSION['MM_Username'] = $_POST['username'];

if ($active==0)
echo "<br/><b>No has activado tu cuenta porfavor revisa tu e-mail ($email)</b>";
else
{
header("Location: index.php"; //refresh
}
}


}
}
}
}

Tienes que ser miembro para responder en este tema