Visualizzazione dei risultati da 1 a 4 su 4

Discussione: rafforzare codice php

  1. #1

    rafforzare codice php

    salve io ho questo codice di login... ma vorrei rafforzarlo.. per essere più sicuro come codice.. qualche suggerimento?
    Codice PHP:
    <?php


    if (!defined("IN_BTIT"))
          die(
    "non direct access!");


    require_once(
    load_language("lang_login.php"));

    function 
    login() {
     
       global 
    $language$logintpl;

        
    $logintpl->set("language",$language);
        
    $language["INSERT_USERNAME"]=AddSlashes($language["INSERT_USERNAME"]);
        
    $language["INSERT_PASSWORD"]=AddSlashes($language["INSERT_PASSWORD"]);

        
    $login=array();
        
    $login["action"]="index.php?page=login&amp;returnto=".urlencode("index.php")."";
        
    $login["username"]=$user;
        
    $login["create"]="index.php?page=signup";
        
    $login["recover"]="index.php?page=recover";
        
    $logintpl->set("login",$login);
    }


    $logintpl=new bTemplate();


    if (!
    $CURUSER || $CURUSER["uid"]==1) {


    if (isset(
    $_POST["uid"]) && $_POST["uid"])
      
    $user=$_POST["uid"];
    else 
    $user='';
    if (isset(
    $_POST["pwd"]) && $_POST["pwd"])
      
    $pwd=$_POST["pwd"];
    else 
    $pwd='';

    if (isset(
    $_POST["uid"]) && isset($_POST["pwd"]))
      {
        if (
    $FORUMLINK=="smf")
            
    $smf_pass sha1(strtolower($user) . $pwd);
            
    $res do_sqlquery("SELECT u.id, u.random, u.password".(($FORUMLINK=="smf") ? ", u.smf_fid, s.passwd, s.passwordSalt" "")." FROM {$TABLE_PREFIX}users u ".(($FORUMLINK=="smf") ? "LEFT JOIN {$db_prefix}members s ON u.smf_fid=s.ID_MEMBER" "" )." WHERE u.username ='".AddSlashes($user)."'",true);
            
    $row mysql_fetch_array($res);

        if (!
    $row)
            {
              
    $logintpl->set("FALSE_USER",true,true);
              
    $logintpl->set("FALSE_PASSWORD",false,true);
              
    $logintpl->set("login_username_incorrect",$language["ERR_USERNAME_INCORRECT"]);
              
    login();
            }
        elseif (
    md5($row["random"].$row["password"].$row["random"]) != md5($row["random"].md5($pwd).$row["random"]))
            {
              
    $logintpl->set("FALSE_USER",false,true);
              
    $logintpl->set("FALSE_PASSWORD",true,true);
              
    $logintpl->set("login_password_incorrect",$language["ERR_PASSWORD_INCORRECT"]);
              
    login();
            }
        else
          {
           
            
    logincookie($row["id"],md5($row["random"].$row["password"].$row["random"]));
            if (
    $FORUMLINK=="smf" && $smf_pass==$row["passwd"])
                
    set_smf_cookie($row["smf_fid"], $row["passwd"], $row["passwordSalt"]);
            elseif (
    $FORUMLINK=="smf" && $row["password"]==$row["passwd"])
            {
                
    $salt=substr(md5(rand()), 04);
                @
    mysql_query("UPDATE {$db_prefix}members SET passwd='$smf_pass', passwordSalt='$salt' WHERE ID_MEMBER=".$row["smf_fid"]);
                
    set_smf_cookie($row["smf_fid"], $smf_pass$salt);
            }
            if (isset(
    $_GET["returnto"]))
               
    $url=urldecode($_GET["returnto"]);
            else
                
    $url="index.php";
            
    redirect($url);
            die();
          }
      }

    else
      {
        
    $logintpl->set("FALSE_USER",false,true);
        
    $logintpl->set("FALSE_PASSWORD",false,true);
        
    login();
      }






    }
    else {

      if (isset(
    $_GET["returnto"]))
         
    $url=urldecode($_GET["returnto"]);
      else
          
    $url="index.php";
      
    redirect($url);
      die();
    }
    ?>

  2. #2
    nessun suggerimento?

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    813
    beh...il codice non sembra mancante di solidità, a prima vista.
    Cmq, io non metterei in condizione all'utente di conoscere se sta sbagliato nome utente o la password.
    Fai spuntare solo "nome utente e/o password errata"
    Facendo in quel modo, ad un eventuale attacco tu dai la possibilità di sapere che un determinato utente è registrato o meno.
    E' vero, è un pagliativo (ovvero, che se l'hacker vuole attaccare, basta che si registra e vede se un particolare username è stato usato)
    Quindi, potresti usare l'email come login, anziché di un nome utente.

    vedo che fai largo uso di questa cosa
    md5(row["random"].$row["password"].$row["random"])
    è bellissima. Appunto per questa crea una nuova funzione, così da non dover ripetere l'operazione

    fai md5Improved($row)
    sarà lui a richiamare la chiave password e random

    questi sono i miei consigli
    Nell'anno 1968 è bastata la potenza di due Commodore 64 per lanciare con successo una navicella sulla Luna; nell'anno 2007 ci vogliono la potenza di un processore quad core 3.30 GHz e 3 Gb di RAM (requisiti minimi ufficiali) per utilizzare Windows Vista. Qualcosa deve essere andato storto!

  4. #4
    ottimo consiglio se ne avete altri suggeritemeli

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.