view includes/class.dataaccess.php @ 71:464f4b94ee27

Filtrage de certaines balises HTML, meilleure détection de la validité XML. Plusieurs choses en une, toute tournant autour d'un meilleur traitement du commentaire soumis: - on utilise désormais stripslashes pour correctement gérer la valeur d'éventuels arguments - on filtre, via le DOM, les balises qui pourraient s'avérer peut sure, ou être utilisé pour une attaque de type cross-site scripting. L'utilisation de getElementsByTagName devrait se charger d'attaque du type <html:script /> ou l'utilisateur utilise un namespace non standard pour déjouer une comparaison de chaînes.
author Franck Deroche <webmaster@defr.org>
date Thu, 20 Mar 2008 19:45:08 +0100
parents 0071e5744311
children e4e50d4d3b7a
line wrap: on
line source
<?php
class DataAccess {
  var $host;
  var $user;
  var $pass;
  var $db;
  var $link;
  var $connOpen;
  var $results;
  var $queries;
  var $_nbQueries;
  var $_inError;
  
  function DataAccess($host=DB_HOST, $user=DB_USER, $pass=DB_PASSWORD, $db=DB_NAME) {
   $this->host=$host;
   $this->user=$user;
   $this->pass=$pass;
   $this->db = $db;
   $this->connOpen = 0;
   $this->_nbQueries = 0;
   $this->queries = array();
   $this->results = array();
   $this->Connect();
 }
 
  function Connect() {
   if($this->connOpen == 0) {
     $this->link = mysql_connect($this->host, $this->user, $this->pass);
     if($this->link === false)
     	$this->_inError = true;
     else
     	$this->_inError = !mysql_select_db($this->db, $this->link);
   }
   $this->connOpen++;
  }
  
  function Query($query, $id=0) {
   $this->_nbQueries++;
   $this->queries[$id]=$query;
   $this->Connect();
   $this->results[$id]=mysql_query($this->queries[$id], $this->link);
   $this->Close();
   if(@$num_rows=mysql_num_rows($this->results[$id]))
	return $num_rows;
   return 0;
  }
  
  function debugQuery($query, $id=0) {
  $rv = $this->Query($query, $id);
  if(mysql_errno() !== 0)
	echo("<span class='menu'>\n Query : {$query}<br />\n MySQL Answer : " . mysql_error() . "</span>");
  return $rv;
  }
  
  function GetRow($id=0) {
   if(@$row=mysql_fetch_array($this->results[$id])) {
    return $row;
   }
   return 0;    
  }
  
  function Close() {
   $this->connOpen--;
   if($this->connOpen == 0) {
    mysql_close($this->link);
   }
  }
  
  function getNbQueries() {
	return $this->_nbQueries;
  }
  
  function formatDate($timestamp, $decallage=2, $pattern='d/m/Y H:i:s') {
   return gmdate($pattern, $timestamp + $decallage * 3600);
  }
  
  function isInError()
  {
    return $this->_inError;
  }
}
?>