Foros del Web » Programando para Internet » PHP »

Seguridad id?=1

Estas en el tema de Seguridad id?=1 en el foro de PHP en Foros del Web. Hola quisiera que me aconseran un poco sobre seguridad ya que una persona ha logrando entrar a mi sitio web y extraer toda la informacion ...
  #1 (permalink)  
Antiguo 17/12/2011, 11:40
Avatar de ..::MaRcOs::..  
Fecha de Ingreso: diciembre-2006
Mensajes: 328
Antigüedad: 17 años, 4 meses
Puntos: 3
Seguridad id?=1

Hola quisiera que me aconseran un poco sobre seguridad ya que una persona ha logrando entrar a mi sitio web y extraer toda la informacion de usuarios y cosas asi, lo unico que me dijo es que tenia una vulnerabilidad con los articulos ejemplo.

index.php?id=1

segun el mediante sqlinjection logra acceder a todo. entonces que seguridad debo implementar para corregir esa fallla?
  #2 (permalink)  
Antiguo 17/12/2011, 11:42
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Seguridad id?=1

evita usar $_GET y usa sessiones , ademas de muchas otras cosas pero eso lo primero
  #3 (permalink)  
Antiguo 17/12/2011, 11:44
 
Fecha de Ingreso: enero-2011
Ubicación: Argentina
Mensajes: 80
Antigüedad: 13 años, 2 meses
Puntos: 12
Respuesta: Seguridad id?=1

Usa lo siguiente...

Código PHP:
Ver original
  1. if(ctype_digit($_GET['id'])) {
  2.  //Aquí lo debe hacer si está sano
  3. } else {
  4. //Aquí no lo debe hacer porque no está sano
  5. }

ctype_digit

Saludos
  #4 (permalink)  
Antiguo 17/12/2011, 11:50
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Seguridad id?=1

el uso esto para acceder

index.php?id='aki el ataque a traves del $_GET' por eso te recomiendo pasar ese valor a una session y tu url se quede asi

index.php solamente

ademas de otras cosas como:

mysql_real_escape_string en tus consultas , htmlentities o htmlspecialchars , striptags , si solo son numeros comprueba que sea un entero ...
etc... haz seguras las consultas complicandolas lo mas que puedas

no hagas un simple select complicalo

SELECT * FROM usuarios WHERE id='$_GET[id]' esto es vulnerable
  #5 (permalink)  
Antiguo 17/12/2011, 11:52
Avatar de Chico3001  
Fecha de Ingreso: septiembre-2011
Ubicación: Mexico, DF
Mensajes: 112
Antigüedad: 12 años, 7 meses
Puntos: 12
Respuesta: Seguridad id?=1

Yo uso estas 2 funciones para limpiar todas las variables obtenidas del usuario

Código PHP:
// ***************************************************************************************
//        Limpiar_html.- Elimina el Cross Site Scripting
function limpiar_html($variable) {
    
$variable strip_tags(stripslashes(trim(rtrim($variable))));
    
$variable htmlspecialchars($variableENT_QUOTES);
    return 
$variable;
}


/// ***************************************************************************************
//        Limpiar_sql.- Funcion de limpieza para evitar inyeccion SQL
function limpiar_sql($variable) {

    if (
is_int($variable))
        return 
$variable;
    else {
        
$variable trim(strip_tags(stripslashes(trim($variable))),"\x22\x27");
        return 
$variable;
    }

Código PHP:
$action limpiar_html($_GET['action']); 
  #6 (permalink)  
Antiguo 17/12/2011, 16:02
 
Fecha de Ingreso: diciembre-2011
Mensajes: 26
Antigüedad: 12 años, 4 meses
Puntos: 4
Respuesta: Seguridad id?=1

Amigo hay una funcion ya creada para el PHP llamada mysql_real_escape_string, ella evita el sql injection, solo le tienes que pasar cada $_GET a ella fijate el link que te deje es muy simple...


http://www.php.net/manual/en/function.mysql-real-escape-string.php
  #7 (permalink)  
Antiguo 17/12/2011, 17:00
 
Fecha de Ingreso: agosto-2011
Mensajes: 161
Antigüedad: 12 años, 8 meses
Puntos: 7
Respuesta: Seguridad id?=1

En este tipo de casos, cuando recibes el id por get, el programador casi siempre declara los id como numeros en la base de datos.
Y como este tambien es tu caso, basta con que valides el get preguntando si es numerico. .o int.

Código PHP:
if(is_numeric($_GET["id"]))
{
echo 
"el id es numerico".
}

//o tambien con is_Int

if(is_int($_GET["id"]))
{
echo 
"el id es numerico".

Así aunque el hacker te escriba caracteres especiales o caracteres alfabeticos [A-Z]...
el script no correra pues estas validando que solo entren numeros.

Te dejo la documentacion :)

http://php.net/manual/es/function.is-numeric.php

http://php.net/manual/es/function.is-int.php

Saludos.

PD: En el caso que esperes strings por GET, ahí entra a escapar la cadena .

Etiquetas: seguridad, sql, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:20.