Comment enregistrez vous concrètement vos données en bd?
19 messages • Page 1 sur 2 • 1, 2
Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics
Comment enregistrez vous concrètement vos données en bd?
Bonjour,
Je patauge fréquemment dans le faite de pouvoir enregistrer en bd des données venant d'un formulaire tout en évitant les injections, les script à la con qui redirige vers un autre site, les slachs en trop, etc ..etc...
Supposons un simple champ texte:
Coté php:
Concrètement, comment faite vous pour que ce soit impeccable à l'insertion comme à l'affichage ?
Merci
Je patauge fréquemment dans le faite de pouvoir enregistrer en bd des données venant d'un formulaire tout en évitant les injections, les script à la con qui redirige vers un autre site, les slachs en trop, etc ..etc...
Supposons un simple champ texte:
- Code: Tout sélectionner
<form action="" method="post">
<input name="champ1" size="10" type="text">
<input name="Valider" value="Valider" type="submit">
</form>
Coté php:
- Code: Tout sélectionner
<?php
//on verifie qu'il y a bien eu l'action de poster
if(isset($_POST["Valider"]))
{
// on vérifie si le champ est vide
if(empty($_POST["champ1"])){
echo 'blablab';
}
else
{
//on attribut une variable et on évite les injections
$lechamp2 = isset($_POST["champ1"]) ? mysql_real_escape_string($_POST["champ1"]) : '';
***Ici vous faites quoi pour éviter toutes les saloperie,script,. ..***
//on se connecte et on insère les données en bd
include("data_bd.php");
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
mysql_select_db("$nom_de_la_base") or die('Impossible de sélectionner une base de donnée. Assurez vous d\'avoir correctement remplit les données du fichier data_bd.php.');
$result = mysql_query(" INSERT INTO monchamp VALUES(
'',
'$lechamp2'
)");
mysql_close();
}
}
?>
Concrètement, comment faite vous pour que ce soit impeccable à l'insertion comme à l'affichage ?
Merci
-

SuperCureuil - WRInaute passionné

- Messages: 662
- Inscription: Ven Mar 09, 2007 9:44
Salut Tryan,
htmlentities ou htmlspecialchars ?!
Généralement ça suffit à neutraliser les éventuelles saloperies qu'un vicieux tenterait de faire passer. Du moins à mon niveau
@+
supercureuil
htmlentities ou htmlspecialchars ?!
Généralement ça suffit à neutraliser les éventuelles saloperies qu'un vicieux tenterait de faire passer. Du moins à mon niveau
@+
supercureuil
Salut,
J'utilise un framework maison avec PDO et htmlpurifier
comme julienr : "fini d'écrire les insert à la main copier coller le nom des champs ajouter mysql_real_escape_string"

J'utilise un framework maison avec PDO et htmlpurifier
comme julienr : "fini d'écrire les insert à la main copier coller le nom des champs ajouter mysql_real_escape_string"
-

SuperCureuil - WRInaute passionné

- Messages: 662
- Inscription: Ven Mar 09, 2007 9:44
J'utilise un framework maison avec PDO et htmlpurifier
comme julienr : "fini d'écrire les insert à la main copier coller le nom des champs ajouter mysql_real_escape_string"
Je bénis le jour où j'en serai à ça
Salut,
Pour moi ce sera pour les champs textes :
htmlentities()
strip_tags()
mysql_real_escape_string()
et vérification de la forme des adresses email s'il y a lieu (fonction récupérée de myphpannuaire).
Pour les images et les vidéos un paramétrage apache du serveur.
Pour moi ce sera pour les champs textes :
htmlentities()
strip_tags()
mysql_real_escape_string()
et vérification de la forme des adresses email s'il y a lieu (fonction récupérée de myphpannuaire).
Pour les images et les vidéos un paramétrage apache du serveur.
Merci de vos réponses
Donc si on fait:
avant enregistrement, c'est suffisant ?
Et en sortie pour l'affichage, on fait un html_entity_decode() sur chaque variable et rien de plus ?
Donc si on fait:
- Code: Tout sélectionner
//on attribut une variable
$lechamp2 = isset($_POST["champ1"]) ? htmlentities($_POST["champ1"]) : '';
//on supprime les balises HTML et PHP
$lechamp2 = strip_tags ($lechamp2);
//on évite les injections
$lechamp2 = mysql_real_escape_string($lechamp2);
....
avant enregistrement, c'est suffisant ?
Et en sortie pour l'affichage, on fait un html_entity_decode() sur chaque variable et rien de plus ?
J'utilise aussi un framework maison qui utilise PDO (d'ailleurs auparavant ce framework avait une classe qui faisait exactement la même chose via l'extension mysql).
Par contre je génère moi même les INSERT et autres requêtes, n'ayant absolument pas confiance dans les outils "automatisés" générant du SQL.
Donc "concrètement", ça donne chez moi :
Donc pas de strip_tags, pas de htmlspecialchars ni htmlentities, pas de mysql_real_escape_string, pas de addslashes ni de stripslashes, etc.
Si je dis "n'importe quoi !", tu t'offusques ?
MySQL n'a absolument pas besoin qu'on lui colle du HTML dans le bec... encore moins si c'est pour le décoder à la sortie.
Le seul (petit) intérêt de faire du htmlspecialchars (ou htmlentities) lors de l'insertion, c'est pour des besoins de performance : ça évite de le faire sans arrêt à l'affichage. Mais ça a pas mal d'effets de bord pourris (chaines mal tronquées, occupation de plus de place, réutilisation des données plus complexe, etc).
Par contre je génère moi même les INSERT et autres requêtes, n'ayant absolument pas confiance dans les outils "automatisés" générant du SQL.
Donc "concrètement", ça donne chez moi :
- Code: Tout sélectionner
$query = "insert into maTable ( champ1, champ2, champ3 )
values ( :champ1, :champ2, :champ3 )";
$params = array(
'champ1' => $variableA,
'champ2' => $variableB,
'champ3' => $variableC,
);
$db->exec( $query, $params );
Donc pas de strip_tags, pas de htmlspecialchars ni htmlentities, pas de mysql_real_escape_string, pas de addslashes ni de stripslashes, etc.
Et en sortie pour l'affichage, on fait un html_entity_decode() sur chaque variable et rien de plus ?
Si je dis "n'importe quoi !", tu t'offusques ?
MySQL n'a absolument pas besoin qu'on lui colle du HTML dans le bec... encore moins si c'est pour le décoder à la sortie.
Le seul (petit) intérêt de faire du htmlspecialchars (ou htmlentities) lors de l'insertion, c'est pour des besoins de performance : ça évite de le faire sans arrêt à l'affichage. Mais ça a pas mal d'effets de bord pourris (chaines mal tronquées, occupation de plus de place, réutilisation des données plus complexe, etc).
Bool a écrit:Si je dis "n'importe quoi !", tu t'offusques ?
^^ nan, par contre j'ai déjà un peut de mal avec php de base alors quand on me parle de "framework maison qui utilise PDO", la j'ai mal au crane ^^!
Je préférerais rester sur du code php de "base" simple et fonctionnelle pour le moment .. du coup:
- Code: Tout sélectionner
//on attribut une variable
$lechamp2 = isset($_POST["champ1"]) ? htmlentities($_POST["champ1"]) : '';
//on supprime les balises HTML et PHP
$lechamp2 = strip_tags ($lechamp2);
//on évite les injections
$lechamp2 = mysql_real_escape_string($lechamp2);
....
..c'est bon et suffisant ou pas ?
Merci
Pour moi à l'ancienne avec du PHP 4 ça donnerait plutôt : (sachant que le strip_tags est ici complètement facultatif)
Et à l'affichage, uniquement pour du HTML, tu fais :
ou selon le charset :
Pour ce qui est de l'utilisation de Framework ou non, tout dépend si le but est d'apprendre les rouages de PHP de A à Z ou bien de produire un site.
Le framework se charge d'éviter beaucoup de boulettes que tu pourrais faire par toi même, et te fait généralement gagner du temps sur la durée de développement.
De plus pour moi le développement grâce à un framework se doit d'être plus simple qu'un développement sans.
- Code: Tout sélectionner
// on attribut une variable
$lechamp2 = isset($_POST['champ1']) ? strip_tags( $_POST['champ1'] ) : '';
// on évite les injections
$lechamp2 = mysql_real_escape_string($lechamp2, $handleDeLaConnexion);
Et à l'affichage, uniquement pour du HTML, tu fais :
- Code: Tout sélectionner
echo htmlspecialchars( $tonChamp );
ou selon le charset :
- Code: Tout sélectionner
echo htmlentities( $tonChamp );
Pour ce qui est de l'utilisation de Framework ou non, tout dépend si le but est d'apprendre les rouages de PHP de A à Z ou bien de produire un site.
Le framework se charge d'éviter beaucoup de boulettes que tu pourrais faire par toi même, et te fait généralement gagner du temps sur la durée de développement.
De plus pour moi le développement grâce à un framework se doit d'être plus simple qu'un développement sans.
-

SuperCureuil - WRInaute passionné

- Messages: 662
- Inscription: Ven Mar 09, 2007 9:44
.Pour ce qui est de l'utilisation de Framework ou non, tout dépend si le but est d'apprendre les rouages de PHP de A à Z ou bien de produire un site
Perso j'aimerais d'abord maîtriser le PHP de A à Z, même si je saute parfois certaines lettres
Merci, Bool, pour tes conseils avisés qui sont toujours de bons repères !
@Bool : je suis d'accord mais généralement t'as beaucoup plus de fichiers susceptibles de te foutre la merde, tout dépend, selon moi, de l'utilité que tu en as.
De plus t'est toujours tributaire du développeur puisque le code n'est pas accessible.
@tryan : Pour les fonctions à utiliser du type de données qui doivent être traitées exemple à l'insertion et à la recherche tu n'utilises pas les mêmes, etc.
Si c'est pour ton annuaire effectivement le code de Bool est largement suffisant s'agissant de l'enregistrement des données (exemple soumission de site) et pour la page de recherche htmlentities() me semble tout indiqué à la récupération des variables.
@+
De plus t'est toujours tributaire du développeur puisque le code n'est pas accessible.
@tryan : Pour les fonctions à utiliser du type de données qui doivent être traitées exemple à l'insertion et à la recherche tu n'utilises pas les mêmes, etc.
Si c'est pour ton annuaire effectivement le code de Bool est largement suffisant s'agissant de l'enregistrement des données (exemple soumission de site) et pour la page de recherche htmlentities() me semble tout indiqué à la récupération des variables.
@+
Bool a écrit:Pour ce qui est de l'utilisation de Framework ou non, tout dépend si le but est d'apprendre les rouages de PHP de A à Z ou bien de produire un site.
Les 2. Je veux avant tout produire un site et pour sa il me faut php . En gros "j'apprends" au fur et à mesure de mes besoins.
serval2a: Non ce n'est pas pour mon -www. Je construit un news site dont le formulaire comporte une cinquantaines de champs contenant soit des chiffres, soit des lettres, soit les 2 en même temps,soit des dates ... et le tout ouvert au public .. d'où mes questions sur la sécurité et méthode d'enregistrement en bd ^^, j'ai pas envie de me retrouver avec des pages qui ne fonctionne plus à cause de bout code à la con et autre
A la finale et si j'ai bien comprit, seul mysql_real_escape_string() est nécessaire avant l'enregistrement en bd.
Merci de vos réponses
Bonjour,
Ce n'est suffisant que pour les failles d'injection SQL, pour les failles CSS t'as les autres notamment strip_tags (qui permet d'autoriser quelques bouts de code, une whitelist) ou encore htmlspecialchars, htmlentities, et l'astuce nl2br pour empêcher les injections mail, etc, etc.
Ou encore leurs frameworks tous prêts ^^.
Après si dans tes 50 champs t'as un champ d'upload faut encore empêcher l'upload de fichiers malveillants (ça c'est le pire, amha).
@+
Ce n'est suffisant que pour les failles d'injection SQL, pour les failles CSS t'as les autres notamment strip_tags (qui permet d'autoriser quelques bouts de code, une whitelist) ou encore htmlspecialchars, htmlentities, et l'astuce nl2br pour empêcher les injections mail, etc, etc.
Ou encore leurs frameworks tous prêts ^^.
Après si dans tes 50 champs t'as un champ d'upload faut encore empêcher l'upload de fichiers malveillants (ça c'est le pire, amha).
@+
19 messages • Page 1 sur 2 • 1, 2
Formation recommandée sur ce thème :
Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.
Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.
Lectures recommandées sur ce thème :
- Les contenus de Twitter indexés dans Google
- Linkbait et linkbaiting : explications en français
- Nouvelle version de GoogleStats : v1.1
- Algorithme de détection du link spam de masse
- La recherche locale Google avec BMW ConnectedDrive
- Firefox et son projet de mesure de trafic des sites web
- Calculer l'indice de co-occurrence et le ratio E/F
- Début du Full Crawl
- Google commence à indexer les formulaires
- Utilisation des données WHOIS par Google
- concretement ?
- Vendre un domaine : Concrètement ?
- l'url rewriting concrètement
- Concretement, le cpc AdWords qui s'envole...
- Concretement : 100 Dollars par cheque....
- Comment exploiter les données robostats ?
- Comment optimiser ma table enregistrant plusieurs données
- Serveur Freya SQL Comment interroger la base de données?
- Serveur dédié : comment gerer des Tera octets de données?
- Comment modifier les données de son site dans l'annuR WRI ?
- rapport Adsense Données d'ensemble / Données à analyser
- Adsense : Données d'ensemble et Données à analyser
- importation de données dans base de données
- Données d'ensemble // Données à analyser
- Analyse de positionnement sur les data centers de Google
Cet outil vous permet d'afficher sur une seule page les résultats Google effectués sur de nombreux data centers (centres de données). - Calculer l'indice de co-occurrence
Cet outil vous permet de calculer l'indice de co-occurrence de 2 ou 3 termes, ainsi que le ratio E/F. L'indice de co-occurrence mesure le relation entre les termes : plus cet indice est élevé, plus les termes sont reliés. Concrètement, plus l'indice est élevé, plus il est fréquent de trouver des documents qui contiennent les différents termes.
Qui est en ligne
Utilisateurs parcourant ce forum: ortolojf et 2 invités







le forum