Avatar billede superdan Nybegynder
09. april 2003 - 05:17 Der er 6 kommentarer og
1 løsning

ER DET MULIGT???

Er det muligt at lave kryptering der virker bare nogenlunde sikkert via PHP???

Jeg har nemlig det problem at min apache går ned hver gang jeg kører openssl.

Det er win32 udgaven af apache jeg har (phptriad)

Ideen er at logge ind via en form der sætter variablerne $username og $password.
Avatar billede sukos Juniormester
09. april 2003 - 06:09 #1
Bruger selv md5()

Nu roder jeg heller ikke med sider som "SKAL VÆRE SIKRE", dog med en form for minimal sikkerhed.
Avatar billede sukos Juniormester
09. april 2003 - 06:10 #2
Men det bedste er vel at få din apache til at fungere med Openssl
Avatar billede tuxic Nybegynder
01. maj 2003 - 19:59 #3
md5 er en hash funktion og derved kan den ikke dekrypteres. Desuden er md5 i php jo server side. Så det beskytter jo ikke heller ikke data under transporten fra browseren til klienten. Det bedste er klart at bruge en ssl.
Avatar billede jawz Nybegynder
28. maj 2003 - 15:41 #4
Der findes et javascript til at lave md5 (og SHA1) hashing på client siden, det gør det nogenlunde sikkert.
javascriptet kan hentes her: http://pajhome.org.uk/crypt/md5/

Jeg er selv igang med at lave php authentication program, men er lidt usikker på om det er beskyttet overfor "replay" angreb. Koden kommer herunder, jeg vil gerne have kommentarer til sikkerheden, specielt mht. random og om den hjælper på sikkerheden.

<?php
require_once("StaticDB.php");

class MD5Login{
   
    var $db;
   
    function MD5Login(){
        $this->db =& new StaticDB("host", "user", "password", "db");
       
        session_start();
        session_register('login');
        session_register('password');
        session_register('random');
               
        if ( isset($_SESSION['random']) && isset($_SESSION['password']) && isset($_SESSION['login'])) {
            $this->authenticateSession( $_SESSION['login'], $_SESSION['password'], $_SESSION['random'] );
        }
        else{
            if( isset($_POST['password']) && $_POST['password'] != '' && isset($_POST['login']) && isset($_POST['random']) ){
                $this->authenticatePost($_POST['login'], $_POST['password'], $_POST['random']);
            }
            else{
                $this->loginForm();
            }
        }
    }
   
    function authenticateSession($login, $password, $random ){
        $dbpw = md5( $this->db->getOneResult("SELECT password FROM kunder WHERE login = '$login'") ."". $random );
        if( $password == $dbpw ){
            $_SESSION['random'] = mt_rand();
            $_SESSION['password'] = md5( $this->db->getOneResult("SELECT password FROM kunder WHERE login = '$login'") ."". $_SESSION['random'] );
            $this->loggedin();   
        }
        else{
            echo "Forkert session password";
            $this->reloadself();
        }
    }
   
    function authenticatePost($login, $password, $random ){
        $dbpw = md5( $this->db->getOneResult("SELECT password FROM kunder WHERE login = '$login'") ."". $_SESSION['random'] );
        if ( $random == md5($_SESSION['random']) ) {
            if( $password == $dbpw ){
                $_SESSION['login'] = $login;
                $_SESSION['password'] = $password;
                $this->reloadself();
            }
            else{
                echo "Forkert posted password";
                session_unregister('login');
                session_unregister('password');
                session_unregister('random');
                $this->reloadself();
            }
        }
        else{
            echo "FEJL i post authentication";
            $this->reloadself();
        }
    }
   
    function loginForm(){
        $_SESSION['random'] = mt_rand();
        echo "
        <html>
        <head>
        <script language=\"JavaScript\" src=\"../javascript/md5.js\"></script>
        <script language=\"JavaScript\">
            function onformsubmit() {
                var f = document.forms[0];
                if (!f) {   
                    alert('incompatible browser');
                    return false;
                }
                f.password.value = calcMD5( f.password.value + \"\" + f.random.value );
                f.random.value = calcMD5( f.random.value );
                return true;
            }
        </SCRIPT>

        </head>
        <body><center>
        <form onSubmit=\"return onformsubmit();\" NAME=\"logon\" METHOD=\"POST\" ACTION=" . $_SERVER['PHP_SELF'] . ">
        <input TYPE=\"hidden\" NAME=\"random\" VALUE=\"" . $_SESSION['random'] . "\">
        login:<input TYPE=\"TEXT\" NAME=\"login\"><BR>
        password:<input TYPE=\"PASSWORD\" NAME=\"password\"><BR>           
        <input TYPE=\"Submit\" VALUE=\"Logon\">
        </form>

        </center>
        </body></html>";
        exit;
    }
   
    function reloadself() {
        echo "<SCRIPT LANGUAGE=\"Javascript\">this.location = document.location;</script>";
    }
       
    function loggedin(){
        echo "<SCRIPT>
        function logout(){
            window.open(\"Logout.php\")
            this.location = document.location;
        }
        </SCRIPT>";
        echo "Du er nu logged ind!! tilykke<BR>
        vil du logge ud? <a HREF=\"java script: logout()\">Logud</a>";
    }
}

new MD5Login();
?>
Avatar billede tzr Nybegynder
17. september 2003 - 20:22 #5
det system som jeg bruger på min side har jeg selv konstrueret (keyword: konstrueret, ikke opfundet, selvom jeg egentlig selv kom på idéen, men fandt ud af jeg ik var den eneste med den idé, øv øv), men her er hvordan det virker:

1. Login siden åbnes, hvor serveren har lagt et tilfældigt tal med
2. Bruger indtaster sit brugernavn og password
3. JavaScriptet laver et MD5 af (det tilfældige tal + password)
4. Brugernavn sendes ukrypteret til serveren sammen med det 'krypteret' password.
(husk at javascriptet skal fjerne passwordet fra formen inden den sendes, ellers er det hele jo lidt ligemeget)
5. Serveren gør fuldstændig det samme med passwordet i databasen og det tilfældige tal og sammenligner det med det der kom fra klienten. Hvis de er ens må brugeren jo have indtastet det rigtige password.

Hvorfor det tilfældige tal ?
jo, for hvis en hacker opsnapper MD5'et uden der er brugt tilfældigt tal, kan han bare duplikere det og sende det til serveren igen. Ergo, MD5'et skal være forskelligt hver gang, selvom der er samme password, ellers kan du lige så godt lade være med at kryptere :)

Som jawz sagde findes der javascript til at lave md5 på klienten, og md5 er indbyggede funktioner i både php og mySQL (og sikkert også i MS SQL og PosgreSQL, men det er ik noget jeg tør sværge på).

med hensyn til mySQL, så i min version bliver md5'et på serversiden genereret på mySQL serveren, hvilket gør at selve php-parseren aldrig nogensinde ser passwordet, hvilket mindsker risikoen for en lækage

Håber du kan bruge det til noget :)
Mvh Kenneth
Avatar billede tzr Nybegynder
20. september 2003 - 11:57 #6
fandt lige ud af noget interessant. Dette system hedder "One Time Password System" (OTP) og kan læses, i sin nyere version fra 1998, i IETF's RFC 2289.

Jeg kan bedst li pdf :)
ftp://ftp.rfc-editor.org/in-notes/pdfrfc/rfc2289.txt.pdf
Avatar billede tzr Nybegynder
28. september 2003 - 11:08 #7
feedback superdan ?!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester