Vous n'êtes pas identifié(e).
Pages :: 1
Bonjour à tout le monde,
Je viens de créer (enfin créer est un grand mot) un site grâce à Openauto
Disons que j'ai juste fait quelques ajouts dans les pages par tatonnement n'y connaissant pas grand chose en php.
Maintenant, je bloque un peu d'où ma question.
Je fais donc appel à Mysql pour récupérer les données.
Voilà ce que j'ai fait. Ca fonctionne, la base mysql est bien connectée, j'ai les infos qui s'affichent.
Par contre, j'ai voulu me baser sur ce qui avait été programmé à l'origine
Ca fonctionne pas.
En fait, j'y connais pas grand chose en language internet mais j'en déduis que la ligne
$db = mysql_connect($dbhost,$dbuser,$dbpass);
fait appel à des infos qui sont dans un autre fichier.
Je ne comprends pas pourquoi ça fonctionne pas.
De plus, j'ai trouvé le fichier avec $dbhost,$dbuser et $dbpass et les données qui correspondent ne sont pas du tout les bonnes valeurs pour se connecter à la base mysql.
Pouvez vous m'expliquer comment fonctionne le principe de sécurisation d'une connexion mysql et où sont stockées les données qui correspondent au bon login et mot de passe.
Merci d'avance pour votre aide.
Hors ligne
Si ton fichier est inclut avant ton code de connexion et qu'il définit les variables comme suit :
Il n'y a à priori pas de problème à la connexion.
Dis nous l'erreur affichée on pourra mieux te guider vers la solution.
Hors ligne
Bonsoir,
Merci pour cette réponse rapide.
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in /home/chatomon/public_html/smiley-auto.fr/excel.php on line 20
Warning: mysql_query() [function.mysql-query]: Access denied for user 'chatomon'@'localhost' (using password: NO) in /home/chatomon/public_html/smiley-auto.fr/excel.php on line 26
Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/chatomon/public_html/smiley-auto.fr/excel.php on line 26
Erreur SQL !
Voilà le message d'erreur.
En fait, ce que j'essaie surtout de comprendre (j'suis têtu ) c'est comment fonctionne la connexion à la base mysql vu que j'ai beau faire une recherche dans tous les fichiers du site, je ne trouve nulle part le login et le mot de passe que j'ai paramétré lors de l'install du site chez mon hébergeur.
Le site fonctionne très bien, la communication avec les base est bonne mais je ne comprends pas où sont les login et mot de passe.
Effectivement xTG, aucun problème dans le premier code. Pour moi ça peut rester comme ça mais niveau sécurité ? N'y a t il pas un risque de laisser login et mot de passe dans le même fichier ?
Merci pour ton aide.
Dernière modification par chatomon (30-04-2010 22:04:29)
Hors ligne
A priori oui c'est une erreur des identifiants.
Pour ce qui est de la sécurisation des identifiants je ne saurais t'en dire plus.
Je ne connais rien sur ce domaine. Peut être que d'autres t'en diront plus d'ici demain.
Cependant on peut toujours sécuriser en masquant les erreurs de connexion (serveur sql offline ou autre qui afficherait ce message d'erreur et donc des informations qui n'ont pas lieu de circuler) comme suit :
En cas d'erreur seul le message d'erreur paramétré sera affiché et la page arrêtera de se charger.
Pour tes identifiants contactes le support de ton hébergeur. M'enfin ils doivent bien être quelque part si l'un de tes codes fonctionne.
Dernière modification par xTG (30-04-2010 22:35:59)
Hors ligne
Merci à toi xTG pour ces réponses nocturnes.
Je connais les identifiants vu que c'est moi qui les ai crée. J'ai accès par l'admin de mon hébergeur à toutes ces données.
J'attends demain avec impatience
Merci encore
Hors ligne
Bonsoir
Alors dans le code fournit par xtg qui doit se situer dans ton include/require de page remplace les valeurs correspondantes par les tiennes manuellement.
Pour sécuriser ce fichier/ton site par rapport à ce fichier, ce que tu doit faire :
1) Le placer dans un répertoire hors de l'arborescence et y accèder dans ton code (uniquement fichier .php) via un chemin relatif exclusivement.
2) Faire un chmod dessus en 444.
3) configurer ton serveur sur un retour systematique d'erreur http 404 sur une page non trouvée (sinon accès à l'arborescence et donc aux fichiers) et si tu ne sais pas le faire ou peut pas le faire, place un fichier index.html avec une redirection dessus sur ta page de démarrage du site.
4) optionnel : protéger l'accès au répertoire par un mot de passe
Dernière modification par Jc (30-04-2010 22:55:19)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Bonsoir
Alors dans le code fournit par xtg qui doit se situer dans ton include/require de page remplace les valeurs correspondantes par les tiennes manuellement.
Pour sécuriser ce fichier/ton site par rapport à ce fichier, ce que tu doit faire :
1) Le placer dans un répertoire hors de l'arborescence et y accèder dans ton code (uniquement fichier .php) via un chemin relatif exclusivement.
2) Faire un chmod dessus en 444.
3) configurer ton serveur sur un retour systematique d'erreur http 404 sur une page non trouvée (sinon accès à l'arborescence et donc aux fichiers) et si tu ne sais pas le faire ou peut pas le faire, place un fichier index.html avec une redirection dessus sur ta page de démarrage du site.
4) optionnel : protéger l'accès au répertoire par un mot de passe
Bonjour,
Merci pour ta réponse. Comme cela reste très compliqué moi moi, j'avoue ne pas avoir tout compris.
1) Le placer dans un répertoire hors de l'arborescence et y accèder dans ton code (uniquement fichier .php) via un chemin relatif exclusivement.
Mon site est dans le répertoire public_html/monsite Je place donc le fichier crée à la base du site ? C'est quoi un chemin relatif ???
3) configurer ton serveur sur un retour systematique d'erreur http 404 sur une page non trouvée (sinon accès à l'arborescence et donc aux fichiers) et si tu ne sais pas le faire ou peut pas le faire, place un fichier index.html avec une redirection dessus sur ta page de démarrage du site.
Là je comprends rien de rien excepté que le but est que si un utilisateur trouve le nom de fichier, il n'y ai pas accès. Comment peut on configurer le serveur en ce sens ?
4) optionnel : protéger l'accès au répertoire par un mot de passe
Tu me proposes .htacces ???
Merci pour aide et tes réponses.
Hors ligne
Bonjour
Alors, concernant le 1)
- Si ton site est dans public_html/monsite avec la structure suivante public_html/monsite/rep1 , public_html/monsite/rep2 , etc... le placer hors arborescence signifie le mettre par ex ici : public_html/config/config.php
- Ensuite concernant le chemin relatif voici un exemple pour t'aider à comprendre: Imaginons que tu as ton fichier include qui s'appele start.php et qui est placé dans public_html/monsite/start.php.
Voici comment ton fichier start.php devra appeler ton fichier config.php
De plus si tu travailles en https, sache qu'il faut utiliser exclusivement les appels par chemin relatif pour garder l'encryption sur les fichiers appelé et donc pour préserver le mode protégé, sinon lors du chargement de ta page tu auras un message de ton navigateur du style, "Votre page tente de charger des éléments non sécurisés dans une page sécurisée. Cliquez sur oui pour continuer ou sur non pour ne pas charger ces éléments". (me souviens plus du message exact^^)
Concernant le 3)
- imaginons que dans un répertoire de ton arborescence tu es uniquement les fichiers suivants: 1.php, 2.php, et 3.php (juste pour l'exemple). Si ton répertoire n'est pas protégé par un fichier index ou via ton serveur par une redirection de type 404 (beaucoup mieux) et qu'un utilisateur mal intentionné entre une page blabla.php dans son navigateur dans ce même répertoire, vu que le fichier n'existe pas, ton navigateur affichera l'arborescence de ton répertoire et montrera toute l'arborescence. Suffira alors a l'internaute de cliquer sur le fichier de son choix pour en lire le contenu.
Demande à ton hebergeur comment configurer une redirection de type 404 par défaut sur ton site.
Concernant le 4)
- Cela corresponds effectivement à mettre un fichier .htaccess dans le répertoire concerné. J'en ai parlé d'une manière optionnel car parfois cela peut poser un problème dans le sens ou ton code à l'éxécution peut te demander le mot de passe, ce qui faut éviter dans une éxécution de code censée être transparente pour l'utilisateur.
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
De plus si tu travailles en https, sache qu'il faut utiliser exclusivement les appels par chemin relatif pour garder l'encryption sur les fichiers appelé et donc pour préserver le mode protégé, sinon lors du chargement de ta page tu auras un message de ton navigateur du style, "Votre page tente de charger des éléments non sécurisés dans une page sécurisée. Cliquez sur oui pour continuer ou sur non pour ne pas charger ces éléments". (me souviens plus du message exact^^)
Faux. Il faut juste que les éléments spécifiés en absolus soient aussi en https (et avec le meme certificat, donc meme domaine). Un <img src="https://www.site.tld/images/monimage.jpg"> fonctionne aussi bien qu'un <img src="images/monimage.jpg">, en gros. Il faut donc juste être cohérent, dans un environnement https, tout appel a d'autres fichiers dans la page doit etre https (et en relatif, c'est https).
Concernant le 3)
- imaginons que dans un répertoire de ton arborescence tu es uniquement les fichiers suivants: 1.php, 2.php, et 3.php (juste pour l'exemple). Si ton répertoire n'est pas protégé par un fichier index ou via ton serveur par une redirection de type 404 (beaucoup mieux) et qu'un utilisateur mal intentionné entre une page blabla.php dans son navigateur dans ce même répertoire, vu que le fichier n'existe pas, ton navigateur affichera l'arborescence de ton répertoire et montrera toute l'arborescence. Suffira alors a l'internaute de cliquer sur le fichier de son choix pour en lire le contenu.
Faux. Il clique sur le fichier, il n'aura pas le contenu du fichier, mais le resultat de son interprétation (en partant de l'hypothèse que l'extension est bien .php). Il ne vois le contenu que si le fichier n'est pas lié a un interpréteur par defaut (c'est pour ca que nommer un fichier d'include config.inc.php est mieux que config.php , dans ce cas). Reste que desactiver le listing de directory, ou avoir une erreur 404 par defaut, c'est plus propre. Et ca peut souvent se faire via un .htaccess (Options -indexes ou directive ErrorDocument )
Concernant le 4)
- Cela corresponds effectivement à mettre un fichier .htaccess dans le répertoire concerné. J'en ai parlé d'une manière optionnel car parfois cela peut poser un problème dans le sens ou ton code à l'éxécution peut te demander le mot de passe, ce qui faut éviter dans une éxécution de code censée être transparente pour l'utilisateur.
La encore, complétement faux. Tu ne fait pas la distinction entre appel http et appel par le système de fichier, et c'est fondamental en sécurité.
Le script php qui fait un include passe par le système de fichier, pas par un appel http (a moins de faire un include en http, mais la c'est con, surtout pour un truc local). Apache n'a donc rien a faire dans l'inclusion du fichier, et le .htaccess est le cadet des soucis dans ce cas. D'ailleurs comment tu pourrais faire un include dans un repertoire qui est en dehors de l'arborescence web sinon ?
Certains scripts ont d'ailleurs des .htaccess en deny from all dans les repertoires d'includes, et ca ne pose aucun problème.
Enfin, en ce qui concerne le fait de mettre le fichier de conf en dehors de l'arborescence web, il ne faut pas oublier que cela n'empeche que son eventuel accès direct (et comme vu ci dessus, il y a bien d'autre moyen de l'empecher et cela ne fait pas beaucoup de degats si il est en .php), cela n'empeche pas son accès tout court. Si il y a une faille de sécurité dans un script sur le site, il reste toujours possible d'inclure ce fichier, voir selon la configuration du serveur de le lire a coup de fopen.
Mais de toute facon, dès qu'il est inclus, quand il y a une faille de sécurité on peut savoir ce qu'il contient, des fonctions php permettent de voir toutes les variables et toutes les constantes.
En résumé, la sécurité ce n'est pas un cadenas sur la poignée de la fenetre et laisser la porte grande ouverte. C'est un tout, et il faut la réfléchir globalement.
@+
la v2, c'est tabou, on en viendra tous a bout
Hors ligne
Wawww merci beaucoup beaucoup pour toutes ces explications.
1) J'avais compris pour le chemin relatif ou absolu mais je ne savais pas que cela s'appelait comme ça. J'ai vu ce genre de ligne un peu partout sur mon site. Avec une explication, c'est plus clair.
C'est pas du https
3) Le type 404 est activé, j'ai essayé blabla.php ou nimportequoi.php et ça me redirige vers une erreur 404. Ca doit être d'office prévu comme ça chez l'hébergeur.
4) J'ai prévu de faire un.htaccess dans toute la partie admin.
Merci encore. Je vais essayer de tester tout cela dans la soirée.
Hors ligne
ManicoW : Nos messages se sont croisés.
Alors, à la lecture de ton message, je comprends rien de rien. Faudra que je relise à tête reposée.
Je suppose que le débat est fort intéressant mais n'ayant pas d'avis sur la question, j'y prendrai pas part
En fait, ma question est venue par rapport au principe de sécurité et aussi afin de ne pas "foutre en l'air" le travail fait par d'autre (les auteur de ce script)
Allez je mets mes lunettes, ventile le cerveaux et je relis tout ça
Merci à vous tous.
Hors ligne
Donc merci ManicoW pour toutes ces explications, je l'ai mérité. C'étaient des recommendations pour un débutant pour éviter les erreurs, car ce sont celles que l'on recontre le plus souvent. D'ailleurs le fait que chatomon ne comprenne pas tes explications illustre bien ce que je voulais éviter. Ceci dit le mode d'ecriture se faisant quasiment toujours en mode relatif par défaut, l'exception se fait toujours quasiment à 99% dans l'autre sens c'est à dire en link d'une image en mode absolu http (le plus souvent).
Concernant le 4) je n'ai pas parlé d'include hein^^ mais comme c'était le contexte, j'avoue que ça ne le fait pas du tout. Donc désolé, et par conséquent, chatomon, quand tu décides de protéger un répertoire en .htaccess, assures toi que tout ce que tu places dedans ne sera pas accédé via http à un moment où un autre dans ton code.^^
Merci Manicow de m'avoir recadré^^^.
Dernière modification par Jc (01-05-2010 13:48:21)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Bonsoir à vous,
J'ai compris mon erreur. En fait je me basais sur les fichiers sur mon disque dur et non sur ceux de l'hébergeur. J'ai donc trouvé le fichier qui abritait les bons logins et mot de passe. Une chose en moins
Par contre,
// on se connecte à MySQL
$db = mysql_connect('localhost', 'chatomon_login', 'chatomon_mdp');
// on sélectionne la base
mysql_select_db('chatomon_base',$db);
// on crée la requête SQL
$sql = 'SELECT make,model,vehicle_type,mileage,year,trans,price,features FROM listings ORDER BY make';
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
// on fait une boucle qui va faire un tour pour chaque enregistrement
while($data = mysql_fetch_assoc($req))
{
// on affiche les informations de l'enregistrement en cours
?>
<tr>
<td><?php echo ''.$data['make'].' </br>'; ?></td>
<td><?php echo ''.$data['model'].' </br>'; ?></td>
<td><?php echo ''.$data['vehicle_type'].' </br>'; ?></td>
<td><?php echo ''.$data['year'].' </br>'; ?></td>
<td><?php echo ''.$data['mileage'].' </br>'; ?></td>
<td><?php echo ''.$data['trans'].' </br>'; ?></td>
<td><?php echo ''.$data['price'].' </br>'; ?></td>
<td><?php echo ''.$data['features'].' </br>'; ?></td>
<?php
}
// on ferme la connexion à mysql
mysql_close();
?>
Quand j'emploie ce code, ça fonctionne j'ai les infos que je veux.
Par contre, dès que je fais
include '../Includes/configs/lesloginsetmotdepasse.php';
// on sélectionne la base
mysql_select_db($dbname,$db);
// on crée la requête SQL
$sql = 'SELECT make,model,vehicle_type,mileage,year,trans,price,features FROM listings';
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
// on fait une boucle qui va faire un tour pour chaque enregistrement
while($data = mysql_fetch_assoc($req))
{
// on affiche les informations de l'enregistrement en cours
?>
<tr>
<td><?php echo ''.$data['make'].' </br>'; ?></td>
<td><?php echo ''.$data['model'].' </br>'; ?></td>
<td><?php echo ''.$data['vehicle_type'].' </br>'; ?></td>
<td><?php echo ''.$data['year'].' </br>'; ?></td>
<td><?php echo ''.$data['mileage'].' </br>'; ?></td>
<td><?php echo ''.$data['trans'].' </br>'; ?></td>
<td><?php echo ''.$data['price'].' </br>'; ?></td>
<td><?php echo ''.$data['features'].' </br>'; ?></td>
<?php
}
// on ferme la connexion à mysql
mysql_close();
?>
Ca ne fonctionne pas du tout. Il ne se connecte pas et j'ai que des erreurs ou alors il se connecte mais pas à la bonne base de données (J'ai 3 bases chez mon hébergeur et il prend une autre)
Merci pour votre aide.
Hors ligne
Bonjour,
Voilà le code du fichier config.
//connection error messages used for database user and password or type failures
DEFINE("DATABASE_CONNECTION_ERROR","<h1>Fatal Error:</h1><p>Unable to connect to the database at this time.</p>");
DEFINE("DATABASE_LOCATION_ERROR","<h1>Fatal Error:</h1><p>Unable to locate the database at this time.</p>");
DEFINE("DATABASE_EMPTY_ERROR","<h1>Fatal Error:</h1><p>Unable to locate data it appears your database is empty.</p>");
DEFINE("DATABASE_UNSUPPORTED_DATABASE_TYPE_ERROR","<h1>Fatal Error:</h1><p>Your server does not support access to a $dbtype Database.</p>");
//debug message used when debugging is turn on or off
DEFINE("DEBUG_SQL_TURN_OFF_VERBOSE_MESSAGE","<h1>Fatal Error:</h1><p>There was an error somewhere in your script.</p>");
//choose the right connector to setup
switch($dbtype) {
//connect to MySQL
case 'MySQL':
if (function_exists('mysql_connect')) {
include_once "db.functions.$dbtype.php";
} else {
die(DATABASE_UNSUPPORTED_DATABASE_TYPE_ERROR);
exit();
}
break;
//connect to MySQLi
case 'MySQLi':
if (function_exists('mysqli_connect')) {
include_once "db.functions.$dbtype.php";
} else {
die(DATABASE_UNSUPPORTED_DATABASE_TYPE_ERROR);
exit();
}
break;
//connect to PostGreSQL remapper functions are broken
case 'PostGreSQL':
//add some code for postgresql later
if (function_exists('pg_pconnect')) {
include_once "db.functions.$dbtype.php";
} else {
die(DATABASE_UNSUPPORTED_DATABASE_TYPE_ERROR);
exit();
}
break;
default:
die(DATABASE_LOCATION_ERROR);
break;
}
?>
J'y comprends rien
Hors ligne
Re bonjour,
J'ai essayé de cette façon et CA FONCTIONNE
J'ai crée un autre fichier en php
Dans l'autre fichier, j'ai mis
include '../Includes/configs/conect.php';
// on se connecte à MySQL
$db = mysql_connect($dbhost,$dbuser,$dbpass);
// on sélectionne la base
mysql_select_db($dbname,$db);
// on crée la requête SQL
$sql = 'SELECT make,model,vehicle_type,mileage,year,trans,price,features FROM listings ORDER BY make';
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
// on fait une boucle qui va faire un tour pour chaque enregistrement
while($data = mysql_fetch_assoc($req))
{
// on affiche les informations de l'enregistrement en cours
?>
<tr>
<td><?php echo ''.$data['make'].' </br>'; ?></td>
<td><?php echo ''.$data['model'].' </br>'; ?></td>
<td><?php echo ''.$data['vehicle_type'].' </br>'; ?></td>
<td><?php echo ''.$data['year'].' </br>'; ?></td>
<td><?php echo ''.$data['mileage'].' </br>'; ?></td>
<td><?php echo ''.$data['trans'].' </br>'; ?></td>
<td><?php echo ''.$data['price'].' </br>'; ?></td>
<td><?php echo ''.$data['features'].' </br>'; ?></td>
<?php
}
// on ferme la connexion à mysql
mysql_close();
?>
C'est nickel.
J'espère que point de vue sécurité, ça tient le choc. J'ai également testé en indiquant l'adresse du fichier config dans mon navigateur et j'ai une erreur 404
Merci pour vos avis et réponses
Hors ligne
Pages :: 1