8800 sujets

Développement web côté serveur, CMS

Bonjour, je suis à la recherche d'un tuto ou de bonne explication sur les manières les plus récentes qu'on utilise pour protéger l'entrée de son interface admin.

J'utilise actuellement un système qu'on m'a appris pendant ma petite formation php de 3mois... Mais à l'apparence ce système est dépassé et n'est pas assez fort.
La sécurité n'a pas été un sujet de premier plan lors de cette formation, j'ai donc de grosse lacune dans ce domaine et je cherche à réapprendre de bonne base. Smiley smile
[si dessous le code que j'utilise.]

merci d'avance pour votre aide et bonne journée Smiley ravi .



<? 
if (isset($_GET["connection"]) && $_GET["connection"]=="off"){
	session_start();
	session_destroy();
}
else {
	session_start();
} 
?>

<? 
//je regarde si le formulaire a été envoyé 
if (isset($_POST["admin_login"]) || isset($_POST["admin_pwd"])){
?>

<? require_once("connection.php"); ?>
<? require_once("init.php"); ?>

<?
$requete_verif = "SELECT admin_login,admin_pwd FROM t_admins WHERE admin_login='".$_POST["admin_login"]."' AND admin_pwd ='".$_POST["admin_pwd"]."'";
$resultat_verif = mysql_query($requete_verif);
$nombre = mysql_num_rows($resultat_verif);

if ($nombre>0) {
		//on cree la variable de session
		$_SESSION["pseudo"]= $_POST["admin_login"];
		
		
		
		// On va rediriger vers admin_index.php
		header("Location:admin_index.php");
	}
	else {
		// On affiche un message d'erreur
		$error=0;
	}
}

?>

Modifié par foxprox (28 Apr 2009 - 09:25)
merci pour ta réponse, j'ai bien compris le problème en lisant la doc.
Pourrais-tu me dires si je me trompe ou pas en intégrant le mysql_real_escape_string
comme je l'ai fait?

Bonne soirée et merci Smiley cligne


<?
$_POST["admin_login"] = mysql_real_escape_string($_POST["admin_login"]);
$_POST["admin_pwd"] = mysql_real_escape_string($_POST["admin_pwd"]);

$requete_verif = "SELECT admin_login,admin_pwd FROM t_admins WHERE admin_login='".$_POST["admin_login"]."' AND admin_pwd ='".$_POST["admin_pwd"]."'";
$resultat_verif = mysql_query($requete_verif);
$nombre = mysql_num_rows($resultat_verif);

if ($nombre>0) {
		//on cree la variable de session
		$_SESSION["pseudo"]= $_POST["admin_login"];
		
		
		
		// On va rediriger vers admin_news.php
		header("Location:admin_index.php");
	}
	else {
		// On affiche un message d'erreur
		$error=0;
	}
}

?>
foxprox a écrit :
personne pour m'apporter une petite aide? Smiley confused Smiley eek

Oui c'est bien comme ça.

Par contre autant utiliser des variables comme $login/$password ou $adminLogin/$adminPassword pour stocker ce que te rend mysql_real_escape_string
Salut,

pour chipoter j'ajouterais :

* qu'il faut remplacer l'ancienne forme <? par la "nouvelle" <?php pour ne pas avoir de risque d'interférences avec XML.

* que ton premier test peut être remplacé par :
<?php 
session_start();
if (isset($_GET["connection"]) && $_GET["connection"]=="off"){
	session_destroy();
}
?>
* qu'il faut éviter de créer des variables inutiles (comme $nombre) :
$resultat_verif = mysql_query($requete_verif);
if (mysql_num_rows($resultat_verif) > 0) {
Merci pour vos réponses j'ai mis tout cela en oeuvre Smiley cligne
vous répondez même à mes questions sans que je l'aie posée! Si ce n’est pas super ça!
Merci beaucoup
(je me demandais justement pourquoi je voyais soit des <? ?> ou des<?php ?>)...

PS : je suis toujours à la recherche de bon tuto sur la protection admin et site internet,
donc si vous avez quelques liens, ils sont toujours les bienvenus !

Bonne journée chers Alsanautes!
Le lien que donne bzh est plutôt intéressant.

Il y aussi un article assez récent sur Smashing Magazine ou deux experts en sécurité nous donnent 10 astuces sur la sécurité en général, très intéressant.

Article (en)
Modifié par kurt11 (25 Apr 2009 - 10:59)
Salut,

kurt11 a écrit :
Il y aussi un article assez récent sur Smashing Magazine ou deux experts en sécurité nous donnent 10 astuces sur la sécurité en général
Intéressant mais il n'y a que la première astuce qui concerne directement la sécurité. Smiley cligne
Modifié par Heyoan (25 Apr 2009 - 11:35)
j'ai lu quelques articles sur le hash de mot de passe (ce ne que je n'ai pas encore fait et qui me semble très important à faire depuis mes lectures...alala les débutants Smiley rolleyes ).

j'ai lu des choses assez contradictoires sur le procédé à utiliser, d'après ce que j'ai compris
"md5" et "sha1" sont les plus souvent utilisés, mais c'est aussi les procédés qui font le plus l'objet de sujet sur les sites de hacking et qu'ils commençaient à montrer des signes de faiblesses.

Sur un site l'auteur de l'article conseille pour les mots de passe "sha256"..Quels sont vos avis?
Personnellement j'utilise depuis peu mcrypt avec le "cypher" RIJNDAEL_256 et un base64_encode() pour qu'il n'y ai pas de souci avec les caractères. Mais il y a sûrement mieux, je suis donc preneur aussi...
mcrypt

Après je pense qu'il y a HTTPS et tant que ce n'est pas pour des choses super-méga importantes ça doit être amplement suffisant. Mais depuis décembre c'est "crackable" si c'est protégé en MD5, article (en). Ok il faut 200 PS3...
Modifié par kurt11 (25 Apr 2009 - 13:37)
petit problème...depuis que j'ai cripté mes mots de passes je ne sais plus rentrer dans mon admin lol ^^ Je pense que je me trompe dans ma façon de décrypter, mais je ne sais pas trop où Smiley sweatdrop

<? 
session_start();
if (isset($_GET["connection"]) && $_GET["connection"]=="off"){

	session_destroy();
}
?>

<? 
//je regarde si le formulaire a été envoyé 
if (isset($_POST["admin_login"]) || isset($_POST["admin_pwd"])){
?>

<? require_once("connection.php"); ?>
<? require_once("init_admin.php"); ?>

<?
$login = $_POST["admin_login"]; 
$pwd = sha1(md5($_POST["admin_pwd"]));

$requete_verif = "SELECT admin_login, admin_pwd FROM t_admin WHERE
admin_login='" . $login . "' 
AND admin_pwd ='" . $pwd . "'"; 
$resultat_verif = mysql_query($requete_verif);


if (mysql_num_rows($resultat_verif) == 1) {
		//on cree la variable de session
		$_SESSION["pseudo"]= $_POST["admin_login"];
		// On va rediriger vers admin_news.php
		header("Location:admin_index.php");
		exit;
	}
	else {
		// On affiche un message d'erreur
		$error=0;
	}
}

?>



voici comment j'introduis mes comptes dans la DB

<? // je fais ma requete INSERT ET UPDATE si $_POST["todo"] existe
if(isset($_POST["todo"])) {
	$login = $_POST['admin_login'];
    $pwd = $_POST['admin_pwd'];
	$pwd = sha1(md5($pwd));
	
	
	if($_POST["todo"]=="add"){
		mysql_query("INSERT INTO t_admin VALUES('', '" . $login . "', '" . $pwd . "')");
		}
}          
?>


Si quelqu'un peux m'aider, grand merci d'avance Smiley confused