¡Advertencia!
Este tema no ha tenido respuestas en más de un mes. Recuerda que si deseas añadir una nueva debes cumplir con las normas de la web.
Algunas funciones y tips para mejorar su web.
------------------------------------------------
Hace poco esta adentrandome más en PHP y encontré (mejor dicho, recordé) una función parecida a la etiqueta FORM METHOD en modo GET de HTML que lo que hace es mostrar ó añadir los argumentos (en este caso los inputs) del formulario por una URL, ejemplo:


<html>
<head>
<title>Form</title>
</head>
<body>
<form action="" METHOD="GET">
Nombre: <input type="text" name="name" id="name"><br /> <!-- Xt3mP -->
Edad: <input type="text" name="age" id="age"><br /> <!-- 17 -->
Mail: <input type="text" name="mail" id="mail"><br /> <!-- Xt3mP@und3rgr0und.org -->
Pais: <input type="text" name="country" id="country"><br /> <!-- Mexico -->
<input type="submit" value="Enviar">
</form>
</body>
</html>


Y que al dar enviar nos generaría una URL algo así: www.web.com/path/?name=Xt3mP&age=17&mail=Xt3mP%40undergr0und.org&country=Mexico, es decir, nos muestra todas los "inputs" en la variable.

Entonces con PHP hay una función llamada http_build_query() que apartir de un array asociativo ó indexado, nos generaría una "cadena" al estilo de GET como mencioné anteriormente:


<?php
$datos = array("name" => "Xt3mP", "age" => "17", "mail" => "Xt3mP@und3rgr0und.org", "country" => "Mexico");
echo "www.web.com/path/?".http_build_query($datos);
/*
Daria:
[url=http://www.web.com/path/?name=Xt3mP&age=17&mail=Xt3mP%40und3rgr0und.org&country=Mexico]www.web.com/path/?name=Xt3mP&age=17&mail=Xt3mP%40und3rgr0und.org&country=Mexico[/url]
*/
?>


Como ven, hace "prácticamente" lo mismo, esto puede servir en caso de que tengamos muchos "switchs" ó si tenemos alguna página que necesite agregar los argumentos en la URL ya que no podemos hacer un "switch" para cada parámetro, entonces creamos un array con los datos que ocuparémos y listo, la verdad a mi me funciona mucho, espero les sirva.
------------------------------------------------
Limpiar variables con carácteres raros.

Cuantas veces no nos ha pasado que tenemos algún sistema de usuarios ó algún sistema de registros en donde el usuario tiene que facilitar su nickname (nombre de usuario) y al revisar el registro ó base de datos nos encontramos con carácteres raros que pueden dejarnos vulnerables, entonces hice una función que "limpia" literalmente los carácteres raros de la siguiente manera:


<?php
function limpiar_texto($texto){
$car = array("\\","ª","º","-","~","#","@","|","!","\"","·","$","%","&","/","(",")","?","'","¡","¿","[","^","`","]","+","Ç","}","{","¨","´","ñ","Ñ",">","<",";",",",":","."," ","á","é","í","ó","ú","Á","É","Í","Ó","Ú","à","â","ã","À","Â","Ã","è","ê","ì","î","Ì","Î","ò","ô","õ","Ò","Ô","Õ","ù","û","Ù","Û");
$texto = str_replace($car, "", $texto);
return $texto;
}
echo limpiar_texto($_GET['casilla_de_texto']);
/*
xTÉèêemP daria:
xTemP
*/
?>


Entonces, simplemente hacer un include a las funciones y agregar la que les facilité arriba y así limpiamos los carácteres raros, inclusive pueden quitar ó agregar carácteres en el array dependiendo lo que necesiten.
------------------------------------------------
Saber quien nos está queriendo fastidiar la web.

Muchas veces al filtrar las variables no se guarda en la base de datos los carácteres raros que pueden ser vulnerables hacia nuestra web, pero ¿Entonces como localizaríamos a aquellos que nos quieren joder? Fácil.

Suponiendo que es un registro:


<?php
include ("connect.php"); //Incluimos la conexion a la DB
$user = $_POST['user'];
$pass = $_POST['pass'];
$mail = $_POST['mail'];
$ip = $_SERVER[REMOTE_ADDR];
mysql_query("INSERT INTO users (user,pass,mail,ip) values ('".$user."','".$pass."','".$mail."','".$ip."') ") or die (mysql_error());
echo "Hola ".htmlentities($user).", te has registrado correctamente.";
?>


Introducimos los datos a la base de datos sin filtrar las variables y mostramos en pantalla filtrandolas, te preguntarás ¿Por qué? Así suponiendo que el usuario escribe algo como "<h1>Xt3mP</h1>", así igualmente aparecería en la base de datos junto con la IP, de esta manera sabremos quien nos esta queriendo joder las "balls", obviamente al mostrarlo en pantalla le metemos un htmlentities(), bueno, a mi me sirve, he pillado a muchos que han querido joderme.
------------------------------------------------
Usuarios autorizados.

A veces (He visto), que una parte de las páginas web online te piden autorización para ciertas páginas, digamosle panel_adm.php ¡PERO!, si entramos (ejemplo) a panel_adm_addusers.php da la casualidad que hay no te pide autorización del sitio y queda totalmente a la merced del usuario atacante.

Les recomiendo hacer una función ó comprobar (como lo haré en este caso) que siempre que sea una página crítica solo personal autorizado pueda acceder a ella:


<?php
session_start(); //Inicia la session, si existe la retoma, si no existe la crea.

if ($_SESSION['admin'] != TRUE){ //Comprobamos que la sesion ADMIN sea verdadera, recuerden que != significa diferente a.
echo "No autorizado";
}else{

//Toda la web aqui

}
?>

------------------------------------------------
Encriptación de contraseñas.

A veces la encriptación de contraseñas con "hashes" se nos hace un poco díficil ya que es one-way, es decir, solo encriptan más no tiene función para desencriptar a menos que sea con "brutus force" mediante encriptando la contraseña en el mismo tipo de encriptación y comparar si la contraseña encriptada es igual a la que encriptamos, es decir:


Si la contraseña encriptada del usuario es: 21fa33e4fb9fa3f1da10f7c17823e7e8

El atacante al obtener esa contraseña y darse cuenta por obvias razones que es md5, utilizará alguna herramienta tanto online como offline que funcionan de la siguiente manera:

Encriptar: Text1 = 1c06e3d86536d0eb8903da08af433909
Encriptar: Text1 = eb396671a7de43af3a9b5afaceb1514b
Encriptar: Xt3mP = 21fa33e4fb9fa3f1da10f7c17823e7e8 (Bingo) Nos vota exáctamente el mismo hash por lo tanto esa sería la contraseña.

En terminos básicos, para desencriptar un hash one-way se hace a la reversa literalmente, encriptas el texto lo cual hará que nos genere un hash y ya obteniendo ese hash lo comparas con el hash de la contraseña.

Así que almenos yo encripto la contraseña de manera muy, mmm como decirlo, que sea díficil de descifrarla:


<?php
$pass = "Xt3mP";
$pass = base64_encode(md5(md5(sha1(crypt(md5($pass),"s523/*a5s4s"))).$pass));
echo $pass;
/*
Daria:
Y2YzOWUxYzNkZWZiZGExYmU3OTUyNDk2MmE0YjhiNTA=
*/
?>


Ya al momento de querer cambiar la contraseña hay sería lo díficil, porque tendrías que crear un sistema de reseteo de contraseña mediante la introducción de la fecha de nacimiento, pregunta privada, etc.

Nota: Y sí, puse base64 para que cuando el atacante la vea sepa que le estoy jugando una pequeña bromita =).
------------------------------------------------
Ultimo tip y el más importante.

Es un frase:

"No por tener menos código significa que sea mejor."

Creo que le entienden, se refiere a que no por tener reducido todo en un solo PHP (y gracias a esto cometer un error de programación) significa que el script vaya a ser mejor ó más rápido, usen la cantidad de archivos que realmente necesiten.
------------------------------------------------
Saludos.

¡Soy el fantasma de Habtium! Me dedico a reemplazar aquellas cuentas que han sido eliminadas. 👻
Pues... gracias por el tema..
por cierto me cague de la risa con esto x'dddd
<?php
$pass = "Xt3mP";
$pass = base64_encode(md5(md5(sha1(crypt(md5($pass),"s523/*a5s4s"))).$pass));
echo $pass;
/*
Daria:
Y2YzOWUxYzNkZWZiZGExYmU3OTUyNDk2MmE0YjhiNTA=
*/
?>


x'dd te aseguro que nadie descifra la cadena... xdd
En fin.. (Yo le hubiera puesto 10 md5() y unas 15 base64) D:


Para los que están viendo el tema... Esto es solo un ejemplo:
$$CODE1$$

Digo.. Que los "nuevos" no se vallan a creer que de verdad eso esta completo x'ddd
Aparte, por lo general se usan datos provenientes de la sql.

Arquitecto, diseñador y programador | Comenzando a proyectar mi vida bajo mis propios ideales. Administrador de ilDom, Twiteck y Century21
Explica esa bromilla de base64 pls

Explica esa bromilla de base64 pls

Encripta un texto en base64, así de simple.

http://php.net/manual/es/function.base64-encode.php

Explica esa bromilla de base64 pls


base64 es un sistema de ofuscación de código.

Por lo general se usa en los copyright de ciertas herramientas.
para decodificar una cadena en base64 se usa base64_decode()

Arquitecto, diseñador y programador | Comenzando a proyectar mi vida bajo mis propios ideales. Administrador de ilDom, Twiteck y Century21
Pues que la mayoría de los atacantes al ver el de base64 creen que ya "tienen la contraseña decifrada", pero lo que no saben es que esta encriptada hasta del ...., por lo tanto sería prácticamente imposible de desencriptar.

Y sobre la sesiones como dice SoyJoaquin., depende de la session que hayan registrado, solo era para que lo tomaran de ejemplo.

Saludos :B

¡Soy el fantasma de Habtium! Me dedico a reemplazar aquellas cuentas que han sido eliminadas. 👻

Pues que la mayoría de los atacantes al ver el de base64 creen que ya "tienen la contraseña decifrada", pero lo que no saben es que esta encriptada hasta del ...., por lo tanto sería prácticamente imposible de desencriptar.

Y sobre la sesiones como dice SoyJoaquin., depende de la session que hayan registrado, solo era para que lo tomaran de ejemplo.

Saludos :B


Baby puedes explicar el http_build_query() ?
Que hay si que me jodiste...

Arquitecto, diseñador y programador | Comenzando a proyectar mi vida bajo mis propios ideales. Administrador de ilDom, Twiteck y Century21

Baby puedes explicar el http_build_query() ?
Que hay si que me jodiste...


Claro que sí, te explicaré de la siguiente manera, si en xHtml utilizamos el method="GET" en el form se encrustan todos los argumentos en una url algo así:



Eso hace prácticamente http_build_query() apartir de un array tanto asociativo como indexado.

¡Soy el fantasma de Habtium! Me dedico a reemplazar aquellas cuentas que han sido eliminadas. 👻

Claro que sí, te explicaré de la siguiente manera, si en xHtml utilizamos el method="GET" en el form se encrustan todos los argumentos en una url algo así:

Eso hace prácticamente http_build_query() apartir de un array tanto asociativo como indexado.



ya entendí x'dddd
Aunque, Si te soy sincero, a ese http_build_query() no le veo futuro... Es que, ¿En que podría utilizarse? :S

Arquitecto, diseñador y programador | Comenzando a proyectar mi vida bajo mis propios ideales. Administrador de ilDom, Twiteck y Century21

ya entendí x'dddd
Aunque, Si te soy sincero, a ese http_build_query() no le veo futuro... Es que, ¿En que podría utilizarse? :S


Suponiendo que tienes una página de todo tu país de agencia de viajes, y para cada ciudad ocupas demasiados valores, con esa función metes dichos valores en la array para luego sacarlos por la url, a mi si me sirve, todo depende de para que lo utilizes.

¡Soy el fantasma de Habtium! Me dedico a reemplazar aquellas cuentas que han sido eliminadas. 👻

Pues que la mayoría de los atacantes al ver el de base64 creen que ya "tienen la contraseña decifrada", pero lo que no saben es que esta encriptada hasta del ...., por lo tanto sería prácticamente imposible de desencriptar.

Y sobre la sesiones como dice SoyJoaquin., depende de la session que hayan registrado, solo era para que lo tomaran de ejemplo.

Saludos :B


Hay habría que cambiar la encriptación, porque se supone que desencriptar ese código, sabiendo como es, sería hacer la operación a la inversa con el base64_decode y listo, ¿no?

De todas formas, buen post, tienes muchos buenos post, haber si añaden alguno como fijo o los ponen en la recopilación :chicle:.
Bien hecho :).

¡Soy el fantasma de Habtium! Me dedico a reemplazar aquellas cuentas que han sido eliminadas. 👻

Hay habría que cambiar la encriptación, porque se supone que desencriptar ese código, sabiendo como es, sería hacer la operación a la inversa con el base64_decode y listo, ¿no?

De todas formas, buen post, tienes muchos buenos post, haber si añaden alguno como fijo o los ponen en la recopilación :chicle:.
Bien hecho :).


No te entendí, Y... No, Tendría que desencriptar tooooda la cadena en el orden correcto, cosa que dudo que alguien lo haga solamente para saber una contraseña que quizás mas delante no te sirva de nada.

Arquitecto, diseñador y programador | Comenzando a proyectar mi vida bajo mis propios ideales. Administrador de ilDom, Twiteck y Century21
Aqui Esta La Mejor web (para mi gusto) de encryptacion y desicryptacion
http://www.crypo.com/

 

¡Soy el fantasma de Habtium! Me dedico a reemplazar aquellas cuentas que han sido eliminadas. 👻

No te entendí, Y... No, Tendría que desencriptar tooooda la cadena en el orden correcto, cosa que dudo que alguien lo haga solamente para saber una contraseña que quizás mas delante no te sirva de nada.


Pues eso, a la inversa, en vez de encriptarla, desencriptarla en el orden correcto, y si esta tan encriptada sera por algo :chicle:.
Bueno, no digo nada...

¡Soy el fantasma de Habtium! Me dedico a reemplazar aquellas cuentas que han sido eliminadas. 👻

Pues eso, a la inversa, en vez de encriptarla, desencriptarla en el orden correcto, y si esta tan encriptada sera por algo :chicle:.
Bueno, no digo nada...


Fuck, se borró mi comentario de hace rato, creí que se había posteado, haber te explico.

El base64 realmente es una función de encriptación realmente innecesario ya que se puede desencriptar, y por eso mismo es que en mi script puse a propósito el base64 para que el atacante sepa que le estoy jugando una bromita, y no necesariamente por estar encriptada es por algo, alomejor estan encriptadas palabras que ni alcaso y la password original esta desencriptada, luego tambien las tablas/columnas pueden tener nombres que nada que ver como "imagenes" o cosas así.

Ahora, cada usuario modificará el script a su necesidad, no tiene porque estar encriptada de la misma manera, y sin acceso al PHP como sabrás en que forma esta encriptada?

Reitero, el base64 solo es para fastidiar al atacante, saludos

¡Soy el fantasma de Habtium! Me dedico a reemplazar aquellas cuentas que han sido eliminadas. 👻