Formulaire PHP et sécurité

WRInaute impliqué
Bonjour,

Je voudrais savoir quelles sont les principales règles en matière de sécurité lorsque l'on met en place sur son site un formulaire qui permet à l'utilisateur de rentrer des infos qui seront automatiquement ajouté dans la BDD ?

Et surtout quelles sont les techniques qui permettent de parer à cela?

Merci beaucoup.
 
WRInaute discret
bien recupérer les variables avec du $_POST['mavar'] (pas de register global on ... etc) ...

vérifier et reformater les données avant l'insertion en base ...

mais bon ... il y a surement d'autres choses ...
 
WRInaute discret
arsenick a dit:
bien recupérer les variables avec du $_POST['mavar'] (pas de register global on ... etc) ...

vérifier et reformater les données avant l'insertion en base ...

mais bon ... il y a surement d'autres choses ...

lol il y a aucune sécurité a faire cela

il fau supprimer les entities, purger le html javascript et autre et ajouter des \
 
WRInaute discret
Perso dans mon formulaire j'ajoute un :
<input type="hidden" name="sessionid" value=".................";

Ca permet de savoir si le type est bien passé par la page du formulaire au lieu d'utilisé un automatisme qui poste directement les données. Sinon tu peux aussi ajouter un referer unique pour que l'insertion ce fasse.

Pour le reste déjà t'a qu'a faire de bon formulaire et tu rique pas grand chose. Genre téléphone = que des chiffres (tu peux bloquer les lettres a la saisie) etc..

Ensuite tu utilise $_POST
Tu les insere avec htmlentities
Tu teste toi même avec des grosses connerie qui te font peur
Tu sauve l'ip etc.
 
WRInaute discret
raspoutine59 a dit:
Perso dans mon formulaire j'ajoute un :
<input type="hidden" name="sessionid" value=".................";

Ca permet de savoir si le type est bien passé par la page du formulaire au lieu d'utilisé un automatisme qui poste directement les données. Sinon tu peux aussi ajouter un referer unique pour que l'insertion ce fasse.

Pour le reste déjà t'a qu'a faire de bon formulaire et tu rique pas grand chose. Genre téléphone = que des chiffres (tu peux bloquer les lettres a la saisie) etc..

Ensuite tu utilise $_POST
Tu les insere avec htmlentities
Tu teste toi même avec des grosses connerie qui te font peur
Tu sauve l'ip etc.

aucune sécurité avec les champs hidden et une session, un coup de curl pour lire la session et ensuite simulation du post en envoyant le champ caché.
 
WRInaute accro
cloacking a dit:
Bonjour,

Je voudrais savoir quelles sont les principales règles en matière de sécurité lorsque l'on met en place sur son site un formulaire qui permet à l'utilisateur de rentrer des infos qui seront automatiquement ajouté dans la BDD ?

Et surtout quelles sont les techniques qui permettent de parer à cela?

Merci beaucoup.

Fais une recherche aussi sur la faille include en PHP
Ex. : http://www.zataz.com/images/documentati ... 823d1f.pdf
Fais une recherche sur les injections SQL en PHP
Ex. : http://www.phpsecure.info/v2/article/InjSql.php
 
WRInaute discret
Bah si on part du principe que le hacker n'est pas une bite, t'aura beau faire dancer la carioca a ton serveur si il a envie de te faire chier il y a arrivera. Mais bon ! La on parle de formulaire seulement... Vaut mieux trop que pas assez
 
WRInaute discret
raspoutine59 a dit:
Bah si on part du principe que le hacker n'est pas une bite, t'aura beau faire dancer la carioca a ton serveur si il a envie de te faire chier il y a arrivera. Mais bon ! La on parle de formulaire seulement... Vaut mieux trop que pas assez

non non..un bon dev on rentre pas...crois nous faisons du paiement securisé et on subi des attaques
 
WRInaute occasionnel
Je crois qu'on peut aussi faire des interdictions de balises ajoutées par le form : comme par exemple <script><iframe><div> etc.

et d'ailleur, je cherche cette fonction en php SVP
 
WRInaute impliqué
pour prevenir les inscriptions automatiques je vois rien d'autre qu'un code sous forme d'image a retranscrire comme on le voit un peu partout desormais.

tu devrais aussi bloquer une IP qui soumet a repetition et a une frequence trop elevee (mais ca, ca peut meme etre valable pour tout le site)

sinon, comme ca a ete dit, n'utiliser que $_POST pour recuperer les donnees et les reformater avec un strip_tags ou html_entities directement.

autre chose qui peut servir si tu utilises des sessions, pour eviter le vol de session, apres chaque session_start() :

if ($_SESSION['checkHost'] != md5(SECURITY_CODE . get_ip() . session_id()))
{
session_regenerate_id();
session_unset();
$_SESSION['checkHost'] = md5(SECURITY_CODE . get_ip() . session_id());
}

ou SECURITY_CODE est une chaine de caractere de ton choix ; je sais je suis parano mais bon, c bien d'avoir un truc comme ca, j'ai remarque par exemple que si t'as des adsenses sur ta page, et le sessid qui traine dans l'url le bot de adsense se connecte a la page en volant le sessid, et parfois ca peut foutre un peu le boxon :)
 
WRInaute accro
scores a dit:
Je crois qu'on peut aussi faire des interdictions de balises ajoutées par le form : comme par exemple <script><iframe><div> etc.

et d'ailleur, je cherche cette fonction en php SVP

Faut aller voir dans la doc pour htmlentities et html_entity_decode. Là, tu as de l'info pour manipuler la table des symboles utilisée par html_entities et html_entity_decode.

Je ne saurais pas t'aider plus que cela mais je pense que c'est la bonne piste.

Edit : regarde http://be.php.net/manual/fr/function.ge ... -table.php
 
WRInaute accro
Il faut aussi désactiver les magic quotes (ca t'evitera plein de mauvaise surprises):
dans .htaccess:
php_value magic_quotes_gpc 0

Et penser à mettre un addslashes à TOUS tes champs qui vont etre enregistrés dans la DB.
 
WRInaute impliqué
John Gallet, le modérateur de fr.comp.lang.php, a mis en ligne une doc sur PHP et la sécurité, j'ai plus l'adresse sous la main, mais googe groups t'aidera.
 
WRInaute impliqué
Merci à tous de vos réponses, je répond pas à chaque post mais je me rensigne sur ce que vous dites.

Sachant que mon formulaire ne sera pas compliqué, juste nom, adresse, mail et telephone ....
Mais je souhaite quand même éviter que des gens aient accés à ces donnés ou qu'il m'injecte n'importe quoi.
 
WRInaute impliqué
Sachant que mon formulaire ne sera pas compliqué, juste nom, adresse, mail et telephone ....

Ty vérifie la cohérence des données, ça évitera déjà pas mal de problèmes:

- un nom, juste des lettres, espaces, tiret et apostrophe
- pareil pour adresse en ajoutant les chiffres
- vérifier la validiter de l'adresse mail etc ...

AU moment de rentrer les données tu fais un mysql_real_escape_string

Quand tu reprends les données pour les afficher, un coup de htmlentities
 
Discussions similaires
Haut