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
Evitar inyecciones en sql
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?
- 0Calificación
- 5Seguidores
- 262Visitas
- 0Favoritos
Global
Argentina
Chile
Colombia
España
México
Perú
Uruguay
Venezuela
13 respuestas
me olvide de aclarar que el contenido del text area lo paso por la funcion que puse arriba...
espero su ayuda. saludos
htmlspecialchars + mysql_real_escape_string
¿?¿?¿?
primero que nada deberías deshabilitar magic quotes en la configuración del servidor.

espero puedas verlo por si te interesa entenderlo bien.
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
Avisanos!
voy a probarlo y cualquier cosa estoy consultándolos... y avísanos del twitcam...
y como deshabilito magic quotes en la configuración del servidor???
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
alguien debería mencionar que md5 no es seguro para encriptar nada en estos días
y que encriptacion utilizas entonces??
md5, pero toqueteando un poco,
nose, doble con slat por ejemplo
<?php
md5("#!$".md5("hola"));
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
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
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

;

; //refresh
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"
}
}
}
}
}
}