Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Xt3mP

#241
Lo de la definición me referia a que te los mostrará, es bueno saber quien te quiere jugar un poco :P y si como dice en el texto:
<h1>test</h1> sacaría <h1>test</h1>, es decir, que no interpretará el código pero lo sacaría con el mismo formato, es divertido (como dije arriba) saber quien te quiere jugar xD.

Sobre la inyección SQL dijiste:
Citarselect * from nombres where id=1 union select 1,user()

Y yo dije:
Citar$query = mysql_query("SELECT * FROM noticias WHERE id=' ")

En donde el ' es lo que obtuvimos del path, pero como en el ejemplo no escribí id=1+union+select si no que escribí solo una comilla simple, por eso el query de ejemplo lo puse con la comilla.

Así que como escribiste, tál vez me expliqué mal o lo malentendiste, pero me referia a exáctamente lo mismo que tú.

Sobre LFI:

Código: php
<?php
$file = str_replace('/','',$_GET['path']);
$file = "./".$file;
if (file_exists($file)){
include ($path);
}else{
echo "No intentes buggear";
}
?>


Creo que hay queda mas que claro que es un include seguro, eliminamos posibles carácteres, comprobamos que exista el archivo y luego incluímos, pero igual saludos y gracias por tu comentario brother, hasta pronto.

P.D. Ya vi donde dices:
CitarYou are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login pediria la peticion como:
$query = mysql_query("SELECT * FROM noticias WHERE id=' ")

Solo fue un error de dedo y me confundí por eso puse la comilla simple, saludos.
#242
Perfecto, en nuevas versiones hablare sobre Flash, ASP, entre otras, saludos.
#243
Bugs y Exploits / Seguridad y Protección a nivel web.
Agosto 14, 2010, 12:05:44 AM
Protección y seguridad a nivel web, versión 1.

He visto por hay varios temas (no solo en este foro) en donde el punto príncipal es la seguridad web "parchando" así las posibles fallas que pueda tener la programación y/ó la estructuración del sitio, es lamentable ver (al decir lamentable me refiero a que no es bueno) que explican como parchar la vulnerabilidad (ó al menos la mayoría) pero no explican el porque de la vulnerabilidad. (Es como querer enseñar a un niño a correr cuando todavía no sabe caminar), por lo tanto mi punto es: explicar "PORQUE" existe ó se puede llevar a cabo la vulnerabilidad y una vez explicada, explicar como parcharla.

Cabe mencionar que no explicaré ni diré todas las vulnerabilidades a nivel web por tres razones:
1- Falta de tiempo.
2- No puedo hacer un post demasiado largo, perdería el toque, en próximas versiones tál vez explique otras.
3- Al aprender el porque y como parchar unas cuantas, estoy seguro que cuando encuentren otra en su sitio web sabran parcharla.

Por lo que solo explicaré las más "comúnes/típicas".
------------------------------------------------------------
XSS/HTML Injection
------------------------------------------------------------
XSS (Cross Site Scripting), se le denominó XSS para no confundir con las hojas de estilo (CSS), la vulnerabilidad se explota mediante la inyección de código "script/scripting" en alguna variable tanto POST como GET.

HTML Injection (Inyección HTML), la vulnerabilidad se explota mediante la inyección de código (príncipalmente HTML) en alguna variable tanto POST como GET.

¿Qué tienen de diferencia? Que XSS hace correr script (Ej: <script>alert('XSS');</script>) y por otro lado, HTML Injection hace correr tags literalmente (Ej: <marquee>HTMLi</marquee>, <table></table>, <iframe></iframe>, etc).

Puse las dos juntas en el mismo subtítulo ya que la forma en que se pueden parchar se pueden utilizar para las dos. Tomaré de ejemplo el siguiente "buscador":

Código: php

<?php
$buscar = $_GET['buscar'];
echo "La busqueda de: ".$buscar." no encontro ningun resultado";
/*
En donde si ponemos tanto script como tags se ejecutaria en la misma pagina
*/
?>


Entonces, ¿Como se parcharían estos tags? PHP te brinda 3 funciones escenciales, las cuales son strip_tags(), y htmlentities().
strip_tags() = Elimina las etiquetas de los tags (<h1>test</h1> = test);
htmlentities() = Obtiene los tags de la inyección y evita que se ejecute. (<h1>test</h1> = <h1>test</h1>);

Pueden utilizar cualquiera

Podemos hacerlo directamente:
Código: php

<?php
$buscar = strip_tags(htmlentities($_GET['buscar']));
echo "La busqueda de: ".$buscar." no encontro ningun resultado";
/*
En donde si ponemos <h1>Vulnerable</h1> votaria exactamente:
La busqueda de: <h1>Vulnerable</h1> no encontro ningun resultado

En donde si ponemos <table border="0"> votaria exactamente:
La busqueda de: <table border=\"0\"> no encontro ningun resultado
Como se puede apreciar ya no se ejecutaron los tags.
?>


Generalmente se utiliza una inyección HTML solo para fastidiar al programador, por otro lado, con XSS se pueden hacer cosas interesantes como el robo de cookies, la verdad no pretendo enseñarles a como llevar acabo una vulnerabilidad si no como parcharla, así que les daré solo un breve ejemplo de un robo de cookies:

Nota: No explicaré mediante código esta vulnerabilidad ya que no se trata de "incitarlos" a que lo hagan, si no a parcharlo.

Un robo de cookies mediante XSS se caracteriza (su nombre lo dice todo) por "inyectar" en la vulnerabilidad mediante script un código que al ser enviado (en este caso a un supuesto administrador) y dar click en el enláce, automáticamente se envía un correo (esto depende de la página atacante) con la cookie del Administrador, posteriormente con algun editor de cabezeras (el mejor para mi es Tamper DATA) se cambia la cookie de sesión nuestra por la que obtuvimos por el administrador y listo, sesión de Administrador robada:

Citar
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login<script>window.location='You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login</script>

Ya solo es cuestión de agarrar la variable "cookie" en este caso y guardarla (tanto en .txt como correo), solo sería cuestión de disfrazar y meterle ingeniería social, y para parcharlo con las funciones de arriba se lleva acabo.
Es algo interesante este par de vulnerabilidades ya que sabiendo utilizarlas se puede hacer algo de daño, así que si son vulnerables, es hora de que lo dejen de ser.
------------------------------------------------------------
SQL Injection
------------------------------------------------------------
SQL Injection [Inyección SQL (Structured Query Language)], se caracteriza por no filtrar la petición a la base de datos conllevando con esta, un error en la implementación del valor a "pedir" y así exponiendo el código, es decir, que gracias a una mala estructuración/programación del código para hacer una petición (no filtrar las variables) se puede explotar dejando así toda la base de datos a la vista del atacante.

Aquí entra algo de polémica, la mayoría solo cree que una inyección SQL siempre será: -1+SELECT+UNION+1,2--, pero nó, existen muchos tipos de inyecciones SQL pero en este caso indicarémos como parchar la "típica".

Un ejemplo de una mala estructuración es (es parecida al error de la vulnerabilidad XSS/HTMLi), suponiendo que el link seria You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Código: php

<?php
include("connect.php"); //Conexion a la base de datos
$id = $_GET['id']; //Obtenemos el ID
$query = mysql_query("SELECT * FROM noticias WHERE id=".$id." "); //Hacemos la peticion
/*
web.com/noticia_id.php?id=-1 pediria la peticion como:
$query = mysql_query("SELECT * FROM noticias WHERE id=' ")
Y mostraria un error como este:
You have an error in your SQL syntax; check the manual that corresponds toyour MySQL server version for the right syntax to use near '' at line 1
*/
?>


Daría error, entonces al intentar acceder como (-1+UNION+SELECT+1) daría:
Citar
The used SELECT statements have a different number of columns

Entonces así podemos ir explotando la vulnerabilidad hasta obtener datios valiosos (en una experiencia personal, logré obtener cerca de 5000 tarjetas de crédito).

Viene lo agradable ¿Como parcharla? como se han dado cuenta, se lleva acabo por una mala petición en el código, entonces así como PHP nos brinda funciones para filtrar, SQL tiene una por su lado que es mysql_escape_string() que con este filtraremos el GET, tambien podemos comprobar que exista la noticia antes de mostrarse, este sería el código:

Código: php

<?php
include("connect.php"); //Conexion a la base de datos
$id = strip_tags($_GET['id']); //Obtenemos el ID

if (is_numeric($id)){ //Comprobamos que sea numerico

$query = mysql_query("SELECT * FROM noticias WHERE id=".mysql_escape_string($id)." "); //Hacemos la peticion

if ($row = mysql_fetch_array($query)){ //Comprobamos que exista
echo "Noticia: ".$row['titulo']."<br />";
}else{
echo "La noticia no existe";
}
}else{
echo "La noticia no existe";
}
?>


¿Qué hacemos? Incluímos la conexión a la base de datos, obtenemos el ID por GET y lo filtramos, comprobamos si es númerico el ID, hacemos la petición filtrada con mysql_escape_string(), comprobamos que exista la noticia, por otro lado, si no es númerico ó no existe la noticia te marcará un error (echo...).
Así de sencillo parchamos (ó mejor dicho, hacemos menos posible la vulnerabilidad) SQL Injection.
------------------------------------------------------------
Full Path Disclosure
------------------------------------------------------------
Esta vulnerabilidad en lo personal me agrada, ¿Por? Porque por un pequeño error en el código te muestra el "Full Path", es decir, con un error que nos tire te muestra todos los paths por donde pasa el script, generalmente sucede en descargas ya que no filtramos muy bien la ruta de los archivos y dejamos al descubierto todos los directorios, por ejemplo:

Suponiendo que nuestra página tiene un link para descargar los archivos que nosotros indiquemos, algo como:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Entonces como vemos hace un "query" prácticamente al archivo a descargar, pero que sucede si nosotros recorremos el path con los comandos que tál vez conozcas (.. , ., etc) para recorrer ó avanzar directorios, quedaría algo así:

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Citar
Warning: fopen(testing) [function.fopen]: failed to open stream: No such file or directory in
/var/www/name/html/descargar.php on line 5

Y como vemos, en este caso es "/var/www/name/html/admin/", cuando una web es vulnerable, el atacante comúnmente busca el archivo /etc/passwd por default, entonces la url quedaría:

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

En donde cada ../ es una carpeta anterior, todo depende de donde este situado esta vulnerabilidad, te preguntarás, ¿Pero en qué nos afecta?
En que si nosotros ingresamos por (suponiendo que tengamos una carpeta llamada admin):

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Se nos descargaría el "Script" completo del admin y sería cuestión de ir jugando con los archivos para ver que otras vulnerabilidades tienen.

¿Como parchar? Para wordpress existe (este código no es mío, pero esta muy conocido en la red):

Citar
if(function_exists('add_action')) {
[...]
}

Y por mi parte las recomendaciones serían:

1.- Evitar mostrar el error en pantalla, tanto modificando el php.ini como editando todo archivo para que no muestre error, ó bien agregando error_reporting(0);
2.- Si haran descarga de archivos "web.com/descargar.php?file=" sería preferible que mejor pongan:
2.1- Descargas directas: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login"
2.2- Hacer un array ó switch para cada "case" y no poner directamente el nombre (archivo.php) si no alguna abreviación como
web.com/descargar.php?file=videos_anio_nuevo y ya con un "file_exists()" comprobamos la existencia del archivo.
3.- Si bien deciden dejar el script así, pueden implementar un código más ó menos de esta manera para fijar el directorio en una carpeta en específico y comprobar la existencia de este, claro esta, tambien sustituímos los carácteres (".","/") que son los usuales en estos casos:

Código: php

<?php
$file = str_replace(array('.','/'),'',$_GET['file']);
$file = "./".$file; //Indicamos con el ./ que el fichero debe encontrarse en el mismo directorio.
if (!file_exists($file)){
echo "No intentes bugear";
}else{
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"$file\"\n");
$filepath=fopen("$file", "r");
fpassthru($filepath);
}
?>

------------------------------------------------------------
RFI/LFI
------------------------------------------------------------
RFI (Remote File Inclusion), consiste en como su nombre lo dice, incluír archivos remótamente en el servidor.
LFI (Local File Inclusion), consiste en como su nombre lo dice, incluír archivos localmente en el servidor.

Estas vulnerabilidades antes eran muy típicas, pero conforme PHP fue avanzando de versión fueron "más díficiles" encontrarnos con una.
Lo explicaré brevemente ya que es parecido lo mismo que Full Path Disclosure.

Para RFI:
Suponiendo que tenemos una página llamada You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login y tenemos un código parecido a este:
Código: php

<?php
$file = $_GET['path'];
include ($path);
?>


Como se observa, incluímos directamente el GET sin filtrarlo ni comprobar que exista, entonces ¿Por qué les puede perjudicar?
Si yo en su página hago You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login ¿Que pasaría? Se incluiría en su página mi script malicioso y tendría acceso a todo su servidor/hosting ocasionando que yo pueda malusa resta vulnerabilidad y destrozarles su página (cosa que nunca hago).

Para LFI:
Suponiendo que tenemos la misma página, pero ahora si filtramos el archivo y comprobamos que exista de esta manera:
Código: php

<?php
$file = $_GET['path'];
if (file_exists($file)){
include ($path);
}else{
echo "No intentes buggear";
}
?>


Aquí pasaríamos de nuevo con el Full Path Disclosure, comenzamos a "navegar" con "../" , "./" hasta encontrar algún archivo vulnerable y comenzar a atacar.

¿Como parcharlo?
Esta manera que explicaré será para las dos vulnerabilidades:
Código: php

<?php
$file = str_replace('/','',$_GET['path']);
$file = "./".$file;
if (file_exists($file)){
include ($path);
}else{
echo "No intentes buggear";
}
?>


Como se observa, se utilizó "casi" la misma manera de parchar el Full Path Disclosure, solo es cuestión de que analizen su código línea por línea.
------------------------------------------------------------
Tips
------------------------------------------------------------
Les daré un par de tips para hacer segura su web que en lo personal me han servido de mucho:
1.- Si se trata de sesiones, comprobar en "cada página" que solo usuarios autorizados puedan acceder.
2.- Filtrar todas y cada una de las variables.
3.- Generar "errores" marcados por nosotros, por ejemplo:

Código: php

<?php
$error = array('Error de existencia', 'Error numerico');
if (file_exists($archivo)){
//Todo el codigo
}else{
$file = fopen("error.txt", 'a+'); //Permisos de escritura y lectura con a+
fwrite($file, '
Error: '.$error[0].' a las: '.date('r').' de la IP: '.$_SERVER[REMOTE_ADDR].'\n');
fclose($file);
}

if (is_numeric($id)){
// Todo el codigo
}else{
$file = fopen("error.txt", 'a+'); //Permisos de escritura y lectura con a+
fwrite($file, '
Error: '.$error[1].' a las: '.date('r').' de la IP: '.$_SERVER[REMOTE_ADDR].'\n');
fclose($file)
}
?>


4.- Evitar mostrar errores en pantalla mediante "@" ejemplo:

Código: php

<?php
$file = @fopen('index.php','a+');
@fwrite($file, 'Xt3mP');
@fclose($file);
?>


5.- Entre otros
------------------------------------------------------------
Espero que este manual les haya aclarado muchas dudas, y para los que digan que ya existen otros noten la diferente entre "Como hacerlo/Parcharlo" y "Porque sucede eso".
P.D: En la próxima versión hablaré sobre otras vulnerabilidades, entre ellas asp injection.
P.D.2: Si se me paso algo ó escribe algo mal fue porque lo escribí continuamente sin descansar y a veces se confunde uno.
Saludos.
------------------------------------------------------------
#244
Back-end / Numeros ó Strings aleatorios.
Agosto 13, 2010, 05:02:00 AM
Números ó Strings aleatorios.

Esta vez hablaré acerca de unas funciones que en lo particular es la mejor para mi, ya que te genera aleatoriamente un número dependiendo de la función que utilizes.

Hablaré sobre dos funciones (inclusive alguno solo conocerá la primera):
rand() = Puede recibir dos parámetros, si no se especifíca ninguno, el valor número más alto que puede generar es 32767.
mt_rand() = Puede recibir dos parámetros, si no se especifíca ninguno, el valor número más alto que puede generar es 2147483647.

¿Notan la diferencia? Tienen una diferencia númerica de 2,147,450,880, rand solo alcanza a cifras de 5 números, por otro lado mt_rand alcanza cifras de 10 números.
-----------------------------------------------------
La función rand() tiene una derivada para mostrar el valor númerico mas alto que puede generar llamada getrandmax(), puede recibir dos parámetros, desde que número empieza hasta que número termina:

Código: php

<?php
echo rand(); //Genera un numero aleatorio entre 0 y 32767.
echo getrandmax(); //Genera un numero con valor a 32767.
echo rand(0,15); //Genera un numero entre 0 y 15, estos dos números pueden variar siempre y cuando no sobre pasen los 32767.
/*
Daria:
17812 //El aleatorio de 0 y 32767
32767 //El maximo
13 //Entre 0 y 15
*/
?>

-----------------------------------------------------
Por otro lado, mt_rand() tiene una capacidad de 2147483647, pero esto no quiere decir que actue de diferente forma, recibe los mismos parámetros:

Código: php

<?php
echo mt_rand(); //Genera un numero aleatorio entre 0 y 2147483647.
echo mt_getrandmax(); //Genera un numero con valor a 2147483647.
echo mt_rand(24565,4976854); //Genera un numero entre 24565 y 4976854, estos dos números pueden variar siempre y cuando no sobre pasen los 2147483647.
/*
Daria:
1660000551 //El aleatorio entre 0 y 2147483647
2147483647 //El maximo
289095 //Entre 24565 y 4976854
*/
?>


Cabe mencionar que si a rand() le ponemos por ejemplo: rand(4564,65798712) tambien te lo genera, pero si utilizamos getrandmax() no pasará los 32767.
-----------------------------------------------------
¿Como se puede utilizar el rand? ¿Ó para que es utilizado en la mayor parte de los casos? Harémos uso de un array, pero antes explicaré que se hará para este ejemplo.
Crearémos dos arrays, uno con todas las letras del abecedario y otro con palabras "al azar" (realmente no es al azar, porque las escribiré directamente xd) para que con el uso del rand se generen automáticamente:

Código: php

<?php
$abe = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'); //26
$pal = array('Xt3mP', '[email protected]', 'Mexico', '17 de edad', 'Banking', 'Robar tarjetas de credito', 'abc123', 'xD');//8
$rand_pal = rand(0,7); //Igual que el de arriba.
// Crearemos un directorio cualquiera con "nombres al azar".
$directorio = rand(0,9).$abe[rand(0,25)].rand(0,9).$abe[rand(0,25)].rand(0,9).$abe[rand(0,25)]; //Generaria 4i9y5f
@mkdir ($directorio);
// Ahora "mostraremos una password con palabras anteriormente definidas"
echo "Hola usuario, tu nueva password es: ".$pal[rand(0,7)]; //[email protected]
?>


Como pueden observar, se utilizo un rand dentro de un array para que dentro de los valores anteriormente definidos del array los tomara al azar. Esto es de mucha utilidad cuando tienes cientos de passwords predefinidas por el usuario ó estás creando algún tipo de concurso por sorteo generar los "boletos" al azar, tambien puedes generar la clave al azar, por ejemplo:

Código: php

<?php
$abe = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'); //26
$pass = $abe[rand(0,25)].rand().$abe[rand(0,25)].rand().$abe[rand(0,25)].rand();
/*
Daria:
i21636u10402s13552
Ya solo es cuestion de meterle base de datos para hacer un update, etc.
*/
?>

Solo es cuestion de que usen la imaginación con todas y cada una de las funciones que nos brinda PHP.
-----------------------------------------------------
Espero esto los motive a seguir en PHP, saludos.
#245
Back-end / Ficheros en PHP
Agosto 13, 2010, 01:36:34 AM
Archivos.

¿Qué explicaré?
Carga de ficheros (Tanto permisos, nombre, tipo, tamaño, etc) y funciones acerca de archivos (copiar, mover, eliminar, crear, etc).

Quisiera comenzar explicando la diferencia entre $_FILES y $HTTP_POST_FILES.
Las dos son variables que contienen la misma información cuando se hace una carga a el script (en este caso, subir un archivo), pero la diferencia es que $HTTP_POST_FILES no es una variable "superglobal", con esto quiero decir que tál vez contenga la misma información del fichero pero no se puede acceder en todo el script a ella sin hacer global $fichero, por otro lado, $_FILES si es una "superglobal" que está disponible ó se puede acceder a ella durante y/ó en cualquier parte del script, y según leí (esto no lo tenía en cuenta) $_FILES esta disponible desde la versión 4.1.0 por lo que $HTTP_POST_FILES quedo completamente "nulled" en esas versiones.

Tomando de siempre de ejemplo en este caso el siguiente uploader:

Código: html5

<form action="subir.php" method="post" enctype="multipart/form-data">
<b>Archivo: </b>
<br>
<input name="fichero" type="file">
<br>
<input type="submit" value="Enviar">
</form>


Comenzemos, las variables príncipales de $_FILES son las siguientes (noten que fichero es el nombre del input type por lo que en $_FILES el primer "valor del array" es el nombre del input, y como mencioné anteriormente, en este caso es fichero:
$_FILES['fichero']['tmp_name'] = Muestra el nombre "temporal" del archivo, puede ser parecido a phpC2.tmp, siempre varian.
$_FILES["fichero"]["name"] = Muestra el nombre original del archivo, en este caso muestra tutorial.txt.
$_FILES["fichero"]["type"] = Muestra el tipo del archivo, en este caso es text/plain pero hay image/jpeg, stream, etc, todo depende si es ejecutable, imagen, texto plano, script, entre otros.
$_FILES["fichero"]["size"] = Muestra el tamaño de archivo en bytes, pueden hacer una operación divisoria de / 1024 para ir convirtiendolo a kb, mb, gb, etc.
Código: php

<?php
echo $_FILES['fichero']['tmp_name']."<br />"; //Es el archivo temporal para subir al servidor
echo $_FILES["fichero"]["name"]."<br />"; //Es el nombre del archivo a subir al servidor
echo $_FILES["fichero"]["type"]."<br />"; //Es el tipo (mime) del archivo a subir al servidor
echo $_FILES["fichero"]["size"]."<br />"; //Es el tamano (en bytes) del archivo a subir al servidor
/*
Nota: Puedes hacer $_FILES["fichero"]["size"] / 1024 para ir en escala de bytes, kb, mb, etc.
Daria como resultado:
C:\WINDOWS\Temp\phpC2.tmp => Temporal
tutorial.txt => Nombre
text/plain => Tipo (mime)
0 => Peso
*/
?>


Como pudieron observar, esas son los valores del array $_FILES que se utilizan para hacer un uploader, solo tiene que coincidir el nombre del input con el del script (en este caso; fichero).

Para hacer la "copia" ó mejor dicho "mover" el archivo al lugar definitivo en donde se almacenará el fichero, se utiliza la función move_uploaded_file(); creo que el nombre lo dice todo.
move_uploaded_file() recibe dos parámetros, el primero es el nombre temporal del archivo a subir, y el segundo es en donde se almacenará, pueden notar que tengo una variable llamada $path que es donde indico a que carpeta subiré los archivos.

Ejemplo:

Código: php

<?php
$path = "files/";
$temporal = $_FILES['fichero']['tmp_name'];
$archivo = basename($_FILES["fichero"]["name"]);
if( (move_uploaded_file($temporal,$path.$archivo))){
echo "Archivo subido correctamente.";
}else{
echo "Hubo un error en la carga del archivo.";
}
?>


Aqui pueden utilizar simplemente $_FILES["fichero"]["name"] sin necesidad del basename ya que la funcion basename() solo vota el nombre de fichero.
-----------------------------------------------------------
Copiar un archivo
-----------------------------------------------------------
Para copiar un archivo se utiliza la función copy() que recibe dos parámetros, el fichero original y la ruta a donde se copiará, ejemplo (Tomando de ejemplo el archivo tutorial.txt que anteriormente subimos):
Código: php

<?php
$path = "files/";
$archivo = basename($_FILES["fichero"]["name"]);
copy($path.$archivo, $path."tutorial_copia.txt");
/*
Daria:
files/tutorial_copia.txt
*/
?>


Recuerden que para copiar un archivo se necesita "determinar" el directorio en donde se encuentra el archivo, inclusive se puede copiar de un directorio a otro.
-----------------------------------------------------------
Comprobar si un fichero/directorio existe
-----------------------------------------------------------
Esto les servirá muchos a aquellos que tengan su modulación digamos "index.php?page=home.php", que prácticamente se incluye la página que se obtiene por get y si no la filtran son vulnerables a RFI/LFI, si no tiene modulación igual funciona, existe una función llamada file_exists() que comprueba la existencia de un fichero, tiene un parámetros que por lógica deben suponer que se trata del archivo, en este caso comprobarémos la existencia del archivo "tutorial_copia.txt".
Código: php

<?php
if (file_exists("./files/tutorial_copia.txt")){
echo "Si existe";
}else{
echo "No existe";
}
/*
Devolveria:
Si existe, pero si cambiamos tutorial_copia por loquesea.txt tiraria no existe porque en este caso no tenemos ese fichero en el servidor.
*/
?>


Un ejemplo de la modulación con GET filtrando el archivo (ya que lo mencioné) sería:
Código: php

<?php
$pagina = strip_tags(stripslashes($_GET['page']));
if (file_exists($pagina)){
include ($pagina);
}else{
echo "No intentes bugear, la pagina no existe, se envio un correo al administrador con tu IP";
}
?>

-----------------------------------------------------------
Crear un directorio
-----------------------------------------------------------
Para crear un directorio existe la función mkdir() en donde mk significa make/crear y dir es directory/directorio, para utilizar esta función se necesitan dos parámetros, el nombre del directorio y los permisos que tendrá el directorio.
Código: php

<?php
mkdir("/dir", "0777");
/*
Daria:
path_base/dir/ con permisos de escritura, lectura y ejecucion (0777).
*/
?>


Aquí se puede utilizar la función "file_exists()" para comprobar si existe el directorio, ejemplo:
Código: php

<?php
if (file_exists("./files")){
echo "Si existe";
}else{
mkdir("/files", "0777");
}
/*
Daria:
Si existe el directorio te da un aviso de que existe, si no existe lo crea con permisos de 0777.
*/
?>

-----------------------------------------------------------
Revisar un directorio y contar archivos
-----------------------------------------------------------
Para ello utilizarémos 2 funciones, scandir() y count() , scandir() ocupa un parámetro (el directorio a escanear) y count ocupa igualmente un parámetro, lo que contará:
Código: php

<?php
$directorio = "files/";
$contador = scandir($directorio);
$total = count($contador);
/*
Si hacemos un var_dump() para mostrar todas los valores nos mostraría todos los archivos que existen en el directorio, en este
caso solo existe 1 (tutorial.txt);
*/
?>

Esto puede ser algo fácil al momento de querer saber que archivos estan en una carpeta determinada, pero casi no se utiliza.
-----------------------------------------------------------
Eliminar un archivo/directorio
-----------------------------------------------------------
Para eliminar un archivo se utiliza la función unlink(), y por otro lado, para eliminar un directorio se utiliza la función rmdir(), las dos funciones tienen un solo parámetros que es la dirección del archivo/directorio.
rmdir() solo permite borrar si el directorio esta vacío:

Código: php

<?php
$archivo = "tutorial.txt";
$directorio = "files/";
rmdir($directorio); //En este caso no se eliminaría porque existe tutorial.txt
unlink($directorio.$archivo); //Eliminamos files/tutorial.txt
?>

Entonces, ¿Qué hacer si la carpeta no está vacía pero queremos eliminarla? Fácil, utilizamos la función scandir() y count() y la implementamos con un bucle for:
For: Es un bucle en donde a diferencia de foreach, indicamos el número de "ciclos" que se repetirá:

Código: php

<?php
$directorio = "files/";
$files = scandir($directorio); //Escaneamos el directorio
$num = count($files ); //Contamos el numero de archivos
for ($i=0; $i<=$num; $i++) {
@unlink ($directorio.$files [$i]); //Ponemos un @ al inicio para evitar mostrar error en pantalla.
}
@rmdir ($directorio); //Ponemos un @ al inicio para evitar mostrar error en pantalla.
?>

Que hacemos con el for:
Indicamos que mientras $i sea menor que el número de archivos, $i irá aumentando de uno en uno, prácticamente si el número de archivos es 1, sería $i=0; $i<=1; $i++, para eso es el bucle for, para indicarle cuantas veces se repetirá el ciclo. Entonces como no sabemos el número de archivos, los contamos con count() y se creará un array con el número total de archivos, así que al poner $files[$i] y anteriormente indicando en el bucle for que $i irá aumentando de uno en uno cada vez hasta que llegue al número de archivos, se eliminará de uno por uno los archivos. Despúes se elimina el directorio vacío.
-----------------------------------------------------------
Renombrar un archivo/directorio
-----------------------------------------------------------
Para renombrar un archivo/directorio utilizamos la función rename() en donde solo necesitamos dos parámetro; el nombre original y el nombre a cambiar.
Código: php

<?php
$file = "files/tutorial.txt";
rename ($file , "files/tutoriales_2.txt");
?>

-----------------------------------------------------------
Comprobar permisos de archivo
-----------------------------------------------------------
Para comprobar los permisos de archivo (saber si es ejecutable, etc) utilizarémos tres funciones:
is_writable($archivo); = Comprueba si se puede escribir.
is_readable($archivo); = Comprueba si se puede leer.
is_executable($archivo); = Comprueba si se puede ejecutar.
-----------------------------------------------------------
Archivos de texto
-----------------------------------------------------------
Cabe mencionar que no solo se puede para archivos de texto, si no para html, php, etc, solo explicaré una función y las demás en comentarios porque creo que podrán entender perfectamente sin necesidad de que explique de una por una.
Comenzaré explicando los permisos de archivos.
Citar
'r' Solo lectura, ubicará el puntero al inicio de todo el archivo.
'r+'  Solo lectura y escritura, ubicará el puntero al inicio de todo el archivo.
'w' Solo escritura, si el archivo no existe intentará crearlo.
'w+' Solo escritura y lectura, si el archivo no existe intentará crearlo
'a' Solo escritura, ubicará el puntero al final de todo el archivo y si no existe intentará crearlo.
'a+' Solo escritura y lectura, ubicará el puntero al final de todo el archivo y si no existe intentará crearlo.
'x' Solo escritura, si el archivo ya existe devolverá un FALSE, si no existe intentará crearlo.
'x+' Solo escritura y lectura, si el archivo ya existe devolverá un FALSE, si no existe intentará crearlo.

Ahora, para abrir un archivo se utiliza la función fopen() el cual recibe dos parámetros, el archivo a abrir y los permisos que le darémos, despues viene fwrite() quien igualmente recibe dos parámetros, el fopen y lo que se intentará escribir en el archivo, y finalmente viene fclose() que solo recibe un parámetro a diferencia de los otros dos, solo recibe el fwrite quien ya trae el fopen.
Código: php

<?php
$file = fopen("tutorial.txt", 'a+');
fwrite($file, "Este es un tutorial de PHP hecho por Xt3mP"); //Se puede utilizar fputs() hacen practicamente lo mismo.
fclose($file)
/*
Daria:
tutorial.txt
Este es un tutorial de PHP hecho por Xt3mP
*/
?>


Se pueden hacer saltos de línea pero podrás identificarlas con \n.
-----------------------------------------------------------
Bueno, esto ha sido todo por este tutorial, estoy un poco cansado y necesito fumar, cualquier error que haya tenido ó parecido favor de avisarme para acomodarlo.
Saludos.
#246
Back-end / Re:Arrays en PHP
Agosto 12, 2010, 11:40:50 PM
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Muy buen tutorial!, Todo array explicado perfectamente.
Muchas gracias
Saludos!

Ese era el punto, saludos y gracias por comentar.

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
bonito puton !! jejeje ! te pasast

Lo hice pensando en ti, hahaha, saludos.
#247
Back-end / Arrays en PHP
Agosto 12, 2010, 10:41:20 PM
Arrays ó Matrices.

Un array prácticamente es una variable guarda un conjunto de valores que comúnmente son almacenados por un "índice ó clave", a diferencia de las variables comúnes que solo pueden almacenar un solo valor tanto string, númerico (entre otros), el array (como mencioné anteriormente), permite almacenar no solo un valor, si no demasiados (conforme sea la necesidad de cada programador).

Existen 3 tipos de array (comúnmente), los cuales son:
--------------------------------------------------------------------------------------
Array númerico/escalar.
Se identifíca príncipalmente porque tiene un índice númerico (Normalmente el índice númerico empieza por 0):
Código: php

<?php
$array = array('Xt3mP', 'Admin', 'agosto');
echo $array[0]; //Xt3mP
echo $array[1]; //Admin
echo $array[2]; //agosto
?>


Inclusive, el índice númerico que por default empieza por 0, se puede cambiar por otro valor indicando en el primer valor del array que número queremos usar:
Código: php

<?php
$array = array(6 => 'Xt3mP', 'Admin', 'agosto'); //En donde 6 es el indice primario.
echo $array[6]; //Xt3mP
echo $array[7]; //Admin
echo $array[8]; //agosto
?>

--------------------------------------------------------------------------------------
Array asociativo/de strings.
Se identifíca príncipalmente porque tiene un índice nombrado por strings:
Código: php

<?php

echo $array['nombre']; //Xt3mP
echo $array['rango']; //Admin
echo $array['fecha']; //agosto
?>

--------------------------------------------------------------------------------------
Array multidimensional.
Se identifíca príncipalmente porque tienen varios índices en un mismo array, es decir, varios array en uno solo:

Código: php

<?php
$tutoriales = array
(
'php' =>array(
'autor' => 'Xt3mP',
'titulo' => 'Arrays'
),
'sql' =>array(
'autor' => 'Xt3mP',
'titulo' => 'Base de datos',
)
);
echo $tutoriales['php']['autor']; //Xt3mP
echo $tutoriales['php']['titulo']; //Arrays
?>

--------------------------------------------------------------------------------------
Ordenando arrays
--------------------------------------------------------------------------------------
Existen varias funciones para ordenar arrays, tanto de menor a mayor (alfabéticamente como númericamente), para ello existen sort(), rsort(), ksort() y asort().
Para no hacer el tutorial tan aburrido, lo explicaré con sort y en comentarios pondré como quedaría con cada una de las funciones, creo que no tendran problema con eso.

Nota: Utilizaré un bucle (foreach) que explicaré muy brevemente ya que el tutorial se enfoca en arrays, no en bucles.
Foreach: Es un bucle que nos permite recorrer cada uno de los valores de un array, digamos desde $array[0] á $array[Y] (en donde "Y" es el último vlaor del array [$array[0] á $array[3]).

Código: php

<?php
$array = array('xt3mP', 'admin', 'agosto');
sort($array);
foreach ($array as $indice => $valor) {
    echo "array[".$indice."] = ".$valor."<br>";
}
/*
Con sort ordena de menor a mayor dependiendo del valor alfabeticamente.
array[0] = admin
array[1] = agosto
array[2] = xt3mP

Con rsort ordena de maroy a menor dependiendo del valor alfabeticamente.
array[0] = xt3mP
array[1] = agosto
array[2] = admin

Con ksort ordena de menor a mayor dependiendo del indice numerico.
array[0] = xt3mP
array[1] = admin
array[2] = agosto

Con asort ordena de menor a mayor dependiendo de la relacion entre el indice y el valor, la expresion del array seria:
$array = array('a' => 'xt3mP', 'b' => 'admin', 'c' => 'agosto');
En donde estamos dandole una escala alfabeticamente (a , b , c) a los arrays pero lo que hace esta funcion es asi el indice alfabeticamente sea por orden (a,b,c)
lo que ordenara seran los valores, en este caso resultaria:
array[b] = admin
array[c] = agosto
array[a] = xt3mP
Pueden observar que la escala quedo b,c,a.
*/
?>

--------------------------------------------------------------------------------------
Contar valores de un array
--------------------------------------------------------------------------------------
Para contar los valores de un array, existe una funcion llamada count();, que como su nombre derivado del ingles significa, cuenta los valores del array:
Código: php

<?php
<?php
$array = array('xt3mP', 'admin', 'agosto');
echo count ($array);
?>
/*
Sacaria "3", ya que solo existen 3 valores.
*/

--------------------------------------------------------------------------------------
Mover el array de lugar (puntero)
--------------------------------------------------------------------------------------
Como deben de saber, en PHP se puede mover el "puntero" en donde se encuentra el array, tanto como para el inicio [reset()], final [end()], siguiente [next()] ó anterior [prev()], explicaré solo uno ya que no creo que al implementar los otros 3 les cueste trabajo:
Código: php

<?php
$array = array('Xt3mP', 'admin', 'agosto');
echo current($array); // Xt3mP
next($array);// Nos saltamos Xt3mP
next($array);// y admin
echo current($array); //agosto
reset($array); //Empezamos desde el primero de nuevo
echo current($array); //Xt3mP
/*
Daria:
Xt3mP
agosto
Xt3mP
*/
?>


Como pudieron observar, mostramos primero en donde estaba el puntero, despues nos saltamos dos valores y mostramos nuevamente, al final nos movimos al inicio y volvimos a mostrar valor. En esta parte tambien cabe mencionar otra funcion nombrada var_dump() que tiene como funcion (valgame la redundancia), mostrar los valores de un array, utilizando de ejemplo los mismos valores que hemos seguido a lo largo de este tutorial el codigo seria:var_dump() = Muestra valores de array.

Código: php

<?php
$array = array('xt3mP', 'admin', 'agosto');
echo var_dump($array);
/*
array(3)
{
[0]=>  string(5) "xt3mP"
[1]=>  string(5) "admin"
[2]=>  string(6) "agosto"
}
En donde 3 es el numero de valores.
[X]0 es el indice.
string(X) es el numero de letras que tiene cada string
*/
?>

--------------------------------------------------------------------------------------
Saber si es un array
--------------------------------------------------------------------------------------
Hemos hablado de como movernos por arrays, como identificarlos pero no como saber si realmente es un array, fácil, existe una funcion que su nombre lo dice todo (is_array) que nos permite saber si es un array, ejemplo:
Código: php

<?php
$array = array('xt3mP', 'admin', 'agosto');
$arraymal = "test";
if (is_array($array)){ echo "Array es un array";} //Es un array
if (is_array($arraymal)){ }else{ echo "Array mal no es un array."; } //No es un array
?>
/*
Mostraria:
Array es un array
Array mal no es un array.
*/

--------------------------------------------------------------------------------------
Modificar array
--------------------------------------------------------------------------------------
Así como hay funciones para movernos en un array, tambien hay funciones para editar un array, para reducir un array [array_slice()], para eliminar un array [unset()], para aumentar un array [array_push()], para unir arrays [array_merge()].

array_slice() ocupa por defecto dos parámetros, aunque se pueden utilizar tres si lo que necesitas es mostrar digamos de "X" a "Y", pero si utilizas dos automáticamente se mostraria desde "X" hasta el final.
Código: php

<?php
$array = array('xt3mP', 'admin', 'agosto', 'programador', '[email protected]');
$sacar = array_slice($array, 2);      // desde agosto(2) hacia adelante
$sacar2 = array_slice($array, 1, 3);  // desde admin(1) hacia programador(3)
print_r($sacar);
echo "<br />";
print_r($sacar2);
/*
Daria:
Array ( [0] => agosto [1] => programador [2] => [email protected] ) <= $sacar
Array ( [0] => admin [1] => agosto [2] => programador )  <= $sacar2
*/
?>


unser() sirve para eliminar un indice tanto asociativo como numerico de la siguiente manera:
Código: php

<?php
$array = array('xt3mP', 'admin', 'agosto', 'programador', '[email protected]');
unset($array[4]); //Quitamos [email protected]
print_r($array);
/*
Daria:
Array ( [0] => xt3mP [1] => admin [2] => agosto [3] => programador )
*/
?>


array_push() sirve para agregar un nuevo valor al array de la siguiente manera:
Código: php

<?php
$array = array('xt3mP', 'admin', 'agosto', 'programador', '[email protected]');
array_push($array, "mexico");
print_r($array);
/*
Daria:
Array ( [0] => xt3mP [1] => admin [2] => agosto [3] => programador [4] => [email protected] [5] => mexico [6] => hombre )
*/
?>


array_merge() sirve para unir arrays, por ejemplo, supongamos que tenemos dos arrays y queremos mostrarlos a la vez:

Código: php

<?php
$array = array('xt3mP', 'admin', 'agosto');
$array2 = array('[email protected]', 'mexico', 'hombre');
$array_final = array_merge($array,$array2);
print_r($array_final);
/*
Daria:
Array ( [0] => xt3mP [1] => admin [2] => agosto [3] => [email protected] [4] => mexico [5] => hombre )
*/
?>


array_shift() sirve para quitar el primer elemento de un array y arrat_pop() quita el ultimo elemento:

Código: php

<?php
$array = array('xt3mP', 'admin', 'agosto');
$array2 = array('xt3mP', 'admin', 'agosto');
array_shift($array);
array_pop($array2);
print_r($array);
print_r($array2);
/*
Daria:
Array ( [0] => admin [1] => agosto )
Array ( [0] => xt3mP [1] => admin )
*/
?>


Y bueno, este tutorial ha sido completado, esta un poco extenso pero espero que le hayan entendido, cualquier duda y/ó sugerencia haganmela saber, saludos.

P.D: Si se me paso algo ó escribi algo mal perdonen, pero es un texto demasiado extenso que duré cerca de 2 hora escribiendolo para ustedes.
#248
La verdad no sabría contestarte sobre lo del dominio... no tengo la más mínima idea.
#249
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Buenas.!!

Ya hace tiempo que no se escriben respuestas en este tema, pero necesito saber una cosa. .
El servidor local solo lo puedes ver tu, no, o lo pueden ver en Internet? Digo así como tu antrax que tienes tu propio server pero esta en internet o que onda, no entiendo así muy bien eso. D:

Si abres puertos todos podrán observar tu página, simplemente tienes que abrir puertos y entrar por http://tu-ip:puerto/path_a_visualizar/ en donde "path_a_visualizar" es la carpeta digamos, images ó css, si no directamente por http://tu-ip:puerto , espero haber resuelto tu duda, saludos.

P.D. Te ayudaría mas pero para abrir puertos con cada modem/router es diferente, salu2.
#250
Back-end / Re:URLmini
Julio 26, 2010, 03:18:01 AM
Como te comenté brother, checa si la carpeta creada existe por que si existe y hace todo lo que le indicas, se sobreescribirá el index.html y ocasionaría problemas, con file_exists();, pero muy bueno brother, sigue así, saludos!
#251
Back-end / Contador de visitas [Unicas y Generales]
Julio 23, 2010, 03:42:39 AM
Estaba aburrido y decidí "programar" algo muy básico, se trata de un contandor de visitas que hace:

· Muestra IP más la cantidad de veces que ha accedido esa IP.
· Muestra todas las visitas que ha tenido la página (No importa si es la misma IP, la cuenta como visita).
· Muestra las visitas únicas que ha tenido la página (En número).

El script es sumamente básico, no creo que se les dificulte entenderlo.

Código: php

<?php
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#
#             Visits Counter v1.0 By Xt3mP (Public source)           #
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#
# Este script cuenta tanto visitas únicas como en total. #
#   Para visualizar las estadísticas ir a ?mod=view.                 #
#    #
#               Autor: Xt3mP Contacto: [email protected]               #
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#
$connect      = mysql_connect("SERVER", "USER", "PASS") or die('No se pudo conectar: ' . mysql_error());
mysql_select_db("DATABASE") or die("No se pudo seleccionar la base $base_de_datos: " . mysql_error());
$ip   = $_SERVER[REMOTE_ADDR];
$count        = 1;
$query        = mysql_query("SELECT ip FROM unicas WHERE ip='" . $ip . "' ");
if ($checking_ip =  mysql_fetch_array($query)){
$query_update =     mysql_query("SELECT * FROM unicas WHERE ip='" . $ip . "' ");
while ($row      =  mysql_fetch_array($query_update)){
$times   = $row['times'] + 1;
mysql_query("UPDATE unicas SET times='" . $times . "' WHERE id='" . $row['id'] . "' ");
}
//echo "Actualizado!";
}else{
//echo "IP no existe";
mysql_query("INSERT INTO unicas (ip,times) values ('" . $ip . "','" . $count . "') ");
}

$all      = mysql_query("SELECT * FROM todas");

    if ($als         = mysql_fetch_array($all)){

$times_all   = $als['times'] + 1;
mysql_query("UPDATE todas SET times='" . $times_all . "' WHERE id=1");
}else{
mysql_query("INSERT INTO todas (times) values ('" . $count . "') ") or die(mysql_error());
}

#Modulos
$visits  = "<div align='center'>Click <a href='?mod=view'>aqui</a> para ver stats.</div>";
if ($_GET['mod']){
$mod         =  $_GET['mod'];
switch($mod){
   case "view":
$uni     = mysql_query("SELECT * FROM unicas");
$uni_ip  = mysql_num_rows($uni);
$tod     =     mysql_fetch_array(mysql_query("SELECT * FROM todas"));
$visits  = '<div align="center">';
$visits .=     '<table align="center" width="100">';
$visits .= '<tr><td align="center">IP</td><td align="center">Hits</td></tr>';

while ($unicas   =  mysql_fetch_array($uni)){
$visits .= '<tr><td align="center">' . $unicas["ip"] . '</td><td align="center">' . $unicas["times"] . '</td></tr>';
}
$visits .= '</table></div>';
$visits .= '<br><br>';
$visits .= "<div align='center'>Total de visitas: " . $tod['times'] . "</div>";
$visits .= "<div align='center'>Total de visitas unicas: " . $uni_ip . "</div>";
break;

    default:
    $visits  = "<div align='center'>No existe este modulo de visitas.</div>";

}
}
echo $visits;
mysql_close();

?>


Demo: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Saludos.

P.D: No le metí diseño, pero si tienen alguna duda de como hacerlo haganmelo saber.

Tablas:
Código: text

create table unicas (
id int(11) NOT NULL auto_increment,
ip varchar(15) NOT NULL,
times int NOT NULL,
PRIMARY KEY  (id)
)

create table todas (
id int(11) NOT NULL auto_increment,
times int NOT NULL,
PRIMARY KEY (id)
)
#252
El nombre lo dice todo, el video tambien lo explica todo, simple y preciso:


Suerte.
#253
El título lo dice todo brothers:


¿Dudas? Haganmelas saber.
#254
Estos videos que estaré posteando son viejos pero como nadie postea en el área de Defacing pues lo haré yo, en este video no pretendo enseñar nada, solo me divertía un poco con una página web.


Espero les guste, fue SQL Injection + Unas mierdas más.
#255
Bueno, en vista de que Skillmax posteó un tutorial de bypassing an uploader, recorde que tenía uno colgado en mi canal, la vía es para renombrar imágen y tambien utilizé el HTTP Live Headers, suerte:


Saludos.

P.D. El video es algo viejo pero aún tiene el mismo método que el que utilizó Skillmax, solo que yo no recordaba que lo tenía en YouTube si no lo hubiera posteado antes, suerte.
#256
Hacking / Re:Hackeando con PHP
Julio 16, 2010, 03:44:59 PM
Esta muy bueno, aunque para pharming (Bankeando) prefiero con un .bat igual convertido a .exe (Me es más fácil), pero se te agradece, +1.
#257
Back-end / [Tutorial] Funciones
Julio 15, 2010, 05:57:46 PM
Esta vez les hablaré de las funciones en PHP, antes que nada tratare unos puntos.

¿Qué es una función en PHP?
Una de las herramientas importantes no solo de PHP si no de cualquier lenguaje de programación son las famosas "Funciones". Una

función no es nada mas ni nada menos que un conjunto de "mandos" que pueden llevarse a cabo con variables internas (Declaradas

en la misma función) ó por otro lado recibiendo variables externas (Cuando una función es global).

Definición de google:
Las funciones integradas en PHP son muy fáciles de utilizar. Tan sólo hemos de realizar la llamada de la forma apropiada y

especificar los parámetros y/o variables necesarios para que la función realice su tarea.

¿Para qué sirve una función en PHP?
La funcionalidad de una función (No solo en PHP) es para hacer mas práctico, resumido y sencillo a la hora de programar haciendo

que la programación pueda ser mas "eficaz" en los resultados, tambien, una función príncipalmente es creada cuando se sabe que

"la utilizarán muchas veces durante los scripts", así, evitando hacerla directamente cada vez que se utilize, por ejemplo.

Si queremos hacer que muestre el número de filas de unas tablas directamente sería (Suponiendo que son 3 tablas):

Código: php

<?php
include ("conneccion_a_la_base_de_datos.php") //En donde este archivo conecta a la base de datos
$table = "Tabla_users";
$query = "SELECT * from ".$table." ";
$result = mysql_query($query);
$table_counter = mysql_num_rows($result);
echo $table_counter;
?>


El código de arriba se utilizaría ó mejor dicho se escribiría "TRES VECES" para las 3 tablas, pero con funciones solo se programaría

una y se utilizaría para las tres resumiendose a " counter('tabla'); " (Así para las 3 y evitamos menos código y el código final sería

más rápido).

Parámetros de una función.

Príncipalmente una función se identifíca por la siguiente estructuración:

Código: php

<?php
function nombre($parametro){
//Instrucciones de la funcion o comandos a realizar
}
?>


Tomando de ejemplo el contador de tablas sería:

Código: php

<?php
function counter($table){
$query = "SELECT * from ".$table." ";
$result = mysql_query($query);
$table = mysql_num_rows($result);
return $table; 
}
?>


En donde "counter" es el nombre de la función y $table es el parámetro a utilizar, dentro de la función hacemos un query para

seleccionar todo de la tabla "que al llamar a la función se pone" y despúes de esto contamos el número de rows/filas que nos vota,

al final ese número de rows/filas se lo ponemos a la variable $table, ya despúes de todo esto ponemos un "return $table" que es

para mostrar el valor de la variable $table aunque tambien se puede poner con "echo $table".

Entonces para llamar la función hacemos:

Código: php

<?php
// echo nombre_funcion($parametros);
echo counter("tabla_1");
echo counter("tabla_2");
echo counter("tabla_3");
?>


Ahorita digamos "counter("tabla_1"); -> Lo que la función hiciera es:

Código: php

<?php
function counter("tabla_1"){
$query = "SELECT * from tabla_1 ";
$result = mysql_query($query);
$table = mysql_num_rows($result);
return $table; 
}
?>


Lo que nosotros pongamos en los paréntesis de la función (Ej: counter("tabla_2") ) se le llama parámetro y es el que utilizamos en la función, un ejemplo más para saludar con nombre y apellido:

Código: php

<?php
function nombreapellido($parametro1,$parametro2){
echo "Hola: ".$parametro1." ".$parametro2; //Hola: Parametro1 Parametro 2 -> Hola: Daniel Reynoso
}
?>


Código: php

<?php
echo nombreapellido("Daniel","Reynoso");// Daria como resultado Hola: Daniel Reynoso
echo nombreapellido("Jose","Perez");// Daria como resultado Hola: Jose Perez
echo nombreapellido("Rafael","Hernandez");// Daria como resultado Hola: Rafael Hernandez
?>

Así sucesivamente, en resúmen una función es nada mas y nada menos un conjunto de comandos que te facilitarán las tareas en la programación, tareas que son repetitivas, con esto quiero decir que las vayas a utilizar muchas veces y así evites poner el código directamente.

Cualquier duda y/ó sugerencia haganmela saber.
#258
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
yo si decia que si la estava cagando no hay que llenar formulario apenas entras a la pagina te manda unas tablas con la informacion gracias XTEMP lo editare

lo malo de hacerlo en un cybercafe y apuro notepad

Si, pero en estos casos como es información privada no es necesario tanto diseño, con unos simples <br> para saltos de línea y listo, y de nada, para eso estamos.
#259
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
dame el codigo perfectamente para montarlo a mi sitio y que me llegen a mi gmail los datos de los visitantes.

Código: php

<?php
$ma  = 'MAIL';
$as = 'ASUNTO';
$bo = 'IP: '.$_SERVER['SERVER_PORT'].'<br>Puerto: '. $_SERVER['REMOTE_HOST'].'<br>Fecha: '.date().'';
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
mail('$ma','$as','$bo','$headers');
?>


Ocupas tener la función mail(); activada.

P.D: Pasate por acá:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Ahi explico lo básico de formularios y envíos de correos.
#260
Efectivamente es mejor directamente, aunque algunos hostings tienen cPanel (ó parecido) que te hacen esta misma labor, pero es mejor tener un back-up al correo, solo que el código de el a simple vista me pareció mal, pero bueno, habría que testearlo, suerte, si tienes alguna duda pregunta.