Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    aiuto programmazione sito

    Salve a tutto il forum, sono nuovo della programazzione in PHP e questo sito mi è stato segnalato da PHP solution, la rivista che sto comprando per programmare in questo linguaggio.
    Il problema è questo, vengo subito al dunque, sono il programmatore di un piccolo sito (ecco l'indirizzo http://www.openfreedom.org), il quale ha lo scopo di integrare alcune idee di tipo open source, per questo è stato scelto un host con Linux come S.O, php come linguaggio per creare le pagine e MySQL come DB relazionale. Il problema che è emerso (oltre ad latri che in seguito riporterò) è la sicurezza della fase di registrazione e login di un utente. La pagina (di seguito riporto il codice utilizzato) è stata creata utilizzando degli script trovati sul libro PHP 5 guida dper lo sviluppatore della Wrox. La questione è che una delle tabelle utilizzate nello script (lo script prevede un prima fase di identificazione con la tabella utenti ed una seconda fase di aggiornamento della tabella che tiene traccia di chi si connette), quella relativa alle tracce di chi si connete si è riempita di dati non relativi agli utenti registrati, come se qualcuno avesse inserito nominativi strani nel login e lo script li avesse accettati senza fare il controllo.
    Il codice della pagina è il seguente:

    <?php
    session_start();
    session_register('useralias', 'userpassword');
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html lang="it"><head><title>www.openfreedom.org</title>
    <link rel="stylesheet" href="slackwarelife_dir/style.css" type="text/css">
    <link rel="shortcut icon" type="image/ico" href="http://www.openfreedom.org/favicon.ico">
    <link rel="alternate" type="application/rss+xml" title="slackwarelife rss" href="http://www.openfreedom.org/rss/news.xml">
    <link rel="alternate" type="application/rss+xml" title="slackware-current ChangeLog" href="http://slackware.it/rss/snap_slackware-current.xml">
    <meta name="description" content="open freedom">
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head>

    <body>

    <table class="main" align="center" cellpadding="0" cellspacing="0">
    <tbody><tr>

    <td align="left" valign="top" width="170">
    <table cellpadding="0" cellspacing="0" width="170">
    <tbody><tr><td height="170">
    </td></tr>
    </tbody></table>

    <table id="menu" cellspacing="10"><tbody><tr>
    <td nowrap="nowrap">
    <ul class="menu">[*]home[/list]
    </td>
    </tr>
    <tr>
    <td nowrap="nowrap">
    <ul class="menu">[*]chi sono[*]contatti[*]links[*]rss[*]downloads[*]documentazione[*]contributi[*]registrazione[/list]
    </td></tr>
    </tbody></table>

    <td class="page" valign="top" width="568">
    [img]slackwarelife_dir/logo.jpg[/img]

    <div class="top">
    Benevenuto sul sito openfreedom.org


    </div>
    <table class="box" align="center" width="95%"><tbody><tr><td>




    <?php
    include("/web/htdocs/www.openfreedom.org/home/privato/news.php")
    ?>

    </td>
    </tr>
    </tbody></table>
    </td>

    <td align="left" valign="top" width="170">
    <table cellpadding="0" cellspacing="0" width="170">
    <tbody><tr><td height="170">
    </td></tr>
    </tbody></table>

    <?php
    require_once ('/web/htdocs/www.openfreedom.org/home/privato/common_db.inc');
    $exclude_dirs = array('/info', '/contact');
    $exclude_files = array('index.html', 'info.html', 'register.php');
    $user_tablename = 'user';
    $access_log_tablename = 'access_log';
    $PHP_SELF = $_SERVER['PHP_SELF'];


    if (!$_SESSION['useralias']){
    $filepath = dirname($_SERVER['SCRIPT_FILENAME']);
    $filename = basename($_SERVER['SCRIPT_FILENAME']);
    if($filepath == '') $filepath = '/';

    $auth_done = 0;

    for($j=0; $j < count($exclude_dirs); $j++) {
    if($exclude_dirs[$j] == $filepath) break;
    else {
    for($i=0; $i< count($exclude_files); $i++) {

    if($exclude_files[$i] == $filename) break;

    if ($i == (count($exclude_files) - 1)){

    do_authentication();
    $auth_done = 1;
    break;
    }
    }
    }
    if($auth_done) break;
    }
    }
    login_ok();

    if ($_SESSION['useralias'] && $_SESSION['userpassword']){
    $useralias = $_SESSION['useralias'];
    $filename = basename($_SERVER['SCRIPT_FILENAME']);
    $link_id = db_connect($default_dbname);
    $query = "SELECT useralias FROM $access_log_tablename
    WHERE page = '$filename'
    AND useralias = '$useralias'";
    $result = mysql_query($query);

    if(!mysql_num_rows($result))

    $query = "INSERT INTO $access_log_tablename
    VALUES ('$filename', '$useralias', 1, NULL)";
    else $query = "UPDATE $access_log_tablename
    SET visitcount = visitcount + 1, accessdate = NULL
    WHERE page = '$filename' AND useralias = '$useralias'";

    mysql_query($query);

    $num_rows = mysql_affected_rows($link_id);
    if($num_rows != 1) die(sql_error());

    }


    function do_authentication() {
    global $default_dbname, $user_tablename, $access_log_tablename;
    global $MYSQL_ERROR, $MYSQL_ERRNO;
    global $filename;
    global $PHP_SELF;

    if(!isset($_POST['useralias'])) {
    login_form();
    exit;
    }


    else {
    $_SESSION['userpassword'] = $_POST['userpassword'];
    $_SESSION['useralias'] = $_POST['useralias']; }
    $useralias = $_POST['useralias'];
    $userpassword = $_POST['userpassword'];
    $link_id = db_connect($default_dbname);
    $query = "SELECT username FROM $user_tablename
    WHERE useralias = '$useralias'
    AND userpassword = password('$userpassword')";
    $result = mysql_query($query);


    if(!mysql_num_rows($result)) {
    session_unregister("useralias");
    login_filed();
    exit;
    }


    else {
    $query = "SELECT useralias FROM $access_log_tablename
    WHERE page = '$filename'
    AND useralias = '$useralias'";
    $result = mysql_query($query);

    if(!mysql_num_rows($result))

    $query = "INSERT INTO $access_log_tablename
    VALUES ('$filename', '$useralias', 1, NULL)";
    else $query = "UPDATE $access_log_tablename
    SET visitcount = visitcount + 1, accessdate = NULL
    WHERE page = '$filename' AND useralias = '$useralias'";

    mysql_query($query);

    $num_rows = mysql_affected_rows($link_id);
    if($num_rows != 1) die(sql_error());
    }
    }

    function login_form() {
    global $PHP_SELF;
    ?>
    <table class="login" cellpadding="0" cellspacing="0" width="100%"><tbody><tr>
    <td align="left" bgcolor="#ffffff" valign="top" width="150">
    <tr>
    <td><center>
    <form method="post" action="<? echo $PHP_SELF ?>">
    Username:
    <input name="useralias" size="8" type="text">

    Password:
    <input name="userpassword" size="8" type="password">


    <input type="submit" value="entra" name="Submit">
    </form></center></td>
    </tr>
    </tbody></table>
    </td></tr>

    <tr><td></td><td class="bottom"><center>
    <font class="small">2005 Forti Massimo - Slackwarelife</font>

    <a href="http://validator.w3.org/check/referer" target="_blank">
    [img]slackwarelife_dir/valid-html401.jpg[/img]</a>
    <a href="http://jigsaw.w3.org/css-validator/" target="_blank">
    [img]slackwarelife_dir/vcss.jpg[/img]</a>
    </center></td><td></td></tr></tbody></table>
    </body></html>
    <?
    }
    function login_ok() {
    $user = $_SESSION['useralias'];
    ?>
    <table class="login" cellpadding="0" cellspacing="0" width="100%"><tbody><tr>
    <td align="left" bgcolor="#ffffff" valign="top" width="150">
    <tr>
    <td><center>
    Benvenuto <? echo $user ?>

    Per modificare i tuoi dati clicca
    QUI
    </center></td>
    </tr>
    </tbody></table>
    </td></tr>

    <tr><td></td><td class="bottom"><center>
    <font class="small">2005 Forti Massimo - Slackwarelife</font>

    <a href="http://validator.w3.org/check/referer" target="_blank">
    [img]slackwarelife_dir/valid-html401.jpg[/img]</a>
    <a href="http://jigsaw.w3.org/css-validator/" target="_blank">
    [img]slackwarelife_dir/vcss.jpg[/img]</a>
    </center></td><td></td></tr></tbody></table>
    </body></html>
    <?
    }
    function login_filed() {
    ?>
    <table class="login" cellpadding="0" cellspacing="0" width="100%"><tbody><tr>
    <td align="left" bgcolor="#ffffff" valign="top" width="150">
    <tr>
    <td><center>
    Errore di connessione!!!!

    Hai inserito username e password non validi!!!!

    Ritenta clliccando
    QUI

    Per richiedere la password persa clicca
    QUI

    Oppure accedi alla pagina di registrazione
    QUI

    </center></td>
    </tr>
    </tbody></table>
    </td></tr>

    <tr><td></td><td class="bottom"><center>
    <font class="small">2005 Forti Massimo - Slackwarelife</font>

    <a href="http://validator.w3.org/check/referer" target="_blank">
    [img]slackwarelife_dir/valid-html401.jpg[/img]</a>
    <a href="http://jigsaw.w3.org/css-validator/" target="_blank">
    [img]slackwarelife_dir/vcss.jpg[/img]</a>
    </center></td><td></td></tr></tbody></table>
    </body></html>
    <?
    }
    ?>

    Questa pagina funziona, ma non riesco a capire se è sicura, in rete non ho trovato cose tanto differenti, ma la paura è tanta, e la situazione descritta prima mi preoccupa.
    Inoltre volevo chiedervi come poter indrodurre l'utilizzo dei cookies, chiedendo all'utente se vuole utilizzare tale sistema per poter effettuare il login automatica al prossimo accesso.
    Vi chiedo aiuto, le cose che devo chiedere sono tante ed ogni aiuto per poter far crescere questo piccolo progetto saranno molto, molto gradite.

    Grazie in anticipo
    Follow the source
    Slackware GNU/Linux

  2. #2
    non ti aspetterai che mi legga e interpreti tuto quel codice no?

    visto che sei nuovo ti spiego come funziona in genere: in genere per un problema specifico si postano quelle 4-5 righe di codice interessate... e per un problema generico si parla "in italiano"... ovvero si parlain maniera astratta delle procedure (se vuoi degli algoritmi) da adottare per risolvere il problema.. solo in un secondo momento (in caso di dubbi o di cose che lo richiedano) si passa al codice.. un probleema così grande non può essere affrontato direttamente in codice, altrimenti diventa lavoro non pagato per chi risponde, perchè deve fare le cose al posto tuo e non spiegarti semplicemente come si fanno ^__^

  3. #3
    Ok hai ragione, il codice viene dopo, ma allora spiegami una cosa, come posso testare la sicurezza dei miei script, come posso verificare che sto dano agli utenti la certezza che i loro dati non verrano divulati in rete.

    Grazie
    Follow the source
    Slackware GNU/Linux

  4. #4
    esperienza...

    cmq anche usato malino php è discretamente sicuro rispetto ad altri linguaggi... nelle configurazoni più generiche si sostituisce al programmatore in alcune occasioni... poi i miracoli nonli può fare..

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 © 2025 vBulletin Solutions, Inc. All rights reserved.