Sécurité du site d'inscription FF (pour geeks)

Discussions autour de vos différents projets Furry.
Si vous avez une idee de projet ou bien voulez participer c'est ici.

Modérateurs: modérateurs, admins

Sécurité du site d'inscription FF (pour geeks)

Messagede Ozone Griffox » 04 Mai 2004, 07:50

Pour ceux qui connaissent le PHP et/ou la programmation, voila les premières ébauches du gestionnaire d'inscriptions pour la FranFurence. Le but est de vérifier s'il y a des failles de sécurité dans le code afin de les corriger. Il est fortement recommendé de copier/coller le code dans un programme plus visuel que le forum à partir d'un "citer". Bonne chance aux geeks!

REGISTRATION.PHP

<html>
<head>
<?php
include 'common.php';

function valinit($field, $default)
{
if ($_POST[$field]) return $_POST[$field];
return $default;
}

function topay($field)
{
if ($_POST[$field]) return $_POST[$field];
$date=explode('/', DATE_LIMIT);
if (!checkdate($date[1],$date[0],$date[2])) die('La date limite est invalide');
$limit=mktime(3,0,0,$date[1],$date[0],$date[2]);
if (time() < $limit) return '65.00'; else return '75.00';
}
?>

<title>FranFurence Inscriptions</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1]
<link href="styles.css" rel="stylesheet" type="text/css]
</head>
<body>
<?php
if ($_POST['MODE']=='post') {
// Chargement du tableau pour les allergies (sera encapsulé)
$rec=$db->query($views->ALLERGY());
$result=mysql_fetch_assoc($rec);
while($result)
{
if ($_POST['param_allergy_'.$result['K_ALLERGY']]) $allergies[$result['K_ALLERGY']]=' checked';
$result=mysql_fetch_assoc($rec);
}
// Encapsulation du formulaire et traitement des erreurs
$ERROR=$contacts->set_from_form($db, $views, $_POST);
if ($ERROR) {
$logs->write('Erreurs ('.$_POST['param_nick'].') : ',false);
$logs->write($ERROR,true);
}
}

if ($_POST['MODE']=='post' and !$ERROR) {
// Si validation et aucune erreur
$contacts->write($db);
$logs->write('Souscription valide : '.$contacts->db_contact['CNT_NICK'],true);
?>
<!--Affichage lorsque le formulaire est remplit, posté et validé.-->
<p>Vous allez recevoir un e-mail de re&u si votre demande
d'inscription & bien &t& prise en compte. Si vous ne re&evez pas votre re&u dans l'heure <br>
qui suit, contactez-nous & [url=mailto:xxx]xxx[/url]<br>
<?php
} else {
?>
<!--Affichage du formulaire lors de la première visite, erreur ou édition. -->
</p>
<p>Remplissez le formulaire d'inscription, vous recevrez
une r&ponse le ... au plus tard qui confirmera ou non votre
inscription.<br>
<br>
Une fois votre inscription valid&e, vous devrez
envoyer votre r&glement par virement bancaire, ch&que, ou par [url=http://www.paypal.com" target="_blank]PayPal[/url]. Les coordonn&es bancaires vous serons fournies ult&rieurement.</p>
<form action="registration.php" method="post" name="SUBSCRIPTION" id="SUBSCRIPTION]
<table width="100%" cellpadding="0" cellspacing="4" border="0]
<tbody>
<tr class="Titres]
<td colspan="2" align="left" valign="middle]
<p class="Titres]Nom et Adresse
<input name="MODE" type="hidden" id="MODE" value="post]
<input name="K_CONTACT" type="hidden" id="K_CONTACT" value="<?php echo valinit('K_CONTACT',NULL) ?>]
</td>
</tr>
<tr>
<td align="right" valign="middle" nowrap class="Libchamps]Nom</td>
<td align="left" valign="middle]<input name="param_last_name" type="text" id="param_last_name2" value="<?php echo valinit('param_last_name','') ?>" size="35" maxlength="35]
<span class="Erreurs]<?php echo $ERROR['last_name'] ?></span></td>
</tr>
<tr>
<td align="right" valign="middle" nowrap class="Libchamps]<b>Pr&nom</b></td>
<td align="left" valign="middle]<input name="param_first_name" type="text" id="param_first_name2" value="<?php echo valinit('param_first_name','') ?>" size="35" maxlength="35]
<span class="Erreurs]<?php echo $ERROR['first_name'] ?></span></td>
</tr>
<tr>
<td align="right" valign="middle" nowrap class="Libchamps]<b>Adresse</b></td>
<td align="left" valign="middle]<input name="param_address1" type="text" id="param_address12" value="<?php echo valinit('param_address1','') ?>" size="35" maxlength="35]
<span class="Erreurs]<?php echo $ERROR['address'] ?></span></td>
</tr>
<tr>
<td align="right" valign="middle" nowrap class="Libchamps]&</td>
<td align="left" valign="middle]<input name="param_address2" type="text" id="param_address22" value="<?php echo valinit('param_address2','') ?>" size="35" maxlength="35]</td>
</tr>
<tr>
<td align="right" valign="middle" nowrap class="Libchamps]&</td>
<td align="left" valign="middle]<input name="param_address3" type="text" id="param_address32" value="<?php echo valinit('param_address3','') ?>" size="35" maxlength="35]</td>
</tr>
<tr>
<td align="right" valign="middle" nowrap class="Libchamps]CP / Ville</td>
<td align="left" valign="middle]<input type="text" name="param_zip" value="<?php echo valinit('param_zip','') ?>" size="10" maxlength="20]
&
<input type="text" name="param_city" value="<?php echo valinit('param_city','') ?>" size="35" maxlength="35]
<span class="Erreurs]<?php echo $ERROR['zip'] ?>&<?php echo $ERROR['city'] ?></span></td>
</tr>
<tr>
<td align="right" valign="middle" nowrap class="Libchamps]<b>Pays</b></td>
<td align="left" valign="middle]<?php echo $forms->LISTS('param_country', $db, 'CTR_LIB', 'K_COUNTRY', $views->COUNTRY(), valinit('param_country','France')); ?>
<span class="Erreurs]<?php echo $ERROR['country'] ?></span></td>
</tr>
<tr>
<td align="right" valign="middle" nowrap class="Libchamps]<b>E-mail</b></td>
<td align="left" valign="middle]<input type="text" name="param_email" value="<?php echo valinit('param_email','') ?>" size="35" maxlength="100]
<span class="Erreurs]<?php echo $ERROR['email'] ?></span></td>
</tr>
<tr>
<td nowrap class="Libchamps]</td>
<td align="left" valign="middle]Merci de nous donner une adresse e-mail valide, c'est notre seule fa&on de vous contacter. Si besoin, demandez & un ami l'autorisation d'utiliser la sienne.</td>
</tr>
<tr>
<td align="right" valign="middle" nowrap class="Libchamps]<b>T&l&phone (optionel)</b></td>
<td align="left" valign="middle]<input type="text" name="param_phone" value="<?php echo valinit('param_phone','') ?>" size="25" maxlength="25]
<span class="Erreurs]<?php echo $ERROR['phone'] ?></span></td>
</tr>
<tr>
<td></td>
<td align="left" valign="middle]Si vous organisez un SIG & la FranFurence, merci de nous donner votre num&ro de t&l&phone afin de pouvoir vous joindre en cas d'urgence. Cette information est optionnelle pour tous les autres membres.</td>
</tr>
<tr>
<td colspan="2" align="left" valign="middle" class="Titres]Informations Personnelles </td>
</tr>
<tr>
<td align="right" valign="middle" nowrap class="Libchamps]<b>Date de naissance</b></td>
<td align="left" valign="middle]<input type="text" name="param_birthday" value="<?php echo valinit('param_birthday','01/01/1900') ?>" size="10" maxlength="10]
<span class="Erreurs]<?php echo $ERROR['birthday'] ?></span></td>
</tr>
<tr>
<td nowrap class="Libchamps]</td>
<td align="left" valign="middle]Veuillez saisir votre date de naissance au format JJ/MM/AAAA. Cette information est obligatoire. Les mineurs de moins de 18 ans doivent nous faire parvenir une [url=aut-parentale.txt" target="_blank]Autorisation parentale[/url] sign&e par les tuteurs l&gaux.</td>
</tr>
<tr>
<td align="right" valign="top" nowrap class="Libchamps]<b>Sexe</b></td>
<td align="left" valign="middle]
<?php echo $forms->LISTS('param_gender', $db, 'GEN_LIB', 'K_GENDER', $views->GENDER(), valinit('param_gender','Male')); ?><span class="Erreurs]<?php echo $ERROR['gender'] ?></span>
</td>
</tr>
<tr>
<td align="right" valign="top" nowrap class="Libchamps]<b>Allergies<br>
Restrictions </b></td>
<td align="left" valign="middle]<span class="Erreurs]<?php echo $ERROR['allergies'] ?></span>
<?php echo $forms->CHECKBOXES('param_allergy_', '<BR>', $db, 'K_ALLERGY', 'ALL_LIB', $allergies, $views->ALLERGY()) ?>
</td>
</tr>
<tr class="Titres]
<td colspan="2" align="left" valign="middle] Inscription</td>
</tr>
<tr>
<td align="right" valign="top" nowrap class="Libchamps]<b>Frais d'inscription </b></td>
<td align="left" valign="middle]
<table width="100%" border="2" cellpadding="3" cellspacing="0]
<tr bgcolor="#800000]
<th width="35%" scope="col]<div align="center]avant le 15 ao&t </div></th>
<th width="35%" scope="col]<div align="center]& partir du 15 ao&t </div></th>
<th scope="col]<div align="center]sur site </div></th>
</tr>
<tr>
<td width="35%]<div align="center]65 & <span class="Commentaires PetitIta](Paypal + 2 &)</span></div></td>
<td width="35%]<div align="center]75 & <span class="Commentaires PetitIta](Paypal + 3 &)</span></div></td>
<td><div align="center]85 & </div></td>
</tr>
</table>
Les frais d'inscription comprennent: les activit&s, l'h&bergement du 11 au 14 novembre, trois repas par jour. Les draps sont fournis, chaque participant doit amener ses affaires de toilette et des oreillers si les traversins ne vous plaisent pas. </td>
</tr>
<tr>
<td align="right" valign="middle" nowrap class="Libchamps]<b>Surnom / Nickname </b></td>
<td align="left" valign="middle]<input type="text" name="param_nick" value="<?php echo valinit('param_nick','') ?>" size="35" maxlength="35]
<span class="Erreurs]<?php echo $ERROR['nick'] ?></span></td>
</tr>
<tr>
<td nowrap class="Libchamps]</td>
<td align="left" valign="middle]C'est le surnom qui apparaitra sur votre badge.</td>
</tr>
<tr>
<td align="right" valign="middle" nowrap class="Libchamps]<b>Mot de passe </b></td>
<td align="left" valign="middle]<input name="param_password" type="password" id="param_password" value="<?php echo valinit('param_password','') ?>" size="20" maxlength="20]
<span class="Erreurs]<?php echo $ERROR['password'] ?></span></td>
</tr>
<tr>
<td nowrap class="Libchamps]</td>
<td align="left" valign="middle]Le mot de passe qui vous permettra de modifier et suivre les informations de votre inscription. Ce mot de passe est crypt&, apr&s l'e-mail de confirmation qui vous parviendra, afin d'assurer sa confidentialit&.</td>
</tr>
<tr>
<td align="right" valign="top" nowrap class="Libchamps]<b>Type de paiement </b></td>
<td align="left" valign="middle]
<?php echo $forms->LISTS('param_pay_type', $db, 'PTY_LIB', 'K_PAY_TYPE', $views->PAY_TYPE(), valinit('param_pay_type','Virement')); ?>
<span class="Erreurs]<?php echo $ERROR['pay_type'] ?></span> </td>
</tr>
<tr>
<td align="right" valign="middle" nowrap class="Libchamps]<b>Reste & payer </b></td>
<td align="left" valign="middle]<input name="param_topay" type="text" value="<?php echo topay('param_topay') ?>" size="6" maxlength="6" readonly="true]
& </td>
</tr>
<tr>
<td align="right" valign="middle" nowrap class="Libchamps]<b>Date d'arriv&e </b></td>
<td align="left" valign="middle]<input type="text" name="param_arrival" value="<?php echo valinit('param_arrival','11/11/2004') ?>" size="10" maxlength="10]
<span class="Erreurs]<?php echo $ERROR['arrival'] ?></span></td>
</tr>
<tr>
<td align="right" valign="middle" nowrap class="Libchamps]<b>Date de d∂ </b></td>
<td align="left" valign="middle]<input type="text" name="param_departure" value="<?php echo valinit('param_departure','14/11/2004') ?>" size="10" maxlength="10]
<span class="Erreurs]<?php echo $ERROR['departure'] ?></span></td>
</tr>
<tr>
<td align="right" valign="top" nowrap class="Libchamps]<b>Commentaires</b></td>
<td align="left" valign="middle]<textarea name="param_user_comments" rows="3" cols="65]<?php echo valinit('param_user_comments','') ?></textarea></td>
</tr>
<tr>
<td align="right" valign="top" nowrap class="Libchamps]<b>Objets pr&cieux </b></td>
<td align="left" valign="middle]<textarea name="param_user_objects" cols="65" rows="3" id="textarea]<?php echo valinit('param_user_objects','') ?></textarea></td>
</tr>
<tr>
<td align="right" valign="top" nowrap class="Libchamps]<b>Activit&s propos&es<br>
(SIG)</b></td>
<td align="left" valign="middle]<textarea name="param_user_activities" cols="65" rows="3" id="textarea2]<?php echo valinit('param_user_activities','') ?></textarea></td>
</tr>
<tr>
<td nowrap class="Libchamps]</td>
<td align="left" valign="middle]<table width="100%" border="0]
<tr>
<td><input type="submit" value="Envoyer l'inscription]</td>
<td><div align="right]
<input type="reset" value="Effacer]
</div></td>
</tr>
</table></td>
</tr>
<tr>
<td colspan="2" align="left" valign="top] Le Staff de la FranFurence 2 se r&serve le droit de rejeter n'importe quelle r&servation pour tout motif. Si c'est le cas, vous recevrez un e-mail comme quoi votre inscription est annul&e. </td>
</tr>
</tbody>
</table>
</form>
<?php
}
?>
</body>
</html>


Dernière édition par Ozone Griffox le 04 Mai 2004, 08:05, édité 2 fois.
Avatar de l’utilisateur
Ozone Griffox
Griffox   Anthro
 
Messages: 3189
Inscription: 18 Fév 2003, 11:59
Localisation: France

Sur la Furmap: Ozone

Rôliste

Messagede Ozone Griffox » 04 Mai 2004, 07:51

COMMON.PHP

<?php
include 'classes.php';

define('K_CONVENTION', 1);
define('DATE_LIMIT', 'xx/xx/xxxx');
define('CRLF',chr(13).chr(10));
define('LF',chr(10));
define('LOGNAME','franfurence.log');
define('CRYPT_KEY','xxx');

$db=new DB('localhost', 'xxx', 'xxx', 'xxx');
$forms=new FORMS;
$views=new VIEWS;
$logs=new LOGS;
$contacts=new CONTACTS;

$logs->write($_SERVER['URL'].' '.$_SERVER['HTTP_USER_AGENT'],true);

// Function IIF classique
function IIF($condition, $true, $false)
{
if ($condition) return $true; else return $false;
}

// Vérifie une date Française
function CHECK_FRDATE($frdate)
{
$ret=false;
if (strlen($frdate)==10) {
$date=explode('/',$frdate);
$ret=checkdate($date[1],$date[0],$date[2]);
}
return $ret;
}

// convertit une date Française en date MySQL
function MYSQL_FRDATE($frdate)
{
if (!CHECK_FRDATE($frdate)) return false;
$date=explode('/',$frdate);
$ret=$date[2].'-'.$date[1].'-'.$date[0];
return $ret;
}
?>


Dernière édition par Ozone Griffox le 04 Mai 2004, 09:24, édité 2 fois.
Avatar de l’utilisateur
Ozone Griffox
Griffox   Anthro
 
Messages: 3189
Inscription: 18 Fév 2003, 11:59
Localisation: France

Sur la Furmap: Ozone

Rôliste

Messagede Ozone Griffox » 04 Mai 2004, 07:52

CLASSES.PHP

<?php
// Acces à la base de donnée
class DB
{
var $db, $ok;

function DB($dbhost,$dbuser,$dbpass,$dbname)
{
$this->disconnect();
$this->db = mysql_connect($dbhost, $dbuser, $dbpass);
if (!$this->db || !mysql_select_db($dbname, $this->db)) die("database error!\n");
$this->ok=true;
}
function disconnect()
{
if ($this->db) mysql_close($this->db);
$this->ok=false;
}
function query($query)
{
if($this->ok) return mysql_query($query, $this->db);
}
}

// Gestion automatique des formulaires
class FORMS
{
function LISTS($name, $db, $text, $value, $query, $default)
{
$rec=$db->query($query);
$result=mysql_fetch_assoc($rec);
$ret='<select name="'.$name.'">'.LF;
while($result)
{
$ret.='<option';
if ($value) $ret.=' value="'.$result[$value].'"';
if ($result[$text]==$default or $result[$value]==$default) $ret.=' selected';
$ret.='>'.$result[$text].'</option>'.LF;
$result=mysql_fetch_assoc($rec);
}
$ret.='</select>'.LF;
return $ret;
}

function CHECKBOXES($name, $format, $db, $field_code, $text, $checked, $query)
{
$rec=$db->query($query);
$result=mysql_fetch_assoc($rec);
$ret='';
while($result)
{
$ret.='<input name="'.$name.$result[$field_code].'" type="checkbox"'.$checked[$result[$field_code]].'>&'.$result[$text].$format.LF;
$result=mysql_fetch_assoc($rec);
}
return $ret;
}
}

// Vues d'interfaçe à la base de donnée
class VIEWS
{
function ALLERGY()
{
$ret='SELECT * FROM ref_allergy ORDER BY all_lib';
return $ret;
}
function CHECK_CNT_ALLERGY($db, $contact, $field_code)
{
$query='SELECT * FROM cnt_allergy WHERE cal_k_contact='.$contact;
$rec=$db->query($query);
$result=mysql_fetch_assoc($rec);
while($result)
{
$ret[$result[$field_code]]=' checked';
$result=mysql_fetch_assoc($rec);
}
return $ret;
}
function COUNTRY()
{
return 'SELECT * FROM ref_country ORDER BY ctr_lib';
}
function GENDER()

{
return 'SELECT * FROM ref_gender ORDER BY gen_lib';
}
function PAY_TYPE()
{
return 'SELECT * FROM ref_pay_type ORDER BY pty_lib';
}
}

// Gestion du fichier Log
class LOGS
{
var $loghandle, $ok, $ln;

function open()
{
if (!$this->ok) $handle=fopen(LOGNAME, 'a');
if ($handle) {
$this->loghandle=$handle;
$this->ok=true;
$this->ln=true;
}
}
function write($var,$ln)
{
if (!$this->ok) $this->open();
if ($var and $this->ok) {
if (gettype($var)=='array') {
foreach($var as $str) $strlog.=$str.', ';
} else {
$strlog=$var;
}
if ($ln) $strlog.=LF;
fputs($this->loghandle, IIF($this->ln,date('[Y/m/d-h:m] ').$_SERVER['REMOTE_HOST'].' ','').$strlog);
$this->ln=$ln;
}
}
}

// Gestion des données des contacts
class CONTACTS
{
var $db_contact, $db_address, $db_cnt_allergy, $db_email, $db_memos, $db_paid;

function check_form($formpost)
{
if ($formpost['param_last_name']=='') $ERROR['last_name']='Le nom est requis';
if ($formpost['param_first_name']=='') $ERROR['first_name']='Le prénom est requis';
if ($formpost['param_address1']=='' and $formpost['param_address2']=='' and $formpost['param_address3']=='') $ERROR['address']="L'adresse est requise";
if ($formpost['param_zip']=='') $ERROR['zip']='Le code postal est requis';
if ($formpost['param_city']=='') $ERROR['city']='La ville est requise';
if ($formpost['param_country']=='') $ERROR['country']='Le pays est requis';
if ($formpost['param_email']=='' or strpos($formpost['param_email'],'@')==0 or strpos($formpost['param_email'],'.')==0) $ERROR['email']="Un email valide est requise";
if ($formpost['param_gender']=='') $ERROR['gender']='Le sexe est requis (ouch)';
if ($formpost['param_nick']=='') $ERROR['nick']='Le surnom est requis';
if ($formpost['param_password']=='') $ERROR['password']='Le mot de passe est requis';
if ($formpost['param_pay_type']=='') $ERROR['pay_type']='Le type de paiment est requis';
if (!CHECK_FRDATE($formpost['param_birthday']) or $formpost['param_birthday']=='01/01/1900') $ERROR['birthday']='La date de naissance est requise au bon format';
if (!CHECK_FRDATE($formpost['param_arrival'])) $ERROR['arrival']="La date d'arrivée est requis au bon format";
if (!CHECK_FRDATE($formpost['param_departure'])) $ERROR['departure']='La date de départ est requise au bon format';
return $ERROR;
}

function set_k_contact($k_contact)
{
$this->db_contact['K_CONTACT'] =$k_contact;
$this->db_address['ADR_K_CONTACT'] =$k_contact;
$this->db_email['EML_K_CONTACT'] =$k_contact;
$this->db_memos['MEM_K_CONTACT'] =$k_contact;
}

function set_from_form($db, $views, $formpost)
{
$ERROR=$this->check_form($formpost);
if (!$ERROR) {
$this->set_k_contact($formpost['K_CONTACT']);
$this->db_contact['CNT_K_CONVENTION'] =K_CONVENTION;
$this->db_contact['CNT_NICK'] =$formpost['param_nick'];
$this->db_contact['CNT_PASSWORD'] =crypt($formpost['param_password'],CRYPT_KEY);
$this->db_contact['CNT_LASTNAME'] =$formpost['param_last_name'];
$this->db_contact['CNT_FIRSTNAME'] =$formpost['param_first_name'];
$this->db_contact['CNT_BIRTHDAY'] =MYSQL_FRDATE($formpost['param_birthday']);
$this->db_contact['CNT_ARRIVAL'] =MYSQL_FRDATE($formpost['param_arrival']);
$this->db_contact['CNT_DEPARTURE'] =MYSQL_FRDATE($formpost['param_departure']);
$this->db_contact['CNT_K_GENDER'] =$formpost['param_gender'];
$this->db_contact['CNT_TOPAY'] =$formpost['param_topay'];
$this->db_contact['CNT_CREATE_DATE'] =date('Y-m-d');

$this->db_address['K_ADDRESS'] =NULL;
$this->db_address['ADR_LINE1'] =$formpost['param_address1'];
$this->db_address['ADR_LINE2'] =$formpost['param_address2'];
$this->db_address['ADR_LINE3'] =$formpost['param_address3'];
$this->db_address['ADR_ZIP'] =$formpost['param_zip'];
$this->db_address['ADR_CITY'] =$formpost['param_city'];
$this->db_address['ADR_PHONE'] =$formpost['param_phone'];
$this->db_address['ADR_K_COUNTRY'] =$formpost['param_country'];
$this->db_address['ADR_CREATE_DATE'] =date('Y-m-d');
$this->db_address['ADR_PREFERED'] =NULL;

$this->db_email['K_EMAIL'] =NULL;
$this->db_email['EML_EMAIL'] =$formpost['param_email'];
$this->db_email['EML_CREATE_DATE'] =date('Y-m-d');
$this->db_email['EML_PREFERED'] =NULL;

$this->db_memos['K_MEMOS'] =NULL;
$this->db_memos['MEM_CREATE_DATE'] =date('Y-m-d');
$this->db_memos['MEM_NOTES'] =str_replace(CRLF,LF,$formpost['param_user_comments']);
$this->db_memos['MEM_OBJECTS'] =str_replace(CRLF,LF,$formpost['param_user_objects']);
$this->db_memos['MEM_ACTIVITIES'] =str_replace(CRLF,LF,$formpost['param_user_activities']);

$this->$db_paid=NULL;
}
return $ERROR;
}

function insert($db, $table, $db_fields)
{
foreach ($db_fields as $field=>$value)
{
if (substr($field,0,2)!='K_') {
$fields.=$field.',';
$values.="'".$value."',";
}
}
$query='INSERT INTO '.$table.' ('.substr($fields,0,strlen($fields)-1).') VALUES ('.substr($values,0,strlen($values)-1).')';
if(!$db->query($query)) die("Erreur lors de l'insertion de données -> ".$table);
return mysql_insert_id();
}

function update($db, $table, $db_fields)
{
foreach ($db_fields as $field=>$value)
{
if (substr($field,0,2)!='K_') {
$fields.=$field."='".$value."',";
} else {
$where=$field."='".$value."',";
}
}
if ($where) {
$query='UPDATE '.$table.' SET '.substr($fields,0,strlen($fields)-1).' WHERE '.$where;
} else {
die('Erreur lors de la mise à jour, pas de clé -> '.$table);
}
if(!$db->query($query)) die('Erreur lors de la mise à jour de données -> '.$table);
}

function write($db)
{
$db->query('START TRANSACTION');
if (!$this->db_contact['K_CONTACT']) {
$this->set_k_contact( $this->insert($db,'contact',$this->db_contact) );
} else {
$this->update($db,'contact',$this->db_contact);;
}

if (!$this->db_address['K_ADDRESS']) {
$this->db_address['K_ADDRESS']=$this->insert($db,'address',$this->db_address);
} else {
$this->update($db,'address',$this->db_address);;
}

if (!$this->db_email['K_EMAIL']) {
$this->db_email['K_EMAIL']=$this->insert($db,'email',$this->db_email);
} else {
$this->update($db,'email',$this->db_email);;
}

if (!$this->db_memos['K_MEMOS']) {
$this->db_memos['K_MEMOS']=$this->insert($db,'memos',$this->db_memos);
} else {
$this->update($db,'memos',$this->db_memos);;
}
$db->query('COMMIT');
}
}
?>


Dernière édition par Ozone Griffox le 04 Mai 2004, 08:04, édité 1 fois.
Avatar de l’utilisateur
Ozone Griffox
Griffox   Anthro
 
Messages: 3189
Inscription: 18 Fév 2003, 11:59
Localisation: France

Sur la Furmap: Ozone

Rôliste

Messagede Ozone Griffox » 04 Mai 2004, 07:57

Bon faudra changer le mot de passe, j'ai copier/coller un peu trop vite ;)
Pas toujours pratique le renvoi vers la mailing list.
Rien de bien grave, de toute façon il n'y a rien d'interessant dans la base.
Avatar de l’utilisateur
Ozone Griffox
Griffox   Anthro
 
Messages: 3189
Inscription: 18 Fév 2003, 11:59
Localisation: France

Sur la Furmap: Ozone

Rôliste

Messagede Timduru » 04 Mai 2004, 17:31

oui, ca peut aider de pas poster les logins / pass.
J'ai pas regarde en detail, mais il faudrait que tu echappes les posts des forms,
et un check sur le contenu selon le type lors de la reception peut etre bien.

Mais bon poster le code a un petit groupe ferme est bien, pour conseil,
poster ca sur le forum meme si ca part d'une bonne intention c'est moyen, on ne lance pas un concour 100 euros pour celui qui nous hack non plus.
maintenant c'est dans les news en plus ..
Avatar de l’utilisateur
Timduru
Suricate   Anthro
A la retraite
 
Messages: 6210
Inscription: 07 Fév 2003, 22:48
Localisation: France

Sur la Furmap: Timduru

Fursuiter, sur la DB: Timduru
Vidéaste
Portfolio http://fursuit.timduru.org/Timduru/Timduru_Toony -->
      Page de l'utilisateur sur FurAffinity Page de l'utilisateur sur InkBunny Article WikiFur(EN) sur l'utilisateur Article WikiFur(FR) sur l'utilisateur Fursuits de l'utilisateur sur la fursuit database

Messagede Issarlk » 04 Mai 2004, 17:50

C'est pas désagréable comme code. Ca se laisse regarder.
Il y a pas de gros SELECT au milieu du HTML déjà.

Pas mal du tout.



Sinon je n'ai rien a ajouté à ce que Timduru a dit.
Avatar de l’utilisateur
Issarlk
Chat, Ratton laveur.  (Chatton laveur jaune.)   Anthro
 
Messages: 1967
Inscription: 16 Fév 2003, 00:07
Localisation: Oise

Dessinateur
Portfolio https://inkbunny.net/Issarlk -->

Messagede Timduru » 04 Mai 2004, 17:54

Issarlk a écrit:C'est pas désagréable comme code. Ca se laisse regarder.
Il y a pas de gros SELECT au milieu du HTML déjà.


Oui c'etait dans le contrat que les donnees / base soient separees du cote IHM quand meme ;)
Sinon apres on aurait ete oblige de garder ozone pour le maintenir ;)
Avatar de l’utilisateur
Timduru
Suricate   Anthro
A la retraite
 
Messages: 6210
Inscription: 07 Fév 2003, 22:48
Localisation: France

Sur la Furmap: Timduru

Fursuiter, sur la DB: Timduru
Vidéaste
Portfolio http://fursuit.timduru.org/Timduru/Timduru_Toony -->
      Page de l'utilisateur sur FurAffinity Page de l'utilisateur sur InkBunny Article WikiFur(EN) sur l'utilisateur Article WikiFur(FR) sur l'utilisateur Fursuits de l'utilisateur sur la fursuit database

Messagede Ozone Griffox » 04 Mai 2004, 22:54

Timduru a écrit:poster ca sur le forum meme si ca part d'une bonne intention c'est moyen, on ne lance pas un concour 100 euros pour celui qui nous hack non plus.
maintenant c'est dans les news en plus ..

Toujours aussi parano hein?
Rahlala, faut apprendre a faire confiance aux gens un peu.
En plus j'en connais certains qui sont intéressé par ce code.
De toute façon il n'est pas terminé et va beaucoup changer.

Je note codes echap et vérification des types.
Avatar de l’utilisateur
Ozone Griffox
Griffox   Anthro
 
Messages: 3189
Inscription: 18 Fév 2003, 11:59
Localisation: France

Sur la Furmap: Ozone

Rôliste

Messagede Timduru » 05 Mai 2004, 07:11

Pas question de paranoia
la question est de faire les choses correctement et de ne pas prendre de risque inutiles.
Comme tu dis si tu connais des personnes qui sont interessees par le code et bien le mieux aurait etre de l'envoyer a celles la seulement
Au sinon, poster un message disant que les personnes interessees et qui ont le temps de regarder peuvent te contacter pour demander le code.
par exemple.
Avatar de l’utilisateur
Timduru
Suricate   Anthro
A la retraite
 
Messages: 6210
Inscription: 07 Fév 2003, 22:48
Localisation: France

Sur la Furmap: Timduru

Fursuiter, sur la DB: Timduru
Vidéaste
Portfolio http://fursuit.timduru.org/Timduru/Timduru_Toony -->
      Page de l'utilisateur sur FurAffinity Page de l'utilisateur sur InkBunny Article WikiFur(EN) sur l'utilisateur Article WikiFur(FR) sur l'utilisateur Fursuits de l'utilisateur sur la fursuit database

Messagede Ozone Griffox » 05 Mai 2004, 08:10

En cherchant un peu j'ai trouvé ces sites sur la sécurité PHP:

Writing Secure PHP Code:
http://solidox.org/index.php?w=module:a ... view,id:11

What is crypt() and how does it work?
http://www.phpnoise.com/tutorials/3/1

Avec tous les changements que je vais effectuer dans le code + les Hash et l'encapsulation, ca devrait être très sécurisé. J'aime bien les défis :P
Avatar de l’utilisateur
Ozone Griffox
Griffox   Anthro
 
Messages: 3189
Inscription: 18 Fév 2003, 11:59
Localisation: France

Sur la Furmap: Ozone

Rôliste

Messagede cLx » 06 Mai 2004, 18:47

$db=new DB('localhost', '[...]', 'k[...]x', '[...]');


Héhé. Je l'aimais bien moi, ce mot de passe. :)
Avatar de l’utilisateur
cLx
Jaguar   Non Anthro
 
Messages: 931
Inscription: 11 Fév 2003, 18:16
Localisation: Lille

Sur la Furmap: cLx

Vidéaste
Portfolio http://clx.freeshell.org/portfolio.html -->

Messagede Ozone Griffox » 16 Mai 2004, 02:07

Bien, le site a énormement changé, les trous de sécurités ont été bouchés, terminé et en phase de test.

Les inscriptions seront ouvertes d'ici quelques jours (heures?).

Oh! Et j'aime toujours le PHP. :twisted:

:idea:
Avatar de l’utilisateur
Ozone Griffox
Griffox   Anthro
 
Messages: 3189
Inscription: 18 Fév 2003, 11:59
Localisation: France

Sur la Furmap: Ozone

Rôliste


Retourner vers Projets


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité