php et poka yoké
Posté : 25 août 2008, 14:23
Bonjour
j'ai récemment lu un très bon article sur la sécurité poka yoké
http://www.nexen.net/articles/dossier/1 ... a-yoke.php
et j'ai décidé de mettre mon site à la poka yoké
en suivant l'exemple donné dans l'article, je suis en train d'écrire trois type de fonctions
- les fonctions de test
- les fonction pour obtenir des valeurs 'exactes'
- les fonctions pour filtrer
quand je dis 'valeurs exactes' c'est à dire que si on demande un int et qu'on en reçoit un c'est bon, sinon on génère une exception
et les fonctions de filtrage qui servent par exemple à récupérer un int dans une chaine
je voulais vous demander à première vue ce que vous en pensiez et si vous me conseillez de continuer dans cette direction
je n'ai pas fait toutes les fonctions, ceci est une ébauche
merci
j'ai récemment lu un très bon article sur la sécurité poka yoké
http://www.nexen.net/articles/dossier/1 ... a-yoke.php
et j'ai décidé de mettre mon site à la poka yoké
en suivant l'exemple donné dans l'article, je suis en train d'écrire trois type de fonctions
- les fonctions de test
- les fonction pour obtenir des valeurs 'exactes'
- les fonctions pour filtrer
quand je dis 'valeurs exactes' c'est à dire que si on demande un int et qu'on en reçoit un c'est bon, sinon on génère une exception
et les fonctions de filtrage qui servent par exemple à récupérer un int dans une chaine
je voulais vous demander à première vue ce que vous en pensiez et si vous me conseillez de continuer dans cette direction
je n'ai pas fait toutes les fonctions, ceci est une ébauche
merci
<?php
class filtre implements ArrayAccess
{
protected $donnees;
protected $bdd;
function __construct($donnees)
{
global $bdd;
if (!is_array($donnees))
{
throw new Exception ('[EXCEPTION] : une action non conforme a étée effectuée');
}
$this->donnees=$donnees;
$this->bdd=&$bdd;
}
/****************************************************************************
implementation de l'interface ArrayAcces
****************************************************************************/
function offsetExists($offset)
{
return (isset ($this->donnees[$offset]));
}
function offsetSet($offset,$value)
{
throw new Exception ("You cannot extract information from an instance
of Filter as if it were an array");
}
function offsetDelete($offset)
{
throw new Exception ("You cannot extract information from an instance
of Filter as if it were an array");
}
function offsetGet($offset)
{
throw new Exception ("You cannot extract information from an instance
of Filter as if it were an array");
}
/****************************************************************************
fonction de test
****************************************************************************/
function is_int($offset)
{
return preg_match('`^[0-9]+$',$this->donnees[$offset]);
}
function is_float($offset)
{
return preg_match('`^[0-9]+\.[0-9]+$',$this->donnees[$offset]);
}
function is_numeric($offset)
{
return preg_match('`(^[0-9]+$)|(^[0-9]+\.[0-9]+$)',$this->donnees[$offset]);
}
function is_alpha($offset)
{
return preg_match('`^[a-zA-Z]+$',$this->donnees[$offset]);
}
function is_string($offset)
{
if($this->donnees[$offset]==strip_tags($this->donnees[$offset]))
{
return preg_match('`^[a-zA-Z0-9 &é\"\'\(-è_çà\)=~#\{\[\|\`\\\^@\]\}\^\$ù\*!:;,¨£µ%§/\.\?¤\.\+-/*\<\>ÀÁÂÃÄÅ
àáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ]+$`',$this->donnees[$offset]);
}
else
{
return false;
}
}
function is_text($offset)
{
if($this->donnees[$offset]==strip_tags($this->donnees[$offset]))
{
return preg_match('`^[a-zA-Z0-9 &é\"\'\(-è_çà\)=~#\{\[\|\`\\\^@\]\}\^\$ù\*!:;,¨£µ%§/\.\?¤\.\+-/*\<\>ÀÁÂÃÄÅ
àáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ(\n)(\t)(\r)]+$`',$this->donnees[$offset]);
}
else
{
return false;
}
}
function is_alphanum($offset)
{
return preg_match('`^[a-zA-Z0-9]+$',$this->donnees[$offset]);
}
function is_array($offset)
{
return is_array($this->donnees[$offset]);
}
function is_object($offset)
{
return is_object($this->donnees[$offset]);
}
function is_resource($offset)
{
return is_resource($this->donnees[$offset]);
}
function is_html($offset)
{
return preg_match('`^[a-zA-Z0-9 &é\"\'\(-è_çà\)=~#\{\[\|\`\\\^@\]\}\^\$ù\*!:;,¨£µ%§/\.\?¤\.\+-/*\<\>ÀÁÂÃÄÅ
àáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ(\n)(\t)(\r)]+$`',$this->donnees[$offset]);
}
function is_bool($offset)
{
return preg_match('`(^true$)|(^false$)|(^0$)|(^1$)`',$this->donnees[$offset]);
}
function is_sql($offset)
{
if($offset==mysql_real_escape_string($offset,$bdd))
{
return true;
}
else
{
return false;
}
}
/****************************************************************************
fonction de filtrage strict
****************************************************************************/
function get_int($offset)
{
if(isset($this->donnees[$offset])&&$this->is_int($this->donnees[$offset]))
{
return (int)$this->donnees[$offset];
}
else
{
}
}
function get_float($offset)
{
if(isset($this->donnees[$offset])&&$this->is_float($this->donnees[$offset]))
{
return (float)$this->donnees[$offset];
}
else
{
}
}
function get_alphanum($offset)
{
if(isset($this->donnees[$offset])&&$this->is_alphanum($this->donnees[$offset]))
{
return $this->donnees[$offset];
}
else
{
}
}
function get_string($offset)
{
if(isset($this->donnees[$offset])&&$this->is_string($this->donnees[$offset]))
{
return $this->donnees[$offset];
}
else
{
}
}
/****************************************************************************
fonction de filtrage souple
****************************************************************************/
function filtre_int($offset)
{
if(isset($this->donnees[$offset]))
{
return (int)$this->donnees[$offset];
}
else
{
}
}
function filtre_float($offset)
{
if(isset($this->donnees[$offset]))
{
return (float)$this->donnees[$offset];
}
else
{
}
}
function filtre_alphanum($offset)
{
if(isset($this->donnees[$offset]))
{
return return preg_replace('`[^a-zA-Z0-9]`','',$this->donnees[$offset]);
}
else
{
}
}
function filtre_string($offset)
{
if(isset($this->donnees[$offset]))
{
return preg_replace('`[^a-zA-Z0-9 &é\"\'\(-è_çà\)=~#\{\[\|\`\\\^@\]\}\^\$ù\*!:;,¨£µ%§/\.\?¤\.\+-/*\<\>ÀÁÂÃÄÅ
àáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ`','',$this->donnees[$offset]);
}
else
{
}
}
function filtre_text($offset)
{
if(isset($this->donnees[$offset]))
{
return preg_replace('`[^a-zA-Z0-9 &é\"\'\(-è_çà\)=~#\{\[\|\`\\\^@\]\}\^\$ù\*!:;,¨£µ%§/\.\?¤\.\+-/*\<\>ÀÁÂÃÄÅ
àáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ(\n)(\t)(\r)]`','',$this->donnees[$offset]);
}
else
{
}
}
/****************************************************************************
modification de méthodes de base de la classe
****************************************************************************/
function __get($offset)
{
throw new Exception ("You cannot access members of an array
encapsulated by Filter directly");
}
function __set($offset, $value)
{
throw new Exception ("You cannot access members of an array
encapsulated by Filter directly");
}
}
?>