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>
Sécurité du site d'inscription FF (pour geeks)
Modérateurs: modérateurs, admins
12 messages
• Page 1 sur 1
Sécurité du site d'inscription FF (pour geeks)
Dernière édition par Ozone Griffox le 04 Mai 2004, 08:05, édité 2 fois.
-
Ozone Griffox - Griffox Anthro
- Messages: 3189
- Inscription: 18 Fév 2003, 11:59
- Localisation: France
Sur la Furmap: Ozone
Rôliste
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;
}
?>
<?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.
-
Ozone Griffox - Griffox Anthro
- Messages: 3189
- Inscription: 18 Fév 2003, 11:59
- Localisation: France
Sur la Furmap: Ozone
Rôliste
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');
}
}
?>
<?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.
-
Ozone Griffox - Griffox Anthro
- Messages: 3189
- Inscription: 18 Fév 2003, 11:59
- Localisation: France
Sur la Furmap: Ozone
Rôliste
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.
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.
-
Ozone Griffox - Griffox Anthro
- Messages: 3189
- Inscription: 18 Fév 2003, 11:59
- Localisation: France
Sur la Furmap: Ozone
Rôliste
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 ..
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 ..
-
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 -->
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.
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.
-
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 -->
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
-
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 -->
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.
-
Ozone Griffox - Griffox Anthro
- Messages: 3189
- Inscription: 18 Fév 2003, 11:59
- Localisation: France
Sur la Furmap: Ozone
Rôliste
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.
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.
-
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 -->
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
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
-
Ozone Griffox - Griffox Anthro
- Messages: 3189
- Inscription: 18 Fév 2003, 11:59
- Localisation: France
Sur la Furmap: Ozone
Rôliste
$db=new DB('localhost', '[...]', 'k[...]x', '[...]');
Héhé. Je l'aimais bien moi, ce mot de passe. :)
-
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 -->
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.
Les inscriptions seront ouvertes d'ici quelques jours (heures?).
Oh! Et j'aime toujours le PHP.
-
Ozone Griffox - Griffox Anthro
- Messages: 3189
- Inscription: 18 Fév 2003, 11:59
- Localisation: France
Sur la Furmap: Ozone
Rôliste
12 messages
• Page 1 sur 1
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité