Forums Webou.net - Hébergement gratuit et sans publicités avec PHP/MySQL

Programmation => PHP/MySQL - (x)HTML - ... => Discussion démarrée; par: nitro007 le 04 Novembre 2008, 02:52:45



Titre: SÉcurité formulaire
Posté par: nitro007 le 04 Novembre 2008, 02:52:45
Bonjour, sur mon site wii-dark, dans le forumulaire d'inscription, j'aimerais le sécurisé plus.
Par exemple, le login, pourrais-je interdire des pseudos bizarres comme ...()"" ou des mots choisis ?
Y-at-il une fonction aussi qui pourrrait changer du code en texte ? par exemple  interdire <textera></textera>.
Entouca voici le lien pour voir mon formulaire d'inscription de wii-dark (http://wii-dark.site40.net/inscription.php (http://wii-dark.site40.net/inscription.php))


Titre: Re: SÉcurité formulaire
Posté par: Drambam le 04 Novembre 2008, 10:19:25
Si tu veux vraiment interdire certains caractères en particulier, je pense judicieux d'utiliser des Expression régulières. Je crois qu'il y a de bons exemples sur le Site du zero, mais attention, c'est assez compliqué! A voir si d'autres façons sont possibles ...


Titre: Re: SÉcurité formulaire
Posté par: Arkhena le 04 Novembre 2008, 12:14:11
Effectivement, l'utilisation d'un contrôle javascript avec les expressions régulières est la solution la plus élégante. Ce n'est pas si compliqué que ça...

Voici la doc de l'objet regexp en js : http://www.w3schools.com/js/js_obj_regexp.asp (http://www.w3schools.com/js/js_obj_regexp.asp)


Titre: Re: SÉcurité formulaire
Posté par: nitro007 le 04 Novembre 2008, 14:16:22
J'avoue c'est pas mon fort les expressions régulières, y-a-til quelqu'un qui connait ca et qui pourrait interdire des >/"$% dans les formualires ?


Titre: Re: SÉcurité formulaire
Posté par: nitro007 le 04 Novembre 2008, 16:01:30
J'ai réussi a trouvé quelque chose, c'est-à-dire le saisie login est vérifié pour qui a pas des peudo bizarrs comme ,.-_.
Le code qui suit:
Code:
<?php
if (isset($_POST['login']))
{
$_POST['login'] = htmlspecialchars($_POST['login']); // On rend inoffensives les balises HTML que le visiteur a pu rentrer

    
if (preg_match('#^[a-zA-Z0-9]+$#'$_POST['login']))
{
$erreur='le login '.$_POST['login'].' est valide';
 else {
        
$erreur='Le login ' $_POST['login'] . ' n\'est pas valide, recommencez !';
    }
?>

Pouvez-vous m'aider a l'intégrer au code suivant:
Code:
<?php
// on teste si le visiteur a soumis le formulaire  
if (isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription') { 
   
// on teste l'existence de nos variables. On teste également si elles ne sont pas vides 
   
if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass'])) && (isset($_POST['pass_confirm']) && !empty($_POST['pass_confirm'])) && (isset($_POST['sexe']) && !empty($_POST['sexe'])) && (isset($_POST['captcha']) && !empty($_POST['captcha']))) { 
      
// on teste les deux mots de passe 
      
if ($_POST['pass'] != $_POST['pass_confirm']) { 
         
$erreur 'Les 2 mots de passe sont différents.'
      } 
      else { 
         
$base mysql_connect (''''''); 
         
mysql_select_db (''$base); 
         
         
// on recherche si ce login est déjà utilisé par un autre membre 
         
$sql 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'"'
         
$req mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
         
$data mysql_fetch_array($req); 
         
$login $_GET['login']; 
 
         if (
$data[0] == 0) { 
            
$sql 'INSERT INTO membre VALUES("", "'.mysql_escape_string($_POST['login']).'", "'.mysql_escape_string($_POST['jeuxprefere']).'",  "'.md5(mysql_escape_string($_POST['pass'])).'","'.mysql_escape_string($_POST['sexe']).'", "'.mysql_escape_string($_POST['url_avatar']).'", "' time() . '", "'.mysql_escape_string($_POST['site_web']).'", "'.mysql_escape_string($_POST['nb_points']).'", "'.mysql_escape_string($_POST['rang']).'")'
            
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error()); 
 
         
session_start(); 
         
$_SESSION['login'] = $_POST['login']; 
         
$_SESSION['pass'] = $_POST['pass'];
         
setcookie('login'''.$_SESSION['login'].''time()+30 24 3600);
         
setcookie('pass'''.$_SESSION['pass'].''time()+30 24 3600);
         
header('Location: verifmembre.php'); 
         exit(); 
         }

         else { 
            
$erreur 'Un membre possède déjà ce login.'
         } 
      } 
   } 
   else { 
      
$erreur 'Au moins un des champs est vide.'
   }  
  }
?>


Titre: Re: SÉcurité formulaire
Posté par: K@cem le 04 Novembre 2008, 19:48:23
Tu as essayé de le faire ?
Tu coince ou ?
Sinon évite stp d'écrire avec de gros caractères ...


Titre: Re: SÉcurité formulaire
Posté par: nitro007 le 04 Novembre 2008, 20:19:30
oui mais ca marche pas, ya trop de if et de else.
Svp aide-moi


Titre: Re: SÉcurité formulaire
Posté par: Arkhena le 05 Novembre 2008, 10:16:12
Salut,

Je pense qu'il n'est absolument pas judicieux de faire cette vérification en php. En effet, cela encombre le serveur pour rien. Une vérification de syntaxe sur une entrée se fait sur le client donc en js...

Ton expression régulière est indiquée dans le code : ^[a-zA-Z0-9]+$, voici son explication :
- ^ signifie qu'on est en début de chaîne
- $ signifie qu'on est en fin de chaîne
Donc ton expression régulière doit fonctionner sur toute la chaîne que tu testes
- [a-zA-A0-9] signifie que seuls les lettres de a à z, de A à Z et les chiffres (de 0 à 9) sont autorisés
- + signifie qu'il peut y avoir de 1 à plusieurs caractères

Citation
<script type="text/javascript">
function verifLogin()
{
    var patt1=new RegExp("^[a-zA-Z0-9]+$");
    if (!patt1.exec(document.nomduform.nomduchamplogin))
        alert('Le login est incorrect. Les caractères spéciaux ne sont pas autorisés.');
    else
        document.nomduform.submit;
}
</script>

Attention, ce script n'autorise pas les accents pour les logins... A toi de le modifier si tu souhaites qu'un login puisse contenir des accents.

Cordialement,

Arkhena


Titre: Re: SÉcurité formulaire
Posté par: nitro007 le 05 Novembre 2008, 13:57:42
Ou dois metrre ce script dans ma page


Titre: Re: SÉcurité formulaire
Posté par: Arkhena le 05 Novembre 2008, 18:17:31
La fonction doit être appelée au clic du bouton de validation du formulaire. Je te laisse effectuer des recherches sur le net sur l'utilisation des évènements pour appeler des fonctions en js.

Si la question portait plus sur le "où est-ce qu'on met du javascript dans une page html", la réponse est la même : cherche sur le net!


Titre: Re: SÉcurité formulaire
Posté par: nitro007 le 05 Novembre 2008, 18:26:55
Ton explication ma servit a rien, j'ai trouvé ou mettre le regex en PHP dans ma page !!!! >:(


Titre: Re: SÉcurité formulaire
Posté par: Drambam le 05 Novembre 2008, 19:16:02
Même pas un merci... J'aurais pas apprécié...


Titre: Re: SÉcurité formulaire
Posté par: MIkE le 05 Novembre 2008, 19:19:14
Moi je dis merci Arkhena, parce que cette explication servira un jour à quelqu'un (qui utilise la recherche du forum ;) ).


Titre: Re: SÉcurité formulaire
Posté par: K@cem le 05 Novembre 2008, 22:12:11
Heureusement que je n'avais pas fais la regex au début, j'ai préféré d'abord savoir s'il est sérieux ou pas ce qui n'est pas le cas  :(
Sinon par rapport à ta réponse Arkhena, je ne suis pas d'accord. On peut très facilement contourner la vérification du pseudo en JS, de plus en PHP ce n'est pas si lourd que ça quand même ;)
k@cem

Edit : J'ai rien dit par rapport au code d'Arkhena  ;D


Titre: Re: SÉcurité formulaire
Posté par: Arkhena le 06 Novembre 2008, 10:29:30
Ton explication ma servit a rien, j'ai trouvé ou mettre le regex en PHP dans ma page !!!! >:(

ça m'apprendra à avoir voulu t'aider... Ne t'inquiète pas, on ne m'y reprendra plus!


Titre: Re: SÉcurité formulaire
Posté par: Micka le 06 Novembre 2008, 22:39:50
Nitro je trouve que c'est pas la première fois que tu envoies balader les gens, ils sont gentils, ils t'aident bénévolement, si tu n'as pas l'esprit de recevoir de l'aide et remercier c'est grave ...