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


  Mostrar Temas
Páginas: [1] 2 3 4 5 6
1  Programación / PHP / MVC: ¿Dónde validar datos con "profundidad"? en: 6 Marzo 2016, 19:22 pm
Buenas tardes!

Mi pregunta de hoy está algo relacionada con un tema que abrí hace unos meses: ¿Cómo crear API JSON en proyecto existente que usa MVC?

El caso es que seguí las instrucciones del compañero MinusFour, y ahora tengo dos mounstruos de aplicaciones, con mucho codigo duplicado, y seguramente es que no estoy aplicando bien el MVC, por eso les pregunto.

Durante mi implementación particular del MVC, he creado unos modelos que tratan con la DB, las vistas pues ningún problema, pero en los controladores... ahí está el asunto. Yo tenia entendido que la validación de los datos introducidos por el usuario se debe hacer en los Controladores, pero ¿esto se refiere a todo tipo de validaciones, o solo limpiar entradas...? ¿El modelo debe validar también los datos que le pasan? Con esta pregunta dije... si valido en el modelo, tengo que repetir menos código en mis dos controladores (uno para el API y otro para la web), pero entonces me vino la siguiente cuestión:

Imaginemos que estamos en un modelo que gestiona las Repuestas a los mensajes de este tema, y se introduce una nueva respuesta... necesitamos llamar al modelo que gestiona los temas para ver si el tema_id que se ha pasado por POST realmente existe. Yo esto lo hago en el controlador, para que un modelo no tenga que hablar con otro. ¿Esto es correcto? ¿Dónde deben hacerse las validaciones de este tipo?

Perdón por la parrafada y gracias de antemano, estoy bastante atascado :rolleyes:
2  Programación / PHP / ¿Cómo crear API JSON en proyecto existente que usa MVC? en: 24 Julio 2015, 18:40 pm
Buenas!

A ver si me podeis echar un cable, porque estoy mareado de buscar por internet y creo que no estoy formulando la pregunta correcta.

El caso es que tengo una aplicación web plenamente funcional en PHP, que utiliza el patrón MVC, y en breve necesitaré un API para interactuar con una app nativa en android... Siempre creí que sería cuestión de captar alguna variable de la URL y que el gestor de Views en lugar de cargar las plantillas html, cargase los archivos que formulasen la respuesta JSON con los mismos datos, pero claro, el Controller tampoco puede partir de los mismos inputs en ese modo de funcionamiento (No $_POST...), así que no es tan sencilla la "migración".

¿Cómo se debe enfocar esto realmente? Lo que no quiero es tener que duplicar controllers... uno para la web y otro para el API a menos que no haya otra solución...

Dadme un poco de luz! Gracias :)

Un saludo.
3  Programación / PHP / [Aporte] Mi función PHP para limpiar inputs en: 23 Julio 2015, 18:34 pm
Buenas!

Hoy os traigo una función que publiqué hace tiempo aquí también pero con ciertas mejoras, con la esperanza de que pueda servir a alguien más.

¿Qué permite?
  • Eliminar todos los caracteres que no estén previstos -> Security By Default
  • Cortar las cadenas con más de X caracteres si se desea. Esto puede ayudar a evitar ataques DOS dirigidos expresamente a sobrecargar las consultas a la base de datos
  • Es muy rápida y sencilla de utilizar! He visto buenos aportes en el foro que tienen la advertencia de que es necesario asegurar las variables para su uso real, ya que el compañero lo ha programado con prisas. Con esta función las prisas no deberían ser una escusa!
  • Debería ser suficiente para la mayoría de ataques SQL Injection y XSS, recomendandose encarecidamente su uso conjuntamente con sentencias preparadas (PDO o MySQLi)
  • Elimina espacios en blanco al principio y al final de la cadena, ya que no suelen tener utilidad.

¿Qué NO permite?
No está pensada para validar campos (Ej. Email correcto, etc), solo como primer filtro a pasar por todos los inputs que provengan del exterior. Para esos usos, la función nativa filter_var de PHP puede ser una alternativa.

Personalización
La función está escrita de forma que permita vocales acentuadas y eñes. Si no se desea basta con borrarlos de la cuarta linea. Si dejas estos caracteres asegurate de guardar el archivo que contiene la función con una codificación válida, como UTF-8.
Además, a modo de prevenir ataques XSS aplica la función htmlentities, pero a algunos les gusta aplicarla en la vista de su aplicación... a mi me parece mejor hacerlo al guardar los datos para optimizar la carga en la lectura de datos, pero casi es una cuestión de gustos.

El código

Código:
function clean_var($var,$num=0,$let=0,$max=0,$cars_exp=''){
        $expr = '/[^';
        if($num == 1) $expr = $expr.'0-9';
        if($let == 1) $expr = $expr.'a-zA-ZñÑáéíóúÁÉÍÓÚ';
        if($cars_exp != ''){
            $cars_ok = preg_quote($cars_exp,'/');
            $cars_ok = str_replace(' ','\s',$cars_ok);
            $expr .= $cars_ok;
        }
        $expr .= ']/iu';
        $var = preg_replace($expr,'',$var);

        if($max != 0 && strlen($var) > $max){
            $var = substr($var,0,$max);
        }
        return htmlentities(trim($var), ENT_QUOTES); //AntiXSS
}

He intentado ponerle la etiqueta php a code para que se colorease, pero muestra los acentos como entidades html en ese caso.

Ejemplos

Código
  1. $secure_var = clean_var($_GET['insecure_var'],1,0,10); // Solo numeros, max. 10 caracteres.
  2. $secure_var = clean_var($_GET['insecure_var'],1,1,10); // Solo numeros y letras, max. 10 c.
  3. $secure_var = clean_var($_GET['insecure_var'],0,1,10,' '); // Letras y espacios, max. 10 c.
  4. $secure_var = clean_var($_GET['insecure_var'],1,1,25,'@._-'); // Posible e-mail. Max 25 c.
  5. $secure_var = clean_var($_GET['insecure_var'],1,1,50,'@._-?)(][,'); // Mas caracteres. Max. 50 c.

Mejoras!
Por favor, si ves algo mejorable en la función dilo abajo! Será de gran ayuda para todos, especialmente si está relacionado con la seguridad. A veces he obtenido comportamientos extraños al usar guiones medios a pesar de usar preg_quote, y ahora intento escribirlos al final del parámetro para que no den problemas... si saben por qué ocurre eso sería genial.

Gracias por leer el tocho! :)
4  Programación / PHP / Duda sobre MVC y múltiples idiomas. en: 6 Abril 2015, 12:35 pm
Buenas amigos,

Siento estar tan pesado estos días, como sabéis estoy intentando aplicar bien el patrón MVC de la forma correcta para evitar lo que precisamente me está pasando ahora... marearme con el código al intentar actualizarlo.

Ya tengo un Controller que aplica la lógica y hace comprobaciones de los datos, un Modelo que interactúa con la DB, y una Vista que maneja el HTML (y muestra según el idioma el texto, ya que solo tiene variables que luego se sustituyen como $lang['listar_productos'] y están en un archivo a parte).

Mi único problema ahora está relacionado con los errores que maneja el Controller cuando no está bien un dato introducido por el Usuario.
Ej: El nombre no cumple el mínimo, El Producto no existe...

Desde la clase del Controller no puedo acceder a las variables $lang['error_no_existe_algo'], y no quiero hacerlas globales (para seguir siendo disciplinado y ordenado).

¿Cuál sería la forma correcta de hacerlo? ¿Pasar un código de error a la Vista y que ésta lo resuelva? (y meter lógica a la vista...) ¿Heredar los Controller de una clase que tenga algo como getTextLang()? (lo malo sería hacer miles de foreach por cada vez que consulte no?).

En definitiva, ¿Cómo lo hacéis para manejar los idiomas con MVC?

Muchas gracias!
5  Programación / PHP / [Resuelto] Ayuda con separar clases relacionadas en: 3 Abril 2015, 18:00 pm
Buenas,

Siempre me ha ocurrido que he empezado un proyecto pequeño, y poco a poco le iba añadiendo funciones al mismo archivo... y construía archivos monstruosos. He buscado mucho sobre MVC y POO, pero estoy algo pillado, seguro que ustedes pueden darme el empujón que necesito. Les pongo un ejemplo:

Proyecto de Tienda con un "Modulo" de Productos, otro de Pedidos, otro de Loquesea.
index.php
-> carga un archivo moduloNombreModulo.php dependiendo de la petición.
moduloNombreModulo.php
-> Este se encarga de cargar una classModulo.php y a base de if y elseif recoge las variables introducidas por el usuario, las limpia, y llama a la funcíon correspondiente dentro de la clase.
Digamos que es mi particular controller, pero no es una clase.
classModulo.php
-> Aqui encontramos funciones como addProducto, editProducto... addCategoria, editCategoria... addProveedor, editProveedor..
Cada función dentro de esta clase, realiza las comprobaciones correspondientes a los datos que le pasa desde moduloNombreModulo.php y si esta todo correcto hace lo que deba a través de otra clase encargada de ejecutar consultas a la DB etc.

Después de todo esto, desde moduloNombreModulo.php se ejecuta una función para manejar plantillas, ya que el contenido de vistas esta separado en otra carpeta.

El primer problema que vi es que se va agrandando demasiado la clase, pensé en separar en otras clases mas pequeñas, pero por ejemplo al añadir un Producto, addProducto comprueba si existen las categorias, proveedores, etc. y se reutilizan así funciones compartidas, ya que estas comprobaciones aparecen en casi todas.

Pero ahora me encuentro otro problema más, y es que al crear un modulo de Pedidos (ejemplo), éste necesita de funciones de la clase del otro módulo, como verificar si existe un producto, categoría, añadir un producto en algunos casos desde ese módulo, etc.

Lo que no quiero es tener que incluir e instanciar 4 o 5 clases en cada función dentro de otra clase, no se si a lo mejor estoy yo equivocado y esa es la forma correcta.

Como pensais que debería hacerlo?
Gracias!
6  Programación / PHP / [Resuelto] Caracteres especiales preg_replace en: 31 Marzo 2015, 22:12 pm
Buenas a todos :)

Vereis tengo un problemilla con un filtro que utiliza preg_replace. Hace años inserté como válidos unos caracteres un tanto estraños y como no me acuerdo de por qué lo hice, hoy los he borrado. El caso es que al borrarlos y no pasarlos como válidos, preg_replace devuelve una cadena vacía.

Los caracteres en cuestión son estos:
Citar
ЯяАИМСЗаимсз

Cuando están incluidos dentro de la variable a pasar por preg_replace, devuelve una cadena vacía, en lugar de solo borrarlos y devolver los permitidos, como quiero aquí:
Código
  1. $var = preg_replace("/[^a-zA-Z0-9]/i",'',$var);

Supongo que será alguna forma rara de escribir unas comillas o algo así.

Alguien sabe de que se trata?

Saludos!

Edito:
Buscando mucho por internet, veo que esos caracteres son las vocales acentuadas, que por el formato del archivo se guardarían así en su momento, pero aun no entiendo por qué si se pasan tal cual a la función preg_replace hace que no cumpla con la regla que tiene y devuelve un string vacío. He activado los errores por si decía algo, pero nada.
7  Sistemas Operativos / Mac OS X / Problema con WPA2 con router Vodafone en: 3 Agosto 2014, 15:40 pm
Buenas,

Tengo un misterio que no puedo resolver, y no encuentro nada buscando…
Anteriormente tenia configurado todo en el router que te dan con el ADSL de Vodafone, clave, canal… nada daba problemas. El otro dia me di cuenta de que utilizaba WPA en lugar de WPA2. Cambié esta opción, y aunque en muchos dispositivos tuvimos que volver a meter la clave de nuevo (engorroso, por su longitud) todo funciona estupendamente ahora, todo menos mi iMac de 2011.

Mi version de OS X es la 10.7.5 (prefiero no actualizar porque me va muy bien y fluido, y leyendo comentarios…).

La cuestion es que mi iMac se conecta sin problemas a la red wifi, y permanece un rato todo correcto, hasta que de pronto se cae la conexion. El sistema no alerta de nada, sigue conectado al router aparentemente tal como dice en la barra superior, pero para que vuelvan a funcionar las conexiones tengo que desactivar el wifi y volverlo a activar, y vuelve a funcionar por otro ratito.

He probado borrando la red por completo, hasta del llavero, y volver a configurarla desde cero, pero nada.

El resto de ordenadores con windows y moviles (Android e iOS) no muestran caidas y van bien.

Espero poder encontrar otra solucion que no sea volver a utilizar WPA en toda la red…

A alguien mas le ha pasado algo similar?

Muchas gracias amigos.
8  Programación / Bases de Datos / Campo para cuotas mensuales en: 18 Mayo 2012, 16:27 pm
Buenas chic@s!
Tengo una dudilla un poco tonta creo... estoy montando un sistema de gestion de clientes para un negocio familiar que necesita administrar mensualidades de clientes.

En principio pense en usar un campo DATE y luego con php rescatar solo el mes y año, pero no se si es un poco bruto hacerlo de esta forma.

Me gustaria saber que pensais! :)

Un saludo.
9  Programación / Desarrollo Web / Ayuda con conversion a preg_match en: 28 Octubre 2011, 23:05 pm
Buenas,
Siempre he tenido problemas para entender todo el tema de expresiones regulares y demás en PHP...
el caso es que en una de mis webs, uso el siguiente codigo para detectar navegadores moviles:
Código
  1. $is_movil = eregi('/ipod|iphone|android|opera mini|blackberry|palm os|windows ce/',$_SERVER['HTTP_USER_AGENT']);
Pero la funcion eregi ya no es válida en la versión actual de PHP, y en teoria con reemplazarla por preg_match deberia valer, pero el script no funciona cuando uso preg_match...

Que es lo que deberia cambiar mas?

Gracias.
10  Programación / Desarrollo Web / Opiniones sobre usar DNS externo al hosting en: 23 Octubre 2011, 15:50 pm
Buenas,
Esto es algo que jamás me habia planteado, pero ahora estoy en un proyecto en el que no se pueden poner todos los huevos en la misma cesta jeje, y si se cae un servidor, quiero que bajo otro subdominio que apunte a otro servidor de otro hosting se puedan acceder a los recursos.

Esto de poner un subdominio apuntando a otra compañia de hosting no vale de nada si, cuando se cae la compañia que tiene el servidor DNS no puede servir a ese subdominio segun tengo entendido...

La pregunta es, ustedes que harian? Piensan que hacer eso de externalizar el servidor DNS a otro proveedor que se dedique solo a eso (Dyn.com por ejemplo) es añadir una capa mas que pueda fallar aparte del hosting?

Confiarian en usar el servidor DNS que viene por ejemplo en el Parking de Piensasolutions (donde compro los dominios) o sería mejor comprar necesariamente el servicio anual de Dyn.com? Este ultimo lo que me preocupa es que pone un limite de querys al servidor DNS...

Un saludo y gracias.
Páginas: [1] 2 3 4 5 6
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines