Dossier site

Par moza2409, il y a 13 ans


Bonjour, je souhaiterais savoir quelle est la meilleur façon de nommé les dossiers et fichier de son site pour éviter tous probleme de hack.
ex: pour le dossier admin est-ce que je peux le nommé admin ou c'est deconseillé ?
Merci

15 réponses

snap, il y a 13 ans

Si il n'y a aucun lien vers l'admin, tu peut effectivement le nommer adminXXX avec 3 chiffres par exemple (prestashop fait ça) mais au fond ça ne change pas grand chose, il faut absolument qu'il y est un système d'identification derrière!!

moza2409, il y a 13 ans

Les liens pointant vers l'admin sont protégés par un $_SESSION, seul les membres ayant le niveau autorisé pourront avoir accée aux liens.
Mais est-ce vraiment efficace ?

Grafikart, il y a 13 ans

Rajoute une page d'erreur 404 ou autre si on essaie d'accéder à cette page sans être connecté
ça évite que les gens aient un indice sur la position de ton administration :)

moza2409, il y a 13 ans

j'ai fait une redirection vers la page d'accueil, tu pense que ca suffit ?

snap, il y a 13 ans

si tu veux faire ce que graph propose il faut justement pas qu'il y est de redirection. il faut une erreur 404 comme s'il n'y avait pas de page a cette endroit, ainsi si quelqu'un cherche ton dossier ( supposons que ce soit admin123/ ) fait admin111/ => erreur 404 admin111/ => erreur 404 ..... admin123/ => erreur404 ....
ainsi on ne sait pas ou est ton dossier admin et on ne sais pas ou lancer l'attaque.

moza2409, il y a 13 ans

je vais paraitre un peu con mais comment créer une page 404 ? est oui je debute

moza2409, il y a 13 ans

en faite j'ai mal posé ma question, j'ai ma page admin qui est protégé par un $_SESSION donc si un utilisateur veut s'y connecter, est-ce que je peux le rediriger vers la page 404 ?
Voila ma page admin

<?php
if(isset($_SESSION'admin'])){ 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html>
<head>
    <LINK REL='StyleSheet' HREF="/CSS/style.css" TYPE="text/css">
</head>
<body>
<div id="background_conteneur">
    <div id="conteneur">
    <div id="conteneur_principal">
        <div id="conteneur_deposer_annonce">
<?php   
echo"   <div class='bouton'><a href='/admin/membres/p=1'>Les membres</a>
            <p>".($nbmembre)." membres</p>
        </div>  
        <div class='bouton'><a href='/admin/annonces/p=1'>Les annonces</a>
            <p>".($nbannonce)." annonces en ligne</p>
        </div>  
";      
?>
</div>
</div>
</div>
</body>
</html>
<?php
}else{
echo '<script language="Javascript">
<!--
document.location.replace("/404");
// -->
</script>';
}
?>
luffysan, il y a 13 ans

echo '<script language="Javascript">
<!--
document.location.replace("/404");
// -->
</script>';

Un header en PHP est plus propre.
header("HTTP/1.0 404 Not Found");

Bien sur le header doit être tout au début.

snap, il y a 13 ans

comme dit luffysan:
remplace

<?php
}else{
echo '<script language="Javascript">
<!--
document.location.replace("/404");
// -->
</script>';
}
?>

par

<?php
}else{
header("HTTP/1.0 404 Not Found");
}
?>

sinon plus simplement
commence le fichier par les vérification :

<?php
if(!isset($_SESSION'admin'])){ 
   header("HTTP/1.0 404 Not Found");
   exit();
}
// Tout ce qu'il y a aprés est protégé!
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html>
<head>
    <LINK REL='StyleSheet' HREF="/CSS/style.css" TYPE="text/css">
</head>
moza2409, il y a 13 ans

j'ai essayé et ca me met une erreur:
Warning: Cannot modify header information - headers already sent by (output started at /homepages/23/d428068456/htdocs/include/connect.php:18) in /homepages/23/d428068456/htdocs/page/da.php on line 2

la ligne 2 c'est :

if(!isset($_SESSION'admin'])){header("HTTP/1.0 404 Not Found"); exit();}

C'est pour ca que j'avais utilisé la method javascript

maxfr, il y a 13 ans

c'est que suite à des inclusion tu as déjà commencé a afficher du html
(parfois ça peut venir de simples espaces avant la balise <?php ) vérifie que tu n'affiche pas déjà quelquechose (en html, ou via un echo/print/print_r/...)

snap, il y a 13 ans

comme di maxfr il y a un du texte ou un espace en dehors des balise php, surement dans la page connect.php. pense bien a commencer le fichier directement par <?php et le mieux et de ne même par fermé la balise php a la fin comme ça t'es sur qu'il y aura pas de problème.

<?php 
/* fonctions pour ce connecter au mysql je suppose ... */
// fin du fichier sans fermé la balise php
moza2409, il y a 13 ans

Maintenent ca me met l'erreur en page index voila l'erreur:

Warning: Cannot modify header information - headers already sent by (output started at /homepages/23/d428068456/htdocs/index.php:15) in /homepages/23/d428068456/htdocs/page/compte.php on line 279

Voila la page index.php

<?php
  session_start();
  require_once 'include/connect.php';

    $sql = "SELECT * FROM membre
    ORDER BY titre ASC
    ";
    $sqlmembre= mysql_query($sql, $cnx);
    $voirsql=mysql_fetch_assoc($sqlmembre);     
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <link REL="StyleSheet" HREF="/CSS/style.css" TYPE="text/css">   
    <script type="text/javascript" src="/js/jquery.js"></script>
    <script type="text/javascript" src="/js/like.js"></script>
<script langage="javascript">
function change_col_height_max_selected_to(val){
            document.forms"form"].elements"col_height_max"].options[val].selected = true;
}
function NotSubmitValueEmpty(Obj)
{
    var NbrElem = Obj.length;
    for(x=0;x<NbrElem;x++)
    {
        var MonName = Obj.elements[x].name;
        var MaValue = Obj.elements[x].value;
        if(MonName!="" && MaValue=="")
        {
            Obj.elements[x].name="";
        }   
    }
    return true;
}
</script>
</head>
<body>
<?php
include('entete.php'); 
//selon le genre on include la page demandée
if (isset($_REQUEST'p'])){
    $p=$_REQUEST'p'];
    switch($p)
    {   
    case "compte":
    include("membre/compte.php");
    break;  
    }
}else {
}
?>  
    <div id="conteneur_bas_site2">
        <a href="/apropos">A propos</a>
        <a href="/regles">Règles de diffusion</a>
        <a href="/categorie"></a>
        <a href="/autoentrepreneur">Auto-entrepreneur</a>
        <a href="/faq" >F.A.Q</a>   
        <a href="/contact" >Contactez-nous</a>
        </div>
        <div id="conteneur_suivez_nous"></div>  
</body>
</html>

j'ai tous reverifié et ca fonctionne toujours pas

snap, il y a 13 ans

il y a quoi dans le fichier entete.php?? il y a pas des header par hasard?

moza2409, il y a 13 ans

voila le fichier entete

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <link REL='StyleSheet' HREF="CSS/style.css" TYPE="text/css">
</head>
<body>
<div id="entete">
    <div id="head">
    <div id="menu">
<?php
if(isset($_SESSION'Auth'])){  
    $pseudo=$_SESSION'Auth'];
echo" 
    <a href='/monprofil'>Mes infos</a>
";
        if(isset($_GET'as']) or isset($_GET'rec_tuto'])){
            echo"<b><a href='/sauvegardes/annonces/p=1'><font color='orange'>Mes sauvegardes</a><font></b>";    
        }else{
            echo"<a href='/sauvegardes/annonces/p=1'>Mes sauvegardes</a>";
        }
        if(isset($_GET'mes_annonces']) or isset($_GET'mes_tutos'])){
            echo"<b><a href='/moncompte/annonces/p=1'><font color='orange'>Mon compte</a><font></b>";   
        }else{
            echo"<a href='/moncompte/annonces/p=1'>Mon compte</a>";
        }
} else {
?>
        <a href="/inscription">S'inscrire</a>   
        <a href="/connexion">Se connecter</a>

<?php } ?>
        <a href="/">Acceuil</a>
        </div>
<?php
if(isset($_SESSION'Auth'])){ 
echo" <div id='menu'>
                <p><a href='/deconnexion'>Se deconnecter<a></p>
            </div>
";  
} ?>
    </div>
</div>
</body>
</html>