För er PHP gurus

Avdelningen för webbrelaterad programmering och grafisk design.
Post Reply
User avatar
Spixx
Posts: 1613
Joined: 2004-03-20 16:47:34
Contact:

För er PHP gurus

Post by Spixx »

Jag håller på och knåpar med ett par saker och en av dem är att skapa ett loginsystem, detta skall även innehålla lite funktioner bundna till den inloggade personen. Vad jag behöver hjälp med är 1. lite snabb respons på hur jag kodar (håller på och lär mig samtidigt) 2. hur man "saltar" ett lösenord (ursäkta om den frågan lät konstig, noobig eller liknande har hört frasen hos någon och gissar att den har att göra med säkrare lösenord) så duger md5hash som jag gör nu? eller bör man ha något säkrare. Hur praktiskt är det att använda säg av ännu tyngre skydd?

Här har ni ALL kod :D

dbconnect.inc.php

Code: Select all

<?php

$server = '256555j767jr6jr6';
$user = 'upyukytukykytuku';
$pass = '12ykytk6r5k';
$db = 'up67k878tk78ke';

$link = mysql_connect($server,$user,$pass);
	if (!$link) {
		die('<font color="red">Could not connect:</font> ' . mysql_error(). ' <br /> ');
	}
	else {
		echo ('SQL: <font color="green"> Online</font><br />');
	}

$db_link = mysql_select_db($db);
	if (!$link) {
		die('<font color="red">Could not connect:</font> ' . mysql_error(). ' <br /> ');
	}
	else {
		echo ('DB: <font color="green"> Online</font><br />');
	}
?>
Denna kod är bland annat lånad från phpsidan (simple loginsystem 1.3)

Code: Select all

<?php 
if(
    isset( $_POST['username'] ) &&
    isset( $_POST['password'] ) &&
    isset( $_POST['mail']
)
{
    if( strlen( $_POST['username'] ) < 4 )
    {
	    $feedback[] = 'Please use more then 4 characters in the username';
    }
	    elseif( strlen( $_POST['password'] ) < 4 )
	    {
	        $feedback[] = 'Please use more then 4 characters in the password';
	    }
	    elseif( $_POST['password'] == $_POST['username'] )
	    {
	        $feedback[] = 'Honestly how dumb are you? Who uses the username as a password?';
	    }
	    elseif( strlen( $_POST['password'] ) < 0 )
	    {
	        $feedback[] = 'Please add your e-mail adress!';
	    }
    else
    {
        require_once( 'inc/dbconnect.inc.php' );
        $username = mysql_real_escape_string( $_POST['username'] );
        $password = md5( $_POST['password'] );
    
        $sqlCheckForDuplicate = "SELECT id FROM users WHERE username = '". $username ."'";

        if( mysql_num_rows( mysql_query( $sqlCheckForDuplicate ) ) == 0 )
        {
            $sqlRegUser = "INSERT INTO users( username, password, mail ) VALUES('". $username ."','". $password ."','". $mail ."')";

            if( !mysql_query( $sqlRegUser ) )
            {
                $feedback[] = 'Error: the database were unresponsive retry in 5 seconds';
            }
            else
            {
                $feedback[] = 'You are now one step closer to God';
            }
        }
        else
        {
            $feedback[] = 'The username are in use please choose another one.';
        }
    }
else
{
    $feedback[] = 'Error: The process was aborted due to the fact of you being a moron';
}?>
User avatar
madr
Posts: 998
Joined: 2004-08-24 11:12:39
Contact:

Post by madr »

Kika på PDO och prepared statements. Det dödar SQL injections mycket effektivt.

Själv har jag ett objekt user som jag använder för att spara data om en inloggad användare:

Code: Select all

class user
{
     bool isOnline() {}
     void login() {}
     void logout() {}
     int getId() {}
     string getName() {}
     [...] // litet annat bös
}
Klassen gör egentligen ingenting annat än att hantera sessioner och ev. cookies. Den använder singleton, men det skulle gå lika bra att göra alla metoder statiska.

Code: Select all

// som jag gör nu
$user = user::getInstance();
$id = $user->getId();

// kan också göras såhär:
$id = user::getId();
antlion: 3,2 GHz i7 | 32GB | 180GB+120GB SSD SATA III | 2TB SATA III | Dell u2410 | GF 5600ti Arch linux + Win 7
User avatar
IcePic
Hedersbit
Posts: 6061
Joined: 2002-03-08 16:09:38

Post by IcePic »

Om jag inte läser fel så tvättar du inte emailadressen, medans du gör det för usernamn och password (om än via md5). Det är nog dåligt.
Oh give me a clone, my very own clone,
with the Y chromosome changed to X!
And since she's my own, of my own flesh and bone,
she'll be thinking of nothing but sex!
User avatar
Spixx
Posts: 1613
Joined: 2004-03-20 16:47:34
Contact:

Post by Spixx »

lade till

Code: Select all

$mail = mysql_real_escape_string( $_POST['mail'] );
Är det vad du syftade på :S?
User avatar
IcePic
Hedersbit
Posts: 6061
Joined: 2002-03-08 16:09:38

Post by IcePic »

SpiXx^Orginalet wrote:lade till

Code: Select all

$mail = mysql_real_escape_string( $_POST['mail'] );
Är det vad du syftade på :S?
Japp.
Oh give me a clone, my very own clone,
with the Y chromosome changed to X!
And since she's my own, of my own flesh and bone,
she'll be thinking of nothing but sex!
User avatar
Spixx
Posts: 1613
Joined: 2004-03-20 16:47:34
Contact:

Post by Spixx »

tackar, vad det gäller att salta? Var det en "korrekt" term eller grep jag efter luft där :P? såg även andra småsaker med scriptet som att mailen pekar emot password osv osv. (påpeka icke detta :P)
Post Reply