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");
}
}
?>