lieu dynamique de redirection...est-ce suffisant sécurisé?

  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8211
  • Loc: USA
  • Status: Offline

Message Novembre 12th, 2010, 4:24 pm

Im faire un reportage sur ma page de connexion que si leur est une variable nommée page qu'ils redirigé vers cette page après l'exploitation forestière en

PHP Code: [ Select ]
<?php
// Default redirection page
$redirect = 'index.php';
       
// Checking if they came from another page
if(isset($_GET['page']) && !strpos('.', $_GET['page']) && !strpos('/', $_GET['page']) && file_exists($_GET['page']))
{
    $redirect = $_GET['page'];
}
 
// Sending the user to the main page
header("LOCATION: {$redirect}");
?>
  1. <?php
  2. // Default redirection page
  3. $redirect = 'index.php';
  4.        
  5. // Checking if they came from another page
  6. if(isset($_GET['page']) && !strpos('.', $_GET['page']) && !strpos('/', $_GET['page']) && file_exists($_GET['page']))
  7. {
  8.     $redirect = $_GET['page'];
  9. }
  10.  
  11. // Sending the user to the main page
  12. header("LOCATION: {$redirect}");
  13. ?>

Jusqu'à présent, j'ai obtenu que...est-il suffisamment sécurisé?

Raison Im faisant cela, c'est que si l'utilisateur clique sur leur connexion, ils redirigé vers la page ils sont venus après la connexion de sorte qu'ils ne perdront pas leur position. Je pense que cela va fonctionner à merveille.
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Novembre 12th, 2010, 4:24 pm

  • SpooF
  • ٩๏̯͡๏۶
  • Bronze Member
  • Avatar de l’utilisateur
  • Inscription: Mai 22, 2004
  • Messages: 3415
  • Loc: Richland, WA
  • Status: Offline

Message Novembre 12th, 2010, 6:09 pm

Je ne vois pas pourquoi cela wouldnt être sécurisé. C'est juste une redirection, vous Arnt en l'incluant dans votre page, donc je ne vois pas comment quelqu'un pourrait l'exploiter.


Je ne crois pas que cela fonctionnera si vous avez n'importe quelle sorte de chaîne de requête sur le fichier si.
#define NULL (::rand() % 2)
  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8211
  • Loc: USA
  • Status: Offline

Message Novembre 12th, 2010, 9:12 pm

SpooF a écrit:
Je ne vois pas pourquoi cela wouldnt être sécurisé. C'est juste une redirection, vous Arnt en l'incluant dans votre page, donc je ne vois pas comment quelqu'un pourrait l'exploiter.

Très bien, merci
SpooF a écrit:
Je ne crois pas que cela fonctionnera si vous avez n'importe quelle sorte de chaîne de requête sur le fichier si.

Que voulez-vous dire? Quel que soit votre moyenne est bonne lol...Je n'arrive pas à obtenir pour rediriger vers le lieu de $ _GET ["page"], il dit à
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Inscription: Fév 10, 2004
  • Messages: 13455
  • Loc: Florida
  • Status: Offline

Message Novembre 12th, 2010, 9:16 pm

Vous pourriez probablement faire sans contrôle pour la dot, et en utilisant "! Empty ()" au lieu de "isset ()" permettra de sauver le système d'avoir besoin de procéder dans un cas où la page est fixé, mais ne contient pas une valeur, mais il semble assuré.

La seule façon je peux penser que cette pourrait être supplantés, est si theres une sorte de caractères multi-octets que votre système d'exploitation serait d'interpréter au fur et à convertir automatiquement des séparateurs de répertoires, des points ou quelque chose du genre. Si cela était possible, je suppose qu'une page de phishing pourrait être mis en place qui redirige l'utilisateur vers un site externe à l'aide de votre redirection.

Fondamentalement configuration quelqu'un aurait un lien vers votre page de connexion et d'inclure cette URL malformée pointant vers leur propre site web. Un utilisateur peut simplement coup d'œil sur le premier nom de domaine qu'ils voient dans ce lien de connexion, ce qui serait votre domaine et aucune raison de s'inquiéter. Pendant ce temps, ce lien serait incorrect rediriger l'utilisateur vers un autre site Web qui ressemble exactement à vos sites Web page de connexion, mais avec un message d'erreur à l'instar de "mot de passe incorrect, s'il vous plaît assurez-vous que vous n'avez pas CAPSLOCK et essayer à nouveau" qui, depuis qu'ils vient de votre page de connexion, pourrait faciliter soupçons anyones et les faire entrer leur nom d'utilisateur et mot de passe dans ce site de phishing. Après avoir recueilli votre mot de passe du site de phishing pourrait rediriger le visiteur vers votre site et à la page qu'ils pensaient qu'ils allaient en premier lieu et de ne jamais réaliser ce qui vient de se passer jusqu'à ce qu'il soit trop tard.

En fait, comme je tapais ce, séparateurs de répertoires urlencoded venu à l'esprit. Toutefois, depuis le youve a obtenu un file_exists () appelle là-bas, toute cette idée est à peu près nulle. Tant que les fichiers critiques, comme peut-être une "config. php "sont protégés d'être considéré par les navigateurs pour commencer, ce n'est pas grave si vous pouvez être redirigé vers eux. Par ailleurs, il serait plus facile de taper l'adresse dans la barre d'adresse des navigateurs dans cette affaire.
Strong with this one, the sudo is.
  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8211
  • Loc: USA
  • Status: Offline

Message Novembre 12th, 2010, 9:25 pm

Bon, j'ai le texte suivant (Merci pour l'Enjeu sur le "isset ()" et le point...J'ai pris ce code d'un autre endroit dans mon site qui leur demande).

De toute façon...ce que j'ai est la suivante:

PHP Code: [ Select ]
<?php
// Default redirection page
$redirect = 'index.php';
       
// Checking if they came from another page
if(!empty($_GET['page']) && !strpos('/', $_GET['page']) && file_exists($_GET['page']))
{
    $redirect = $_GET['page'];
}
 
// Sending the user to the main page
header("LOCATION: {$redirect}");
?>
  1. <?php
  2. // Default redirection page
  3. $redirect = 'index.php';
  4.        
  5. // Checking if they came from another page
  6. if(!empty($_GET['page']) && !strpos('/', $_GET['page']) && file_exists($_GET['page']))
  7. {
  8.     $redirect = $_GET['page'];
  9. }
  10.  
  11. // Sending the user to the main page
  12. header("LOCATION: {$redirect}");
  13. ?>

Et ce n'est pas rediriger l'utilisateur vers une page spécifiée par "$ _GET [" page "]" comme il se doit...va juste "index.php".

L'en-tête de redirection est placé devant l'une des HTML est analysée.

[EDIT] Ive a également essayé le texte suivant...

PHP Code: [ Select ]
<?php
        // Checking if they came from another page
        if(!empty($_GET['page']))
        {
            $redirect = $_GET['page'];
        }
        else
        {
            $redirect = 'index.php';
        }
        echo $redirect;
        // Sending the user to the main page
        //header("LOCATION: {$redirect}");
?>
  1. <?php
  2.         // Checking if they came from another page
  3.         if(!empty($_GET['page']))
  4.         {
  5.             $redirect = $_GET['page'];
  6.         }
  7.         else
  8.         {
  9.             $redirect = 'index.php';
  10.         }
  11.         echo $redirect;
  12.         // Sending the user to the main page
  13.         //header("LOCATION: {$redirect}");
  14. ?>

Et cela ne fonctionne pas aussi bien...c'est toujours index.php quel que soit
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Inscription: Fév 10, 2004
  • Messages: 13455
  • Loc: Florida
  • Status: Offline

Message Novembre 13th, 2010, 12:33 am

Avez-vous été ajoutant manuellement? Page =*** à votre URL lors de l'essai, ou avez-vous été en utilisant le formulaire de connexion?

Si vous avez été en utilisant le formulaire de connexion, assurez-vous qu'il y compris votre variable page.
Strong with this one, the sudo is.
  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8211
  • Loc: USA
  • Status: Offline

Message Novembre 13th, 2010, 12:41 am

joebert a écrit:
Avez-vous été ajoutant manuellement? Page =*** à votre URL lors de l'essai, ou avez-vous été en utilisant le formulaire de connexion?

Si vous avez été en utilisant le formulaire de connexion, assurez-vous qu'il y compris votre variable page.

Ive étant ajoutant manuellement? Page =*** à l'URL, appuyez sur Entrée, puis connectez-vous et d'être redirigé vers l'index. php, peu importe ce que je mets la valeur à la page...Je n'ai aucune idée ce qui continue...

[EDIT] J'ai essayé le texte suivant...

PHP Code: [ Select ]
<?php
$redirect = $_GET['page'];
 
// Sending the user to the main page
header("LOCATION: {$redirect}");
?>
  1. <?php
  2. $redirect = $_GET['page'];
  3.  
  4. // Sending the user to the main page
  5. header("LOCATION: {$redirect}");
  6. ?>


Et je reçois l'erreur suivante

Quote:
Notice: Undefined index: page in / var / www / Projets / CMS / login.php on line 96


L'URL ressemble...

Quote:
http://localhost/Projects/CMS/login.php?page=test. php


Vous ne savez pas quoi faire ici...

[EDIT #2] Vous ne savez pas quoi faire ou ce qu'il faut rechercher...Voici l'intégralité du fichier...pourriez-vous remarquez quelque chose que je ne peux pas...

PHP Code: [ Select ]
<?php
 
/*
 * login.php
 *
 *
 */
 
// Security first
define('IN_CMS', true);
 
// Including the global file... without it, we don't have the system.
require_once('includes/init.php');
 
// Checking if the user is already logged in
if($sess->logged() != false)
{
    header("LOCATION: index.php");
}
 
// Defining the variables for the header
$tpl->title = "Log In to {$tpl->header}";
$tpl->description = "Log In to {$tpl->header} to be able to see and use all the member's only items.";
 
// Setting the error session (if required)
if(!isset($_SESSION['login_trials']))
{
    $_SESSION['login_trials'] = 0;
}
 
// Checking if the user has reached the error limit of failed login attempts
if($_SESSION['login_trials'] >= 4)
{
    $tpl->securityCode = true;
}
 
// Doing the page processing
if(isset($_POST['Submit']))
{
    // Initiating the error array
    $error = array();
 
    // Checking the username
    if($_POST['username'] == '' OR strlen($_POST['username']) > 20)
    {
        $error[] = "You need to put in a valid username that is under 20 characters.";
    }
    else
    {   // checking if the username exists
        $sql = $db->build_key_query(array('SELECT'  => 'username',
                                          'FROM'    => USER_TABLE,
                                          'WHERE'   => array("username" => $_POST['username'],
                                                             "password" => md5($_POST['password']))));
       
        // Counting if we have a username by the submitted username
        if($db->num_rows($sql) == 0)
        {
            $error[] = "The username / password combination was incorrect. Please try again.";
           
            // Making sure that the user doesn't attempt more then the defined times
            $_SESSION['login_trials'] += 1;
        }
    }
   
    // Checking the Password
    if($_POST['password'] == '' OR strlen($_POST['password']) > 20)
    {
        $error[] = "You need to put in a valid password that is under 20 characters.";
    }
   
    // Checking if the user has reached the error limit of failed login attempts
    if($_SESSION['login_trials'] > 5)
    {
        // Checking the CAPTCHA / Security Code
        if(strtolower($_SESSION['qwerty']) != strtolower($_POST['qwerty']))
        {
            $error[] = "You need to type in the Correct Security code. It is not case sensitive.";
        }
    }
   
    // Checking for any errors in the submittion
    if(count($error) > 0)
    {
        $tpl->formErrors = $error;
    }
    else
    {
        // Removing the failed login trials session entry
        unset($_SESSION['login_trials']);
       
        // We are logging the user in here since everything checked out
        $_SESSION['u_logged_in'] = $db->_get_('userID', USER_TABLE, array("username" => $_POST['username'],
                                                                          "password" => md5($_POST['password'])));
       
        $redirect = $_GET['page'];
 
        // Sending the user to the main page
        header("LOCATION: {$redirect}");
    }
}
 
// Setting the required template variables to display
$tpl->loginFormMethod = 'post';
$tpl->loginFormAction = 'login.php';
 
// Displaying the page here
$tpl->display('header', 'login', 'footer');
?>
  1. <?php
  2.  
  3. /*
  4.  * login.php
  5.  *
  6.  *
  7.  */
  8.  
  9. // Security first
  10. define('IN_CMS', true);
  11.  
  12. // Including the global file... without it, we don't have the system.
  13. require_once('includes/init.php');
  14.  
  15. // Checking if the user is already logged in
  16. if($sess->logged() != false)
  17. {
  18.     header("LOCATION: index.php");
  19. }
  20.  
  21. // Defining the variables for the header
  22. $tpl->title = "Log In to {$tpl->header}";
  23. $tpl->description = "Log In to {$tpl->header} to be able to see and use all the member's only items.";
  24.  
  25. // Setting the error session (if required)
  26. if(!isset($_SESSION['login_trials']))
  27. {
  28.     $_SESSION['login_trials'] = 0;
  29. }
  30.  
  31. // Checking if the user has reached the error limit of failed login attempts
  32. if($_SESSION['login_trials'] >= 4)
  33. {
  34.     $tpl->securityCode = true;
  35. }
  36.  
  37. // Doing the page processing
  38. if(isset($_POST['Submit']))
  39. {
  40.     // Initiating the error array
  41.     $error = array();
  42.  
  43.     // Checking the username
  44.     if($_POST['username'] == '' OR strlen($_POST['username']) > 20)
  45.     {
  46.         $error[] = "You need to put in a valid username that is under 20 characters.";
  47.     }
  48.     else
  49.     {   // checking if the username exists
  50.         $sql = $db->build_key_query(array('SELECT'  => 'username',
  51.                                           'FROM'    => USER_TABLE,
  52.                                           'WHERE'   => array("username" => $_POST['username'],
  53.                                                              "password" => md5($_POST['password']))));
  54.        
  55.         // Counting if we have a username by the submitted username
  56.         if($db->num_rows($sql) == 0)
  57.         {
  58.             $error[] = "The username / password combination was incorrect. Please try again.";
  59.            
  60.             // Making sure that the user doesn't attempt more then the defined times
  61.             $_SESSION['login_trials'] += 1;
  62.         }
  63.     }
  64.    
  65.     // Checking the Password
  66.     if($_POST['password'] == '' OR strlen($_POST['password']) > 20)
  67.     {
  68.         $error[] = "You need to put in a valid password that is under 20 characters.";
  69.     }
  70.    
  71.     // Checking if the user has reached the error limit of failed login attempts
  72.     if($_SESSION['login_trials'] > 5)
  73.     {
  74.         // Checking the CAPTCHA / Security Code
  75.         if(strtolower($_SESSION['qwerty']) != strtolower($_POST['qwerty']))
  76.         {
  77.             $error[] = "You need to type in the Correct Security code. It is not case sensitive.";
  78.         }
  79.     }
  80.    
  81.     // Checking for any errors in the submittion
  82.     if(count($error) > 0)
  83.     {
  84.         $tpl->formErrors = $error;
  85.     }
  86.     else
  87.     {
  88.         // Removing the failed login trials session entry
  89.         unset($_SESSION['login_trials']);
  90.        
  91.         // We are logging the user in here since everything checked out
  92.         $_SESSION['u_logged_in'] = $db->_get_('userID', USER_TABLE, array("username" => $_POST['username'],
  93.                                                                           "password" => md5($_POST['password'])));
  94.        
  95.         $redirect = $_GET['page'];
  96.  
  97.         // Sending the user to the main page
  98.         header("LOCATION: {$redirect}");
  99.     }
  100. }
  101.  
  102. // Setting the required template variables to display
  103. $tpl->loginFormMethod = 'post';
  104. $tpl->loginFormAction = 'login.php';
  105.  
  106. // Displaying the page here
  107. $tpl->display('header', 'login', 'footer');
  108. ?>
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • SpooF
  • ٩๏̯͡๏۶
  • Bronze Member
  • Avatar de l’utilisateur
  • Inscription: Mai 22, 2004
  • Messages: 3415
  • Loc: Richland, WA
  • Status: Offline

Message Novembre 13th, 2010, 12:55 am

Cette erreur fait comme si il n'y a pas d'index "page" dans la variable $ _GET.
#define NULL (::rand() % 2)
  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8211
  • Loc: USA
  • Status: Offline

Message Novembre 13th, 2010, 1:06 am

Oui...Je n'ai aucune idée pourquoi même si, comme Im le faisant passer dans l'URL...pourquoi serait-il fait ces bêtises?

Je mets echo $ rediriger; à la ligne 96 et il n'a pas d'écho rien...mais si je mets echo $ _GET ["page"]; à la ligne 20, il fait écho à test.php...ce que le?
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8211
  • Loc: USA
  • Status: Offline

Message Novembre 13th, 2010, 1:13 am

Nevermind, mon cerveau simple oublier que peu importe ce que je mets dans l'URL, l'action du formulaire n'a pas cette :(

:lol: De toute façon...Je l'ai eu fixe.

Mon autre problème...$ _SERVER ["PHP_SELF"] renvoie / chemin / vers / fichier. php et Im essayant de conserver en toute sécurité en ne permettant pas les tirets...

Devrais-je permettre à des tirets ou devrais-je utiliser regex pour recevoir seulement les "fichier.php" partie? Si j'ai besoin d'utiliser un autre problème theres regex...Je ne sais pas regex...
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Inscription: Fév 10, 2004
  • Messages: 13455
  • Loc: Florida
  • Status: Offline

Message Novembre 13th, 2010, 1:40 am

N'employez pas $ _SERVER ["PHP_SELF"], $ _SERVER ["SCRIPT_FILENAME"] à la place. SCRIPT_FILENAME ne contiennent PATH_INFO (ex: "/ index.php / path-info") et elle prend également en considération les liens symboliques sur le serveur, tandis que la constante __FILE__ ne fonctionne pas.

basename () permet de récupérer le "fichier.php" partie de SCRIPT_FILENAME, et dirname () pour obtenir le répertoire de travail.
Strong with this one, the sudo is.
  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8211
  • Loc: USA
  • Status: Offline

Message Novembre 14th, 2010, 1:29 pm

Oh ok, merci pour le heads up. Cela fonctionne parfaitement :)
"Bring forth therefore fruits meet for repentance:" Matthew 3:8

Afficher de l'information

  • Total des messages de ce sujet: 12 messages
  • Utilisateurs parcourant ce forum: ScottG et 244 invités
  • Vous ne pouvez pas poster de nouveaux sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas éditer vos messages
  • Vous ne pouvez pas supprimer vos messages
  • Vous ne pouvez pas joindre des fichiers
 
 

© 2011 Unmelted, LLC. Ozzu® est une marque déposée de Unmelted, LLC