Securite PHP/SQL
38 messages
• Page 1 sur 3 • 1, 2, 3
-

user2home - WRInaute discret

- Messages: 228
- Inscription: 19 Déc 2007
Securite PHP/SQL
Salutations à tous, dans le cadre d'un projet pour mes études je créer un site étant relativement novice en sécurité j'aurai aimé savoir si mes codes sont "sécurisés".
J'utilise ce code pour rendre dynamique le changement de page sur le site, il n'est pour le moment pas en ligne je test en local, j'ai volontairement changé le nom des variables, logs et autres donc ne vous étonnez pas de certains noms
Merci à ceux qui prendront le temps de me lire !
Cordialement
PS: Je précise que je suis étudiant donc si mon code vous parait archaïque c'est que j'ai appris, vos conseils seront précieux pour améliorer celui ci
Mon formulaire avec ma page d'identification vient compléter la partie " base de donnée"
à ceci le formulaire d'identification :
Avec la page action d'identification :
Et la page deconnection :
J'utilise ce code pour rendre dynamique le changement de page sur le site, il n'est pour le moment pas en ligne je test en local, j'ai volontairement changé le nom des variables, logs et autres donc ne vous étonnez pas de certains noms
Merci à ceux qui prendront le temps de me lire !
Cordialement
PS: Je précise que je suis étudiant donc si mon code vous parait archaïque c'est que j'ai appris, vos conseils seront précieux pour améliorer celui ci
- Code: Tout sélectionner
if (!isset($_GET["page"]))
{
include ("content/content.php");
}
else
{
include ("content/" . $_GET["page"] . ".php ");
if (isset($_POST["id"]))
{
$_SESSION['id'] = $_POST["id"];
}
}
Mon formulaire avec ma page d'identification vient compléter la partie " base de donnée"
- Code: Tout sélectionner
<?php
if (!isset($_POST['nomcarte'])) {
$nomcarte = 'NULL';
} else {
$nomcarte = $_POST['nomcarte'];
}
if (!isset($_POST['qualite'])) {
$qualite = 'NULL';
} else {
$qualite = $_POST['qualite'];
}
if (!isset($_POST['manablanc'])) {
$manablanc = 'NULL';
} else {
$manablanc = $_POST['manablanc'];
}
if (!isset($_POST['manableu'])) {
$manableu = 'NULL';
} else {
$manableu = $_POST['manableu'];
}
if (!isset($_POST['mananoir'])) {
$mananoir = 'NULL';
} else {
$mananoir = $_POST['mananoir'];
}
if (!isset($_POST['manarouge'])) {
$manarouge = 'NULL';
} else {
$manarouge = $_POST['manarouge'];
}
if (!isset($_POST['manavert'])) {
$manavert = 'NULL';
} else {
$manavert = $_POST['manavert'];
}
if (!isset($_POST['manaincolore'])) {
$manaincolore = 'NULL';
} else {
$manaincolore = $_POST['manaincolore'];
}
if (!isset($_POST['genre'])) {
$genre = 'NULL';
} else {
$genre = $_POST['genre'];
}
if (!isset($_POST['lien'])) {
$lien = 'NULL';
} else {
$lien = $_POST['lien'];
}
if (!isset($_POST['image'])) {
$image = 'NULL';
} else {
$image = $_POST['image'];
}
include ("../cfg/connect_sql.php");
$textSQL = "INSERT INTO caras
(id, nomcarte, qualite, manablanc, manableu, mananoir, manarouge, manavert, manaincolore, genre, lien, image)
VALUES
('', '$nomcarte', '$qualite', '$manablanc', '$manableu', '$mananoir', '$manarouge', '$manavert', '$manaincolore', '$genre', '$lien', '$image')";
mysql_query($textSQL);
mysql_close();
header('location:../../index.php?page=lapagedelenfer');
?>
à ceci le formulaire d'identification :
- Code: Tout sélectionner
<form action="index.php?page=action/action_identification" method=POST>
<input type="text" name="login" value="Login"></input>
<input type="password" name="pwd" value="Mot de pass"></input>
<input type="submit" value="Connexion">
<INPUT TYPE="reset" NAME="nom" VALUE="Annuler">
</form>
Avec la page action d'identification :
- Code: Tout sélectionner
<?php
$connexion = mysql_connect("localhost","login","motdepassedesql");
if (!$connexion)
{
die('Connexion impossible : ' . mysql_error());
}
mysql_select_db("dblocal", $connexion);
$login =$_POST['login'];
$pwd=$_POST['pwd'];
$sql = "SELECT id, login, mdp FROM compte WHERE login='" . $login . "' AND mdp='" . $pwd . "';";
$resultat = mysql_query($sql);
$ligne = mysql_fetch_array($resultat, MYSQL_ASSOC);
$login_valide = $ligne['login'];
$pwd_valide = $ligne['mdp'];
if (isset($_POST['login']) && isset($_POST['pwd'])) {
if ($login_valide == $login && $pwd_valide == $pwd) {
session_start ();
$_SESSION['login'] = $_POST['login'];
$_SESSION['pwd'] = $_POST['pwd'];
$_SESSION['id'] = $ligne['id'];
$_SESSION['auth'] = "ok";
header("Location: index.php?page=raremagic");
}
else {
echo 'Erreur de login';
}
}
else {
echo 'Connexion impossible';
}
?
Et la page deconnection :
- Code: Tout sélectionner
<?php
session_start();
unset($_SESSION);
session_destroy();
header("Location: index.php?page=lapagedelenfer");
?>
-

user2home - WRInaute discret

- Messages: 228
- Inscription: 19 Déc 2007
Re: Securite PHP/SQL
spout a écrit:Belles failles dans ton formulaire, tu fais juste des tests sur isset() et aucun contrôle des données, et pas non plus de mysql_real_escape_string()
Tu veux dire des test via expressions régulières ?
Après recherche, j'ai appliqué mysql_real_escape_string() pour contrôler les entrées sur mes $_POST, $_GET c'est bien de cela que tu parlais ?
-

Blount - WRInaute occasionnel

- Messages: 430
- Inscription: 18 Nov 2010
Re: Securite PHP/SQL
Zecat a écrit:Je suis pas expert en secu ... phprank1 .. mais il me semble que le minimum syndical serait deaj d'ajouter un
strip_tags
sur tes $_POST
Et pourquoi ?
Si je veux mon pseudo de ce style : "<tag pseudo="Blount" />", j'en ai bien le droit
Je me demande toujours pourquoi vous vous butez à toujours vouloir utiliser ces fonctions pour « protéger » (en fait, ça ne protège rien du tout). Les données entrées par l'utilisateur ne doivent pas être modifiées.
Bien entendu, il ne faut pas confondre « protéger » avec « interdire », ce qui n'est pas du tout pareil.
Par exemple, je ne veux pas de majuscule dans le texte entré par l'utilisateur. En théorie, il faudrait l'avertir de son erreur :
- Code: Tout sélectionner
if ($_POST['pseudo'] != mb_strtolower($_POST['pseudo'])) {
$erreur['pseudo'] = 'Attention, vous ne pouvez pas utiliser des majuscules dans votre pseudo.';
}
C'est un exemple.
Pour revenir au sujet, une seule fonction doit être utilisée : mysql_real_escape_string (et oubliez les htmlentities, htmlspecialchars, etc. avant enregistrement en base de données).
-

Blount - WRInaute occasionnel

- Messages: 430
- Inscription: 18 Nov 2010
Re: Securite PHP/SQL
Parce que ces fonctions sont à faire à l'affichage et non à l'enregistrement des données. J'ai pour habitude de conserver les données tel que l'utilisateur les a entrés. Si je veux qu'il les entre dans un certain format, je lui indique et contrôle ce qu'il entre (comme une adresse E-Mail).
Il n'est pas à exclure que les données de la base soit traitées exclusivement par PHP. Faire des "html_entity_decode" (par exemple) dans un autre langage pourrait devenir très vite compliqué.
Il n'est pas à exclure que les données de la base soit traitées exclusivement par PHP. Faire des "html_entity_decode" (par exemple) dans un autre langage pourrait devenir très vite compliqué.
- _Soul
- WRInaute impliqué

- Messages: 508
- Inscription: 26 Avr 2011
Re: Securite PHP/SQL
mysql_real_escape_string a une faille, il ne gère pas le #, le commentaire en sql, pour régler ça, passes par pdo.
Je te conseille de faire un htmlentities de toutes les données donné par l'utilisateur, sa prendra plus de place das la bdd mais tu ne te fera pas chier a l'affichage.
Je te conseille de faire un htmlentities de toutes les données donné par l'utilisateur, sa prendra plus de place das la bdd mais tu ne te fera pas chier a l'affichage.
-

spout - WRInaute accro

- Messages: 4382
- Inscription: 14 Mai 2003
Re: Securite PHP/SQL
_Soul a écrit:Je te conseille de faire un htmlentities de toutes les données donné par l'utilisateur, sa prendra plus de place das la bdd mais tu ne te fera pas chier a l'affichage.
Mauvais conseil, comme Blount l'a souligné, c'est à l'affichage qu'il faut faire ce genre de traitement.
-

tryan - WRInaute passionné

- Messages: 2355
- Inscription: 20 Fév 2005
Re: Securite PHP/SQL
Je ne pige pas ...
Si vous ne faites pas de traitement des données au niveau du formulaire, donc avant insertion en bd, vous n'êtes pas emmerdé avec par exemple des antislash suite à des mots contenant des apostrophes ?
Exemple :
Si vous ne faites pas de traitement des données au niveau du formulaire, donc avant insertion en bd, vous n'êtes pas emmerdé avec par exemple des antislash suite à des mots contenant des apostrophes ?
Exemple :
- Code: Tout sélectionner
$ma_variable = stripcslashes(htmlspecialchars($_POST["toto"]));
//Insertion
'".mysql_real_escape_string($ma_variable)."'
- _Soul
- WRInaute impliqué

- Messages: 508
- Inscription: 26 Avr 2011
Re: Securite PHP/SQL
spout a écrit:_Soul a écrit:Je te conseille de faire un htmlentities de toutes les données donné par l'utilisateur, sa prendra plus de place das la bdd mais tu ne te fera pas chier a l'affichage.
Mauvais conseil, comme Blount l'a souligné, c'est à l'affichage qu'il faut faire ce genre de traitement.
Et t'oublie combien de fois de le faire à l'affichage?
38 messages
• Page 1 sur 3 • 1, 2, 3
Lectures recommandées sur ce thème :
- Sécurité , injection sql : mysql_real_escape_string
- Sécurité php
- Faille de sécurité PHP
- [PHP]Sécurité formulaire
- Formulaire PHP et sécurité
- Cache PHP et sécurité
- [PHP/MySQL] Excepter une valeur dans un requête SQL en PHP
- PHP : Session , sécurité , cookies
- [php] Faille de sécurité include()
- Sécurité avec PHP et 'Magic Quotes'
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités
