Cómo evitar inyección SQL?

Iniciado por exelovin, 8 Abril 2013, 16:36 PM

0 Miembros y 1 Visitante están viendo este tema.

exelovin

Hola gente del foro, quiero contarles mi problema. resulta que tengo un script en el cual me hackean con la cuenta admin, osea si yo no creo un usuario con privilegios de admin no me pueden hackear, creo que es inyección SQL. mí pregunta es cómo soluciono eso? gracias.

#!drvy

Lo que has puesto literalmente es:

Hola amigos, resulta que un ladrón entra a casa y me roba con el pin del sistema de alarma. Creo que es un ladron mi pregunta es como soluciono eso ?

Si no das detalles (como creas la cuenta, como la validas, como entras con ella etc..) poco se te puede ayudar y solo se puede especular..

Saludos

BlackM4ster

Activa magic quotes, eso, a los lammer, les echa para atrás xD
- Pásate por mi web -
https://codeisc.com

exelovin

#3
$query = mysql_query("SELECT id, activacion, ban, nick FROM usuarios WHERE nick = '".no_injection(trim($_POST['nick']))."' and password = '".no_injection(md5($_POST['pass']))."'") or die(mysql_error());


hay algo inseguro ahí? creo que por ahí me hackean...

el-brujo

¿Ya has leído algo sobre SQLi?

¿limpias o validas la variable $nick o $pass?

¿cómo evitar inyección sql en php?
http://foro.elhacker.net/php/iquestcomo_evitar_inyeccion_sql_en_php-t307274.0.html

l337*

#5
Cita de: exelovin en  8 Abril 2013, 16:36 PM
Hola gente del foro, quiero contarles mi problema. resulta que tengo un script en el cual me hackean con la cuenta admin, osea si yo no creo un usuario con privilegios de admin no me pueden hackear, creo que es inyección SQL. mí pregunta es cómo soluciono eso? gracias.

siempre pon tus queries dentro de las comas simples o las atravesadas

$sql = "SELECT `id` FROM `tabla` WHERE id='".$_GET['id']."'"  ;

la otra seria, si esperas un id numerico:

if(isset($_GET['id']) && is_numeric($_GET['id'])) {
//ejecutar query
} else {
//return error y die();
}

si es en un script de inserts, update, delete, etc. limpia las variables con mysql_real_escape_string();

http://php.net/manual/en/function.mysql-real-escape-string.php

exelovin

Así está bien?

$query = mysql_query("SELECT `id`, `activacion`, `ban`, `nick` FROM `usuarios` WHERE `nick` = '".mysql_real_escape_string(trim($_POST['nick']))."' and password = '".mysql_real_escape_string(md5($_POST['pass']))."'") or die(mysql_error());


Acá dejo el código entro...

Citar<?php
require_once("header.php");

$user = mysql_real_escape_string($_POST["nick"]);
$pass = mysql_real_escape_string($_POST["pass"]);

if(empty($user) or empty($pass)){
   die('0: Faltan Datos');
}
$pass = md5($pass);
// Comprobamos los datos
$query = mysql_query("SELECT `id`, `activacion`, `ban`, `nick` FROM `usuarios` WHERE `nick` = '".mysql_real_escape_string(trim($_POST['nick']))."' and password = '".mysql_real_escape_string(md5($_POST['pass']))."'") or die(mysql_error());

if (!$data = mysql_fetch_array($query)){
   die('0: Datos no validos');
}

if($data["activacion"] != '1'){
   die('0: Activa Tu Usuario');
}

$baneo   =   "SELECT *
         FROM suspendidos
         WHERE nick='$user'";
$bane   =   mysql_query($baneo, $con);
$bane2   =   mysql_fetch_array($bane);

function ToUnix($string){
  $string = str_replace("/","-",$string);
   return strtotime($string);
}

 $baneo = $bane2['fecha2'];
$dia = 60*60*24;
 $baneo2 = $baneo*$dia;
$fechaone = ToUnix($bane2['fecha1']);
 $fechaone2 = $fechaone;
 
 if(date("d/m/Y",$baneo2+$fechaone2) == date("d/m/Y") and is_numeric($bane2['fecha2'])){
   mysql_query("UPDATE usuarios SET ban = 0 WHERE nick = '$user'");
   mysql_query("DELETE FROM suspendidos WHERE nick = '$user'");
}
 

if($data["ban"]=='1' and date("d/m/Y",$baneo2+$fechaone2) !== date("d/m/Y")){

   /*
   * Desarrollado por timbalentimba...
   *  Puto el que lee
   */





   echo'2:

<font color="red"><b>Tu cuenta se encuentra suspendida</b></font>
<p align=left>
<b>Causa:</b> '.$bane2['causa'].'
<br/><b>Fecha:</b> '.$bane2['fecha1'].'
<br/><b>Duraci&oacute;n:</b> '.(!is_numeric($bane2['fecha2']) ? 'Indefinido' : $bane2['fecha2'].' Dia/s');
echo '<br> <b>Rehabilitacion el :</b> '.date("d/m/Y",$baneo2+$fechaone2);

die();
}

$ip = no_i($_SERVER['REMOTE_ADDR']);

$id_A = md5(uniqid(rand(), true));
$_SESSION['user'] = mysql_real_escape_string($data['nick']);
$_SESSION['id'] = $data['id'];
$_SESSION['id2'] = $id_A;

$id_B = $data["id"]."%".$id_A."%".$ip;
setcookie('id_extreme', $id_B, time()+7776000,'/');
$query = mysql_query("UPDATE `usuarios` SET `id_extreme` = '".$id_A."' WHERE `nick` = '".mysql_real_escape_string($_POST['nick'])."'");

echo'1:';
?>

Hay otra vulnerabilidad?