Joven hacker sonriendo

Validar Datos de Entrada

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en PHP utilizando el framework Yii. Las aplicaciones deben validar los datos de entrada para evitar el ingreso de código malicioso, como es el caso de ataques XSS, SQLi, CSRF, entre otros.

Necesidad

Validar los datos de entrada a la aplicación

Contexto

A continuación se describen las circunstancias bajo las cuales la siguiente solución tiene sentido:

  1. Se utiliza el lenguaje de programación PHP.

  2. Se utiliza el framework de desarrollo Yii [1].

Solución

Al crear un formulario, hay que ser consciente de un detalle ineludible: los usuarios se equivocan al rellenar un formulario. Ya sea que dicha equivocación se de por ambigüedad del formulario, o tal vez algún error del creador del mismo, o incluso, que el usuario se equivoque deliberadamente. El caso es que hay que estar preparado y por consiguiente anticiparse a dichos errores, para intentar que los datos lleguen correctamente a su destino y evitar cualquier tipo de moderación, revisión posterior o, peor aun, algún ataque que ponga en peligro la confidencialidad e integridad de la información.

Para evitar estos casos, se suele recurrir a un tipo de proceso automático llamado validación. En este, se establecen algunas pautas para que, si el usuario introduce alguna información incorrecta o invalida, deba modificarla o, en caso contrario, no podrá continuar ni enviar el formulario correctamente.

Tradicionalmente, la validación de un formulario se ha hecho siempre en JavaScript. Incluso, HTML en su versión HTML5 ha introducido nuevos atributos para formularios que permiten realizar la validación del formulario directamente sin necesidad de recurrir a otros lenguajes. Pero, en esta ocasión, los datos serán validados desde el back-end usando el framework YII.

  1. Se cuenta con un formulario del cual se desean validar sus datos.

  2. Para validar datos con YII se hace uso del método rules() en los modelos definidos para el uso de la aplicación.

  3. Un ejemplo se muestra a continuación:

    rules.php
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    /**
      * @return array validation rules for model attributes.
    */
    
    public function rules()
    {
      // NOTE: you should only define rules for those attributes that
      // will receive user inputs.
      return array(
        array('ciudad_id, nombres, identificacion, email, genero','required',
        'message'=>'Este campo es requerido'),
        array('nombres', 'match', 'pattern'=>'[\w\s]*', 'allowEmpty'=>false),
        array('email', 'email'),
        array('id, ciudad_id, nombres, identificacion, email, estado, genero',
        'safe','on'=>'search'), );
    }
    
  4. En el ejemplo anterior, se puede apreciar el uso de diferentes validaciones del tipo required, email e, incluso, el uso de expresiones regulares.

  5. Con la linea array(nombres,match, pattern⇒'[\w\s]{3,}', allowEmpty⇒false). Es posible evitar que los datos contengan caracteres innecesarios tales como ('-") entre otros, previniendo ciertos vectores de ataque.

  6. El validador safe permite evitar que un usuario malintencionado pueda alterar los valores del modelo que no necesariamente tengan una representación en una base de datos. Además previenen que estos datos puedan explotar funciones del método CActiveRecord.

  7. Esta validación se realiza cuando el método validate() es llamado desde el objeto modelo.

  8. Este llamado se hace, generalmente, en respuesta a una acción por parte del usuario, ejemplo:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    $model->attributes=$_POST['Usuarios'];
    if ($model->validate())
    {
      //todo correcto
    }
    else
    {
      //hubo un error en la validación
    }
    



Haz un comentario

Estado de los servicios - Términos de Uso