Foros del Web » Programando para Internet » PHP »

PHP OO Duda sobre seguridad al enviar datos por POST

Estas en el tema de Duda sobre seguridad al enviar datos por POST en el foro de PHP en Foros del Web. Como están? luego de ya tener saldada una duda por parte de Heli0s a quien agradezco enormemente, al final del otro tema le hice una ...
  #1 (permalink)  
Antiguo 02/03/2014, 18:45
 
Fecha de Ingreso: octubre-2008
Mensajes: 85
Antigüedad: 15 años, 6 meses
Puntos: 0
Duda sobre seguridad al enviar datos por POST

Como están? luego de ya tener saldada una duda por parte de Heli0s a quien agradezco enormemente, al final del otro tema le hice una consulta referente a como tomar correctamente los valores que envío por post y asignarselo a los atributos de una clase.

Heli0s me hablo sobre la seguridad, podrían decirme donde empezar a leer sobre como hacer la recepción de los parametros enviados por post para asignarselos a los atributos de la clase de manera segura?

En lo personal tengo un formulario en html obviamente

Código HTML:
Ver original
  1. <form method="post">
  2.     <ul>
  3.          <li>
  4.                  <label for="usn">Usuario : </label>
  5.                  <input type="text" maxlength="20" required autofocus name="usuario" />
  6.          </li>
  7.  
  8.          <li>
  9.                  <label for="passwd">Contraseña : </label>
  10.                  <input type="password" maxlength="20" required name="pass1" />
  11.          </li>
  12.          
  13.          <li>
  14.                  <label for="confpasswd">Confirmar Contraseña : </label>
  15.                  <input type="password" maxlength="20" required name="pass2" />
  16.          </li>
  17.  
  18.          <li>
  19.                  <label for="nombr">Nombre : </label>
  20.                  <input type="text" maxlength="20" required name="nombre" />
  21.          </li>
  22.          
  23.          <li>
  24.                  <label for="apell">Apellido : </label>
  25.                  <input type="text" maxlength="20" required name="apellido" />
  26.          </li>
  27.  
  28.          <li>
  29.                  <label for="mail">mail : </label>
  30.                  <input type="email" maxlength="50" required name="mail" />
  31.          </li>
  32.          
  33.          <li>
  34.                  <label for="localid">Local : </label>
  35.                  <input type="text" maxlength="20" required name="localid" />
  36.          </li>
  37.  
  38.          <li>
  39.                  <label for="tipousr">Tipo de Usuario : </label>
  40.                  <input type="password" maxlength="50" required name="tipousr" />
  41.          </li>
  42.          <li class="buttons">
  43.                 <input type="submit" name="login" value="Crear Usuario" />
  44.          </li>
  45.  
  46.     </ul>
  47. </form>

Que envía dichos datos por post y son utilizados en la siguiente clase

Código PHP:
Ver original
  1. class Usuarios
  2. {
  3.     public $idusuario = null;
  4.     public $usuario = null;
  5.     public $pass = null;
  6.     public $nombre = null;
  7.     public $apellido = null;
  8.     public $mail = null;
  9.     public $tipousuario = null;
  10.     public $idlocal = null;
  11.     public $esadmin = null;
  12.     public $puntos = null;
  13.     public $salt = null;
  14.    
  15.     public function __construct($datos = array())
  16.     {
  17.         if (isset($datos['usuario']))
  18.         {
  19.             $this->usuario = stripslashes(strip_tags($datos['usuario']));
  20.         }
  21.         if (isset($datos['pass']))
  22.         {
  23.             $this->pass = stripslashes(strip_tags($datos['pass']));
  24.         }
  25.     }
  26.    
  27.    
  28.     public function loginUsuario()
  29.     {... 63 lines }
  30.    
  31.     //Funcion de registro de usuarios
  32.     public function registraUsuario()
  33.     {
  34.         $success = false;
  35.         try
  36.         {
  37.             //Tomamos los valores del post
  38.             $this->usuario = $_POST['usuario'];
  39.             $this->pass = $_POST['pass'];
  40.             $this->nombre = $_POST['nombre'];
  41.             $this->apellido = $_POST['apellido'];
  42.             $this->mail = $_POST['mail'];
  43.             $this->tipousuario = $_POST['tipousuario'];
  44.             $this->idlocal = $_POST['idlocal'];
  45.             $this->esadmin = $_POST['esadmin'];
  46.             $this->salt = generaSalt::crearSalt(45);
  47.            
  48.             //Nos conectamos a la base de datos
  49.             $con = new mysqli(DB_HOST, DB_USUARIO, DB_PASSWORD, DB_DATABASE);
  50.             //Preparamos el query SQL
  51.             $sql = 'INSERT INTO usuarios VALUES (usuario, contrasena, salt, nombre, apellido, mail, tipo_usuario, id_local)'
  52.                     . 'VALUES (?,?,?,?,?,?,?,?)';
  53.             //Creamos la sentencia preparada a utilizar
  54.             $pre = $con->prepare($sql);
  55.             $pre->bind_param('ssssssii', $this->usuario, $this->pass, $this->salt, $this->nombre, $this->apellido,  $this->mail, $this->tipousuario, $this->idlocal);
  56.             $pre->execute();
  57.            
  58.             $con->close();
  59.            
  60.             $success = true;
  61.            
  62.             return $success;
  63.            
  64.         } catch (Exception $ex) {
  65.             return $ex->getMessage();
  66.         }
  67.    
  68.     }
  69.    
  70.    
  71. }

Espero puedan darme una mano para hacer un sitio que tenga un poco de seguridad

desde ya muchas gracias a todos!
  #2 (permalink)  
Antiguo 02/03/2014, 19:00
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Duda sobre seguridad al enviar datos por POST

Este es un post en el que se dan muchos consejos sobre seguridad, de hace 3 años, pero me gusta mantenerlo ya que sigue siendo vigente todo lo que se dice.

Un saludo
  #3 (permalink)  
Antiguo 02/03/2014, 19:30
 
Fecha de Ingreso: octubre-2008
Mensajes: 85
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Duda sobre seguridad al enviar datos por POST

Heli0s entonces la idea sería que cada valor que llega por post debería generar una serie de comprobaciones para de alguna manera asegurarme que sean lo que yo quiero que los clientes envíen en los formularios?

Estoy bien o le estoy escapando a algo?
  #4 (permalink)  
Antiguo 02/03/2014, 19:32
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Duda sobre seguridad al enviar datos por POST

Estás en lo correcto, una buena filosofía es, cualquier dato externo es maligno hasta que se "compruebe" lo contrario.

Si es una fecha comprobar que tiene el formato correcto, si es una contraseña limitar caracteres, longitud, si es un dato numerico pasarlo a int lo cual elimina caracteres, y así miles de cosas.

Un saludo
  #5 (permalink)  
Antiguo 02/03/2014, 19:37
 
Fecha de Ingreso: octubre-2008
Mensajes: 85
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Duda sobre seguridad al enviar datos por POST

Buena filosofía jaja, nunca mejor explicada!!!

Ahora para mantener una buena práctica las funciones para esas comprobaciones me conviene mantenerlas dentro de la clase usuario que es donde se va a utilizar o crear una clase aparte que contenga todos los metodos para la comprobación de los diferentes campos?
  #6 (permalink)  
Antiguo 03/03/2014, 02:24
Avatar de Heli0s  
Fecha de Ingreso: abril-2010
Mensajes: 789
Antigüedad: 14 años
Puntos: 40
Respuesta: Duda sobre seguridad al enviar datos por POST

Lo idea es una clase externa, y que este preparada para validar lo que sea cuando lo necesites, no solo un formulario.

Un saludo

Etiquetas: formulario, html, mysql, post, registro, seguridad, sql, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:07.