Foros del Web » Programando para Internet » PHP »

Seguridad en PHP

Estas en el tema de Seguridad en PHP en el foro de PHP en Foros del Web. Saludos amigos de PHP. Esta vez les consulto para que me ayuden en algo sencillo. Resulta que necesito información u orientación de donde conseguirla acerca ...
  #1 (permalink)  
Antiguo 07/12/2011, 17:41
Avatar de jorgelpadronb  
Fecha de Ingreso: agosto-2011
Ubicación: Cuba
Mensajes: 281
Antigüedad: 12 años, 8 meses
Puntos: 37
Pregunta Seguridad en PHP

Saludos amigos de PHP. Esta vez les consulto para que me ayuden en algo sencillo. Resulta que necesito información u orientación de donde conseguirla acerca de como generar aplicaciones PHP seguras. O sea, como programar en PHP para que la aplicación o sitio web sea seguro. Que significa exactamente el término bugs de seguridad?

Es que yo he estudiado bastante la programación PHP, pero en temas de seguridad web estoy en pañales. Saludos y gracias.
__________________
Los hombres pequeños, nunca se sienten pequeños; los hombres grandes, nunca se sienten grandes.

No sé quien fué el que dijo eso, pero está bueno.
  #2 (permalink)  
Antiguo 07/12/2011, 17:55
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Seguridad en PHP

Cita:
Iniciado por jorgelpadronb Ver Mensaje
Saludos amigos de PHP. Esta vez les consulto para que me ayuden en algo sencillo. Resulta que necesito información u orientación de donde conseguirla acerca de como generar aplicaciones PHP seguras. O sea, como programar en PHP para que la aplicación o sitio web sea seguro. Que significa exactamente el término bugs de seguridad?

Es que yo he estudiado bastante la programación PHP, pero en temas de seguridad web estoy en pañales. Saludos y gracias.
Es un tema amplio y recurrente en el foro, buscate temas al respecto?
Hay muchos tips en internet

Pero mirando el lado positivo, buscas unos consejos mas directos...

Jorgelpadronb: Veras muchas herramientas en PHP que pensaras que sobran...

Por ejemplo si recibis un numero por POST o GET, es necesario verificar que sea un numero ¿?
Por que en PHP podes definir una variable int anteponiendo (int).

Cada uno utiliza lo que le es util.

Por ejemplo Yo recibo los ID de los articulos de esta manera:

Código PHP:
<?php

function numero($var)
{
    if(
is_numeric($var))
    {
        return 
$var;
    }else{
        
$numero= (int)$var;
        return 
$numero;
    }
}

echo 
numero($_GET['id']);

// Si id es 12a141 -> regresa 12.

// Si id es 12141 -> regresa 12141.

?>
__________________
Mono programando!
twitter.com/eguimariano
  #3 (permalink)  
Antiguo 07/12/2011, 18:02
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Seguridad en PHP

busca informacion de SQL INJECTION, ataques xss, etc el tema de seguridad hay bastantes buenos artículos en la web, como consejo piensa mal de todos los usuarios que utilizaran tu web hay un dicho que dice que seguro mato a confiao, ademas trata que los usuarios hagan lo que tu desees tratalos como si fueran los burros mas grandes del mundo no dejes nada a interpretación, encripta tus contraseñas, escapa los caracteres especiales, en fin hay mucha información en la web busca un poco y encontraras, saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #4 (permalink)  
Antiguo 07/12/2011, 18:18
Avatar de jorgelpadronb  
Fecha de Ingreso: agosto-2011
Ubicación: Cuba
Mensajes: 281
Antigüedad: 12 años, 8 meses
Puntos: 37
Respuesta: Seguridad en PHP

Muchas gracias amigos por sus respuestas. Me han ayudado mucho.

Y sobre los bugs de seguridad. Que son exactamente? Son huecos de seguridad o algo así?

Dependen solamente del código de mi web o también de la configuración en la seguridad del servidor?

Los hosting gratuitos suelen tener problemas de seguridad?

Uff, los voy a marear con tantas preguntas.
__________________
Los hombres pequeños, nunca se sienten pequeños; los hombres grandes, nunca se sienten grandes.

No sé quien fué el que dijo eso, pero está bueno.
  #5 (permalink)  
Antiguo 07/12/2011, 21:28
(Desactivado)
 
Fecha de Ingreso: septiembre-2011
Ubicación: Casupá, Florida, Uruguay
Mensajes: 70
Antigüedad: 12 años, 6 meses
Puntos: 4
Respuesta: Seguridad en PHP

un "bug de seguridad" le puedes llamar a una vulnerabilidad en tu sistema
por ejemplo si tu tienes un textarea en tu pagina donde la gente pone sus comentarios y los sube al servidor,
yo puedo poner <?php "algun codigo maligno" ?>
y tu servidor interpretará ese comentario como parte del codigo de la web, amenos que lo impidas, se le llama injeccion de codigo, ocurre tambien en javascript y html jeje.
eso es todo lo que se xD
ojala alguien te aclare mas el tema
----------------------------------------
"no le des el pescado, dale un caña y enseñale a pescar"
Código PHP:
Ver original
  1. <?php
  2. $RespuestaUtil;
  3. $KarmaDeKevinvgp;
  4. if($RespuestaUtil==verdadero){KarmaDeKevinvgp=KarmaDeKevinvgp+1;}
  5.  
  6. //xDDDDDDD
  7. ?>

Última edición por kevinvgp; 07/12/2011 a las 21:33
  #6 (permalink)  
Antiguo 07/12/2011, 21:58
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 8 meses
Puntos: 105
Respuesta: Seguridad en PHP

Holas,

Los bugs como te mencionan, son en su mayoria procesos debiles y no controlados por el programador o quien crea la aplicacion. y en otras muy pocas casi nada son las del lenguage.

Si deseas darle mas seguridad a tus aplicaciones webs, puedes empezar todas las entradas o ingresos o partes que son vistas por el usuario y alli analizar inputs, rutas de librerias de carpetas, existen muchas herramientas en la red para auditar tu aplicacion, incluso firefox tiene el firebug y el chrome su propio auditor.

A tus aplicaciones no solo le pondrias seguridad con respectoa tu lenguage sino tambien a tu consultas o tu bases de datos, a las librerias de javascript que uses, etc.

Saludos
__________________
.: Gildus :.
  #7 (permalink)  
Antiguo 08/12/2011, 00:14
marcofbb
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Seguridad en PHP

Usando funciones como htmlentities, mysql_real_escape_string, ect.

Igual todo depende de que necesitas hacer, por ejemplo mas arriba decian que para gestionar las ID de las noticias usaba INT, usa eso para que solo acepta numeros el parametro. pero si queres hacer algo alfanumérico tenes que ver otros temas de seguridad.

Todo depende lo que necesites hacer
  #8 (permalink)  
Antiguo 11/12/2011, 03:00
Avatar de jorgelpadronb  
Fecha de Ingreso: agosto-2011
Ubicación: Cuba
Mensajes: 281
Antigüedad: 12 años, 8 meses
Puntos: 37
Respuesta: Seguridad en PHP

Muchas gracias a todos por sus respuestas. Gracias a sus explicaciones he instalado en mi web un script que funciona perfecto, filtra todas las entradas como $_POST, $_GET y $_REQUEST. Elimina todo lo que contenga caracteres sospechozos. Lo que quiero ahora es optimizar la lista de caracteres prohibidos, para que sea lo más agresivo posible sin afectar los contenidos alfanuméricos útiles.

Por ejemplo no debería bloquear estos caracteres: ,.@/\!?()'";:-_ etc. Pues se usan frecuentemente en direcciones de correo, urls y textos largos con signos de puntuación.

Pero hay muchos otros que usan los scripts maliciosos y que no son imprescindibles en los contenidos alfanuméricos. Ejemplo: <>[]{}%$&* etc.

Lo cierto es que después que instalé ese script los tests con Acunetix me marcan 0 alertas de seguridad.

Me pueden ayudar a incrementar la lista de caractares sospechozos?
__________________
Los hombres pequeños, nunca se sienten pequeños; los hombres grandes, nunca se sienten grandes.

No sé quien fué el que dijo eso, pero está bueno.
  #9 (permalink)  
Antiguo 11/12/2011, 03:49
marcofbb
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Seguridad en PHP

Código PHP:
<?php
/**********************************************************************************
* QueryString.php                                                                 *
***********************************************************************************/

// Clean the request variables - add html entities to GET and slashes if magic_quotes_gpc is Off.
function cleanRequest()
{
    
//global $board, $topic, $boardurl, $scripturl, $modSettings, $smcFunc;

    // Makes it easier to refer to things this way.
    
$scripturl 'http://www.tuweb.com/index.php';

    
// What function to use to reverse magic quotes - if sybase is on we assume that the database sensibly has the right unescape function!
    
$removeMagicQuoteFunction = @ini_get('magic_quotes_sybase') || strtolower(@ini_get('magic_quotes_sybase')) == 'on' 'unescapestring__recursive' 'stripslashes__recursive';

    
// Save some memory.. (since we don't use these anyway.)
    
unset($GLOBALS['HTTP_POST_VARS'], $GLOBALS['HTTP_POST_VARS']);
    unset(
$GLOBALS['HTTP_POST_FILES'], $GLOBALS['HTTP_POST_FILES']);

    
// These keys shouldn't be set...ever.
    
if (isset($_REQUEST['GLOBALS']) || isset($_COOKIE['GLOBALS']))
        die(
'Invalid request variable.');

    
// Same goes for numeric keys.
    
foreach (array_merge(array_keys($_POST), array_keys($_GET), array_keys($_FILES)) as $key)
        if (
is_numeric($key))
            die(
'Numeric request keys are invalid.');

    
// Numeric keys in cookies are less of a problem. Just unset those.
    
foreach ($_COOKIE as $key => $value)
        if (
is_numeric($key))
            unset(
$_COOKIE[$key]);

    
// Get the correct query string.  It may be in an environment variable...
    
if (!isset($_SERVER['QUERY_STRING']))
        
$_SERVER['QUERY_STRING'] = getenv('QUERY_STRING');

    
// It seems that sticking a URL after the query string is mighty common, well, it's evil - don't.
    
if (strpos($_SERVER['QUERY_STRING'], 'http') === 0)
    {
        
header('HTTP/1.1 400 Bad Request');
        die;
    }

    
// If magic quotes is on we have some work...
    
if (function_exists('get_magic_quotes_gpc') && @get_magic_quotes_gpc() != 0)
    {
        
$_ENV $removeMagicQuoteFunction($_ENV);
        
$_POST $removeMagicQuoteFunction($_POST);
        
$_COOKIE $removeMagicQuoteFunction($_COOKIE);
        foreach (
$_FILES as $k => $dummy)
            if (isset(
$_FILES[$k]['name']))
                
$_FILES[$k]['name'] = $removeMagicQuoteFunction($_FILES[$k]['name']);
    }

    
// Add entities to GET.  This is kinda like the slashes on everything else.
    
$_GET htmlspecialchars__recursive($_GET);
    
$_POST htmlspecialchars__recursive($_POST);
    
$_COOKIE htmlspecialchars__recursive($_COOKIE);

    
// Let's not depend on the ini settings... why even have COOKIE in there, anyway?
    
$_REQUEST $_POST $_GET;

}

// Adds slashes to the array/variable.  Uses two underscores to guard against overloading.
function escapestring__recursive($var)
{
    global 
$smcFunc;

    if (!
is_array($var))
        return 
addslashes($var);

    
// Reindex the array with slashes.
    
$new_var = array();

    
// Add slashes to every element, even the indexes!
    
foreach ($var as $k => $v)
        
$new_var[addslashes($k)] = escapestring__recursive($v);

    return 
$new_var;
}

// Adds html entities to the array/variable.  Uses two underscores to guard against overloading.
function htmlspecialchars__recursive($var$level 0)
{

    if (!
is_array($var))
        return 
htmlspecialchars($varENT_QUOTES);

    
// Add the htmlspecialchars to every element.
    
foreach ($var as $k => $v)
        
$var[$k] = $level 25 null htmlspecialchars__recursive($v$level 1);

    return 
$var;
}

// Unescapes any array or variable.  Two underscores for the normal reason.
function unescapestring__recursive($var)
{

    if (!
is_array($var))
        return 
stripslashes($var);

    
// Reindex the array without slashes, this time.
    
$new_var = array();

    
// Strip the slashes from every element.
    
foreach ($var as $k => $v)
        
$new_var[stripslashes($k)] = unescapestring__recursive($v);

    return 
$new_var;
}

// Remove slashes recursively...
function stripslashes__recursive($var$level 0)
{
    if (!
is_array($var))
        return 
stripslashes($var);

    
// Reindex the array without slashes, this time.
    
$new_var = array();

    
// Strip the slashes from every element.
    
foreach ($var as $k => $v)
        
$new_var[stripslashes($k)] = $level 25 null stripslashes__recursive($v$level 1);

    return 
$new_var;
}

?>

se usa incluyendo el archivo y llando la funcion

// Limpia las variables de petición, agrega barras, etc
cleanRequest();


Saludos.

PD: Eso lo usa SMF para darle seguridad a su script
  #10 (permalink)  
Antiguo 11/12/2011, 04:22
Avatar de jorgelpadronb  
Fecha de Ingreso: agosto-2011
Ubicación: Cuba
Mensajes: 281
Antigüedad: 12 años, 8 meses
Puntos: 37
Respuesta: Seguridad en PHP

Muchas gracias por ese script tan completo. Supongo que por ahí no pasan ni las moscas.

Saludos y gracias.
__________________
Los hombres pequeños, nunca se sienten pequeños; los hombres grandes, nunca se sienten grandes.

No sé quien fué el que dijo eso, pero está bueno.
  #11 (permalink)  
Antiguo 11/12/2011, 14:33
marcofbb
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Seguridad en PHP

Cita:
Iniciado por jorgelpadronb Ver Mensaje
Muchas gracias por ese script tan completo. Supongo que por ahí no pasan ni las moscas.

Saludos y gracias.
Igual recomiendo antes de subir algo a la bd usar tambien mysql_real_escape_string();

ejemplo:

$var = "Jaun Carlos"; // Imagina que esta variable se optiene via get o post
$var = mysql_real_escape_string($var);

$sql = "SELECT * FROM users WHERE name = '{$var}' LIMIT 1";

Si o si hay que poner los ' ', en el where para darle mas seguridad.

Saludos

Etiquetas: seguridad
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

SíEste tema le ha gustado a 1 personas




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