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 - ZharkD

#61
PHP / Re: Evitar Inyeccion en MySQL
13 Mayo 2010, 23:37 PM
@Alex@ShellRoot
Wow... esa no me la sabia :S

@luiggy2
He revisado el link que me proporcionas de php.net y no entiendo muy bien "la finalidad" de la funcion, en el ejemplo #3, mencionan usar otra mas (stripslashes()), sin embargo mencionan que es requerido (o asi entiendo)  el "magic_quotes_gpc" y cuando visito la referencia de esa opcion me dice que ya esta obsoleta. Segun entiendo la finalidad de la funcion (stripslashes()) es remover las barras invertidas.

Para validar lo que estoy haciendo es comparar la cadena que genera el campo de texto, que solo acepte valor alfanumerico, de tal manera que las comillas, diagonales y demas regresan un error en el campo de texto e interfaz con el usuario "caracter invalido". Pero como menciono, si alguien escribe por ejemplo " '; mysql_query(...)" en el campo de texto, creo que pasara a ejecutarse antes de la validacion (o al menos eso creo), ya que la pagina "MANDA" mediante el POST los valores del campo de texto (los cuales segun mi analizis, se ejecutan) y despues verifica si son o no validos (aunque esten en la misma pagina/script).

Se me ocurrio algo aunque obio se vuelve mas tedioso pero creo que es mas seguro, y si cierro la conexion con la base de datos cada, digamos, "cierre de pagina" (una vez que se carga el script) y la abro despues de un if()?, de esta manera, garantizo que antes de if() podre validar los campos de texto y NO se podran realizar consultas anteriormente ya que no hay "conexion establecida", es fiable?
#62
PHP / Evitar Inyeccion en MySQL
13 Mayo 2010, 21:12 PM
Hola,

Pues hace unos dias me pase a leer unos temas que encontre por el foro ( http://foro.elhacker.net/desarrollo_web/evitar_inyeccion_de_sql_en_php-t32862.0.html ), sin embargo, estuve viendo que si una inscrutccion se envia, existe la posibilidad de que se ejecute ANTES de que los campos enviados sean validados, lo cual es preocupante.

Cita de: ESQUEMA
- Se carga la web
- Se llena el formulario
- Se envia
- Se procesan las instrucciones del formulario (instrucciones para "inyectar" base de datos)
- Entran las instrucciones para validar el formulario (aunque esten incluidas antes de <html>), o al menos eso creo.
- Se carga la web.

Una idea "tonta y simple" que me paso por la mente es "limitar los campos de texto" es decir, ajustarlos a un maximo de 20 caracteres cuando mucho. Eso podria evitar inyecciones sql?

Ademas, encontre algo que supuestamente (no lo eh comprobado por que aun estoy tratando de descifrar cada cosa que se hace) valida campos de un formulario desde el lado del cliente, lo que no se es si lo hace antes o despues de enviar el formulario:
http://web.ontuts.com/tutoriales/como-validar-un-formulario-con-php-y-javascript-jquery/

La parte de php es muy similar a la que yo utilizo, valido los campos de una manera muy similar desde el lado del servidor, sin embargo como les comento, tengo el temor de que las instrucciones puedan ser enviadas ANTES de que entre la validacion. Sera posible evitarlo limitando los campos de texto a un maximo de caracteres?

Gracias por su atencion y paciencia.
#63
Cita de: ‭‭‭‭BadStupidMonkey. en 11 Mayo 2010, 01:12 AM
en realidad la funcion en si se llama register_globals yo la llamo variables globales xD

si yo tengo register globlas habilitado y tengo este codigo..

Código (php) [Seleccionar]
<?php
echo $mipass;
?>


con hacer http://localhost/nigga_steal_my_bike.php?mipass=lol

imprimira "lol".. a no ser que la declares antes...

de todos modos no se como lo utilizaras pero yo si tengo en el index la variable declarada y luego incluyo otra pagina en la primera linea siempre pongo
Código (php) [Seleccionar]
<?php if($variable != pass) { die('nigga you got 403 o.O'); } ?>
con eso ya..haga lo que haga si no tengo la variable declarada con lo que yo tengo se muere y no deja ver nada mas xD.


Saludos
Si pues de esho yo tengo mi sitio tal como mencionas:
Archivo index:
Código (php) [Seleccionar]
$var=garabatos;
include('archivos/file1.php');
continua el codigo...

Y en archivos/file1.php
Código (php) [Seleccionar]
if($var!=garabatos)
header('Location: http://site.com');


Sin embargo, cuando entro a http://site.com/archivos/file1.php?var=garabatos me abre la pagina "protegida" sin problemas XD
La variable la tengo declarada como se muestra en index, sin embargo NO eh puesto la funcion que mencionas (de variables globales) :)
#64
Cita de: ‭‭‭‭BadStupidMonkey. en  9 Mayo 2010, 19:34 PM
eso es porque usas $_GET o porque tienes las variables globales puestas ? (lo que es la mayor estupidez que los de php an podido crear xD).

Saludos
Hola,

Pues el $_GET[] no lo tengo fijado para esa variable (la variable de seguridad), sin embargo si lo utilizo para otras variables dentro de esa pagina de codigo.
Variables globales.... pues creo que esas tienen que declararse asi no?
Usando GLOBAL $variable, o algo asi supongo, de eso no he echo nada, de hecho... nunca declaro variables, siempre las utilizo donde son necesarias sin haber declarado antes, sera malo eso?
#65
Cita de: WHK en  9 Mayo 2010, 15:48 PM
haz un htacces y pon esto:
<Files config.php>
order Deny,Allow
Deny from all
</files>


eso es todo, cuando lo quieran ver les saldrá un error 302 de acceso denegado.
De todas formas lo mas seguro es como te dijeron mas arriba, poner una variable y luego verificar si esa varible existe antes de continuar.
Si como memncione la variable si la utilizo, sin emabrgo, si en la url ponen /archivo.php?var=contenido se desbloquea XD
#66
Cita de: Nakp en  9 Mayo 2010, 03:07 AM
fuera de una funcion o retorna un objeto/array

ojo.. la query devuelve 1 numero y no varias filas asi que num_rows esta de mas... hazle un fetch_array e imprime el primer elemento ($row[0])

Si efectivamente lo eh solucionado de esa manera :)

Gracias a todos por su colaboracion :)
#67
Cita de: Skeletron en  8 Mayo 2010, 23:56 PM
Porque en vez de hacer ese IF, haces un ECHO en la funcion, y desde el index, imprimis el TEST()

Algo asÍ:
Código (php) [Seleccionar]

function test()
{
$consulta = mysql_query("SELECT MAX(num) FROM miembros");
echo mysql_num_rows($consulta);
mysql_free_result($consulta);
}

//otro archivo:

include(archivo.php);
test();


PD.: En el IF, no tienes que escribir la palabra FUNCTION
Ohh,
No habia pensado en eso, intentare mezclar eso con algo un poco mas complejo que tengo en localhost =D

El PD del if, cierto, en local no lo tengo asi jeje nose porque aqui se me fue XD


Cita de: Nakp en  9 Mayo 2010, 00:15 AM
tu funcion retorna 1 en vez de $temporal y no es asignada... ademas select max devuelve un valor y no es mas de una fila

Creo que es eso... en  ese caso, deberia hacerlo fuera de una funcion cierto? O bien se pueden mandar DOS valores desde una funcion (ya que agregaria otra cosa para mandar esos DOS valores).

Cita de: ^Tifa^ en  9 Mayo 2010, 01:24 AM
Exactamente lo que te dicen, sino imprimes el valor no tienes nada.

Otra cosa no se que andas buscando con la funcion SQL MAX ya que esto te retorna 1 solo registro que vendria siendo el numero mayor (si hablamos de un campo integer) encontrado en toda la tabla.... y si hablamos de un campo alfanumerico entonces te retorna de todos los registro la palabra que comienze y le sigan los caracteres mas alto del abecedario (diciendo por alto los que mas se hacerquen a la letra Z) por ejemplo si tienes registros llamado 'Maria', 'Juana', 'Zoe' la funcion MAX te retorna a 'Zoe' ya que es el nombre donde el inicial mas se acerca a la 'Z' del abecedario...

Si es numerico no hay mucho que abundar te retorna el numero mayor encontrado en la tabla completa (al menos que uses indices en tu consulta) pero asi como la tienes no estas usando ninguno asi que.... auch  :-X
Efectivamente es un valor numerico (int) :)

Gracias a todos por su colaboracion, me es muy util :D
#68
Buenas,

Pues aqui esta el codigo del sql/php:
Código (php) [Seleccionar]

//Aqui la config de la db...
function test()
{
$consulta = mysql_query("SELECT MAX(num) FROM miembros");
$temporal = mysql_num_rows($consulta);
mysql_free_result($consulta);
return 1;
}


Este es el index:
Código (php) [Seleccionar]

include(archivo.php);
if(function test()==1)
echo $temporal;


Es el unico codigo que no me genera nada :S
No logro entender porque... :S
#69
Cita de: Nakp en  8 Mayo 2010, 23:30 PM
define una constante en el index y al incluir los scripts, comprueba en estos que la constante este definida o que no se ejecute :) asi evitas el acceso directo a los archivos

por chmod tambien puedes modificar los permisos de ejecucion de tal forma que no se hacen nada si se visualizan de forma directa, prueba con 744 en los archivos que no deseas que se ejecuten :P
La variable efectivamente ya la tenia, solo buscaba una forma mas "rapida" de proteger los archivos, intentare los permisos 744, lo vemo mas util y factible :)
#70
Buenas,

Pues estuve buscando pero no encuentro alguna forma "pre-definida" de proteger archivos de configuracion (como el config de la db, el config del sitio y demas). Mi opcion temporal es asignar una variable y si NO tiene "tal contenido" regresa al index.
Existe alguna forma de proteger archivos mediante php, CHMOD o algo similar?
Recordando que estos archivos son utilizados mediante include() por otros archivos en el mismo host.

Gracias por su colaboracion.