Gå til innhold

Hvordan lage en login-side som er trygg + enkel?


Anbefalte innlegg

Skrevet

bruker du dreamweaver til å se på sidene med?

prøv med en vanlig browser.

det skal stå:

 

PHP virker

 

hvis php funker og:

 

php virker ikke

 

hvis php ikke funker.

Videoannonse
Annonse
Skrevet
bruker du dreamweaver til å se på sidene med?

prøv med en vanlig browser.

det skal stå:

 

PHP virker

 

hvis php funker og:

 

php virker ikke

 

hvis php ikke funker.

8498802[/snapback]

 

PHP funker!

Skrevet

nå får jeg ikke gjort det noe serlig enklere...

bare bytt navn på $hiddenpage til den siden du vil vise kun for medlemmer.

 

Klikk for å se/fjerne innholdet nedenfor
<?php

$user = 'brukernavn';
$passwd = 'hemmelig passord';
$hiddenpage = 'skjult_side.php';

// spiller ikke stor rolle om passordet er klartekst. kilden vil ikke være synlig med mindre php modulen til serveren crasher

session_start();

// behandle innlogging
if(isset($_POST['submit_login']))
{
 if(!strcmp($passwd, $_POST['password']) && !strcmp($user, $_POST['username'])) $_SESSION['innlogget'] = true;
 header("Location: ".$_SERVER['PHP_SELF']);
}

// hvis ikke innlogget, logge inn
if(!isset($_SESSION['innlogget']))
{
 echo "
<html>
<head><title>Logg inn</title></head>
<body>
<table>
<form action='' method='post'>
<tr><td>Brukernavn:<td><input type='text' name='username' value=''>
<tr><td>Passord:<td><input type='password' name='password' value=''>
<tr><td align='center' colspan='2'><input type='submit' name='submit_login' value='Logg inn'>
</form>
</body>
</html>
";

// hvis innlogget, vis skjult side
} else {

 include($hiddenpage);

}
?>

Skrevet
nå får jeg ikke gjort det noe serlig enklere...

bare bytt navn på $hiddenpage til den siden du vil vise kun for medlemmer.

 

Klikk for å se/fjerne innholdet nedenfor
<?php

$user = 'brukernavn';
$passwd = 'hemmelig passord';
$hiddenpage = 'skjult_side.php';

// spiller ikke stor rolle om passordet er klartekst. kilden vil ikke være synlig med mindre php modulen til serveren crasher

session_start();

// behandle innlogging
if(isset($_POST['submit_login']))
{
 if(!strcmp($passwd, $_POST['password']) && !strcmp($user, $_POST['username'])) $_SESSION['innlogget'] = true;
 header("Location: ".$_SERVER['PHP_SELF']);
}

// hvis ikke innlogget, logge inn
if(!isset($_SESSION['innlogget']))
{
 echo "
<html>
<head><title>Logg inn</title></head>
<body>
<table>
<form action='' method='post'>
<tr><td>Brukernavn:<td><input type='text' name='username' value=''>
<tr><td>Passord:<td><input type='password' name='password' value=''>
<tr><td align='center' colspan='2'><input type='submit' name='submit_login' value='Logg inn'>
</form>
</body>
</html>
";

// hvis innlogget, vis skjult side
} else {

 include($hiddenpage);

}
?>

8499363[/snapback]

 

 

Men hva skal jeg gjøre for at folk ikke kun kan kopiere linken til siden å vise medlemssiden uten å ha logget inn??

Skrevet

gjør filnavnet vanskelig å gjette (det er ikke bare å kopiere linken, man må gjette filnavnet). dersom du bruker scriptet mitt. ellers kan du beskytte filen med web serveren. eller kopiere innholdet i siden inn i scriptet mitt i stedet for "include('');" .... så:

 

echo <<< EOE

 

lim_inn_innhold_her

 

EOE;

Skrevet
gjør filnavnet vanskelig å gjette (det er ikke bare å kopiere linken, man må gjette filnavnet). dersom du bruker scriptet mitt. ellers kan du beskytte filen med web serveren. eller kopiere innholdet i siden inn i scriptet mitt i stedet for "include('');" .... så:

 

echo <<< EOE

 

lim_inn_innhold_her

 

EOE;

8500300[/snapback]

 

 

Jeg har prøvd scriptet ditt atter en gang men det kommer opp det samm under login-boksen... echo <<< EOE {} osv. Hva gjør jeg??

Skrevet

det betyr at filene ikke blir parset av php. dvs php er ikke installert. du ser på filene fra disk med nettleser uten å legge de på server, eller du legger de på server som ikke har php, eller du har feil filendelse. det skal være .php i fleste tilfeller. hvorfor sier du at php virker når det ikke virker?

Skrevet

Jeg vet ikke om det virker eller ikke men det må jo gjøre det da... men kan jeg bruke et slikt script?.-->

 

 

<form action="login.php" method="post" enctype="">

<fieldset>

<legend>Logg inn:</legend>

<strong>Username<span class="style1">.</span> </strong>

<input name="user" type="text" onblur="MM_validateForm('user','','R');return document.MM_returnValue">

<br>

<strong>Password</strong> <span class="style1">.</span>

<input name="pass" type="password" onchange="MM_validateForm('pass','','R');return document.MM_returnValue">

<br>

<input id="submit" type="submit" value="Logg inn">

</p>

</fieldset>

</form>

 

<?php

 

$user = "admin"; //brukernavn

$pass = "21232f297a57a5a743894a0e4a801fc3"; // md5 streng av passordet

 

$guser = $_GET['user'];

$gpass = $_GET['pass'];

 

if ($guser == $user and md5($gpass) == $pass) {

header("Location: index.php");

}

else {

header("Location: index.html");

}

 

?>

Skrevet (endret)
ikke uten php aktivert server. du trenger en java eller javascript løsning.

8500556[/snapback]

 

Har du noen bra løsninger der da?? noe enkelt og sikkert? :hmm:

 

edit:

- en login-boks med brukernavn og passord

- en sikkerhetskode som kan plasseres på den passordbeskyttede siden, slik at man unngår at linken kopieres og alle kan komme inn. Man må skrive passord uansett.

Endret av karryboh
Skrevet (endret)

denne legger du i en login.htm

medlemssiden kalles det samme som passordet + .htm.

 

altså hvis passordet mitt er hemmelig_2 heter medlemssiden hemmelig_2.htm

 

du må lage en hash med den nederste formen før scriptet kan brukes. du åpner siden. skriver inn ønsket brukernavn og passord i den nederste formen og trykker lag passordhash. da kommer det opp 40 tilsynelatende tilfeldige bokstaver og tall. disse må kopieres inn i scriptet. de skal kopieres inn hvor jeg har skrevet "sett_inn_hash_her" ganske langt nede på siden.

 

når det er gjort kan du fjerne den nederste formen. fra der hvor jeg har skrevet i kilden: "fjern følgende (i kilden) etter at du har laget passord:"

 

la </body> og </html> være igjen nederst.

 

<html>
<head>
</head>
<body>
<script type="text/javascript">
/**
*
*  Secure Hash Algorithm (SHA1)
*  http://www.webtoolkit.info/
*
**/

function sha1 (msg) {

function rotate_left(n,s) {
var t4 = ( n<<s ) | (n>>>(32-s));
return t4;
};

function lsb_hex(val) {
var str="";
var i;
var vh;
var vl;

for( i=0; i<=6; i+=2 ) {
 vh = (val>>>(i*4+4))&0x0f;
 vl = (val>>>(i*4))&0x0f;
 str += vh.toString(16) + vl.toString(16);
}
return str;
};

function cvt_hex(val) {
var str="";
var i;
var v;

for( i=7; i>=0; i-- ) {
 v = (val>>>(i*4))&0x0f;
 str += v.toString(16);
}
return str;
};


function Utf8Encode(string) {
string = string.replace(/\r\n/g,"\n");
var utftext = "";

for (var n = 0; n < string.length; n++) {

 var c = string.charCodeAt(n);

 if (c < 128) {
  utftext += String.fromCharCode(c);
 }
 else if((c > 127) && (c < 2048)) {
  utftext += String.fromCharCode((c >> 6) | 192);
  utftext += String.fromCharCode((c & 63) | 128);
 }
 else {
  utftext += String.fromCharCode((c >> 12) | 224);
  utftext += String.fromCharCode(((c >> 6) & 63) | 128);
  utftext += String.fromCharCode((c & 63) | 128);
 }

}

return utftext;
};

var blockstart;
var i, j;
var W = new Array(80);
var H0 = 0x67452301;
var H1 = 0xEFCDAB89;
var H2 = 0x98BADCFE;
var H3 = 0x10325476;
var H4 = 0xC3D2E1F0;
var A, B, C, D, E;
var temp;

msg = Utf8Encode(msg);

var msg_len = msg.length;

var word_array = new Array();
for( i=0; i<msg_len-3; i+=4 ) {
j = msg.charCodeAt(i)<<24 | msg.charCodeAt(i+1)<<16 |
msg.charCodeAt(i+2)<<8 | msg.charCodeAt(i+3);
word_array.push( j );
}

switch( msg_len % 4 ) {
case 0:
 i = 0x080000000;
break;
case 1:
 i = msg.charCodeAt(msg_len-1)<<24 | 0x0800000;
break;

case 2:
 i = msg.charCodeAt(msg_len-2)<<24 | msg.charCodeAt(msg_len-1)<<16 | 0x08000;
break;

case 3:
 i = msg.charCodeAt(msg_len-3)<<24 | msg.charCodeAt(msg_len-2)<<16 | msg.charCodeAt(msg_len-1)<<8 | 0x80;
break;
}

word_array.push( i );

while( (word_array.length % 16) != 14 ) word_array.push( 0 );

word_array.push( msg_len>>>29 );
word_array.push( (msg_len<<3)&0x0ffffffff );


for ( blockstart=0; blockstart<word_array.length; blockstart+=16 ) {

for( i=0; i<16; i++ ) W[i] = word_array[blockstart+i];
for( i=16; i<=79; i++ ) W[i] = rotate_left(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1);

A = H0;
B = H1;
C = H2;
D = H3;
E = H4;

for( i= 0; i<=19; i++ ) {
 temp = (rotate_left(A,5) + ((B&C) | (~B&D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;
 E = D;
 D = C;
 C = rotate_left(B,30);
 B = A;
 A = temp;
}

for( i=20; i<=39; i++ ) {
 temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff;
 E = D;
 D = C;
 C = rotate_left(B,30);
 B = A;
 A = temp;
}

for( i=40; i<=59; i++ ) {
 temp = (rotate_left(A,5) + ((B&C) | (B&D) | (C&D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;
 E = D;
 D = C;
 C = rotate_left(B,30);
 B = A;
 A = temp;
}

for( i=60; i<=79; i++ ) {
 temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff;
 E = D;
 D = C;
 C = rotate_left(B,30);
 B = A;
 A = temp;
}

H0 = (H0 + A) & 0x0ffffffff;
H1 = (H1 + B) & 0x0ffffffff;
H2 = (H2 + C) & 0x0ffffffff;
H3 = (H3 + D) & 0x0ffffffff;
H4 = (H4 + E) & 0x0ffffffff;

}

var temp = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2) + cvt_hex(H3) + cvt_hex(H4);

return temp.toLowerCase();

}
function mkpassw ()
{
var pass = sha1(document.mkpass.mkuser.value + document.mkpass.mkpass.value);
document.write(pass);
};
function loginSubmit ()
{
var passhash="sett_inn_hash_her";
var bruker = document.loginForm.username.value;
var passwd = document.loginForm.password.value;
if(sha1(bruker + passwd) == passhash)
{
document.location.href = passwd + ".htm";
};
};
</script>
<form name="loginForm">
<input type="text" name="username" value="">
<input type="password" name="password" value="">
<input type="button" name="login" value="Logg inn" onClick="loginSubmit();">
</form>

fjern følgende (i kilden) etter at du har laget passord:
<form name="mkpass">
bruker:<input type="text" name="mkuser">
pass:<input type="text" name="mkpass">
<input type="button" name="mkpassbtn" value="Lag passordhash" onClick="mkpassw();">
</form>
fjern til hit
</body>
</html>

Endret av grimjoey
Skrevet

dette er omtrendt det beste man kan få til uten server side. med tanke på sikkerhet. det duger så lenge du ikke linker direkte til den hemmelige siden eller lar noen vite sidenavnet.

Skrevet (endret)
dette er omtrendt det beste man kan få til uten server side. med tanke på sikkerhet. det duger så lenge du ikke linker direkte til den hemmelige siden eller lar noen vite sidenavnet.

8501380[/snapback]

 

Men sidenavnet kommer jo frem når brukeren logger seg på! Da kan jo brukeren bare kopiere siden og spre den slik at flere kommer inn uten å skrive passord... Har du ikke en kode som gjør slik at man automatisk må skrive inn passord/brukernavn når man kommer til medlemssiden for å komme inn??

 

Ellers fikk jeg koden til å funke. :)

 

edit:

hvordan gjør man det for å få sånn "beklager feil passord" hvis man skriver feil?? Og kan jeg legge hele scriptet på index-siden slik at det går an å logge inn eller må man logge seg inn på login.htm?

Endret av karryboh
Skrevet (endret)

dette kan brukes kun dersom man stoler på at brukeren ikke sprer passordet. Er ingen bedre måte å gjøre det på client siden. Man må ha server-side script for å kunne gjøre som du vil.

 

oppdater loginSubmit funksjonen så den ser slik ut:

 

function loginSubmit ()
{
var passhash="sett_inn_hash_her";
var bruker = document.loginForm.username.value;
var passwd = document.loginForm.password.value;
if(sha1(bruker + passwd) == passhash)
{
document.location.href = passwd + ".htm";
} else {
window.alert('sorry mac. feil passord'); // velg mellom denne
document.write("feil passord"); // og denne
};
};

Endret av grimjoey
Skrevet
dette kan brukes kun dersom man stoler på at brukeren ikke sprer passordet. Er ingen bedre måte å gjøre det på client siden. Man må ha server-side script for å kunne gjøre som du vil.

 

oppdater loginSubmit funksjonen så den ser slik ut:

 

function loginSubmit ()
{
var passhash="sett_inn_hash_her";
var bruker = document.loginForm.username.value;
var passwd = document.loginForm.password.value;
if(sha1(bruker + passwd) == passhash)
{
document.location.href = passwd + ".htm";
} else {
window.alert('sorry mac. feil passord'); // velg mellom denne
document.write("feil passord"); // og denne
};
};

8506102[/snapback]

 

javel... men takk for et kjempefint script! :D du vet vel ikke om det finnes noe script som skjuler http://-adressen fra nettleseren?

Skrevet (endret)

vet ikke om noen løsning på det annet enn mod_rewrite til apache web server. det krever så klart tilgang til å installere modul og konfigurere serveren.

 

tviler på at det lar seg gjøre med et klient script. en ting du kan gjøre for å forbedre littegran er å legge inn en redirect side.

 

ditt_passord.htm:

<html>
<head>
<meta http-equiv="redirect" content="0; url=medlemssiden.htm">
</head>
</body>

 

når brukeren skriver inn riktig brukernavn og passord på login siden havner han på denne siden, men blir redirigert til medlemssiden med en gang. det hindrer at noen som ser på skjermen din, eller til en bruker, snapper opp filnavnet.

Endret av grimjoey
Skrevet (endret)

Kan noen fikse dette scriptet slik at:

 

- hvis noen skriver feil passord kommer det opp en tekst som sier: beklager, feil passord/brukernavn....

- slik at scriptet leder til en annen .php (login side, medlemside) istedenfor den samme. (else) Jeg bruker dreamweaver og vil helst ha login-siden for seg selv og ikke på samme side:)

- si om scriptet er trygt for passordbeskyttelse av viktige ting :p

ps. ikke gjør scriptet for avansert:P på forhånd takk :D

 

 

--------------------------------------------------------------------------------

 
<?php

$username = "user";
$password = "pass";

if ($_POST['txtUsername'] != $username || $_POST['txtPassword'] != $password) {

?>
<p>
<b>Logg inn</b>
</p>
<form name="form" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<div align="center">
<center>
<table border="0" cellpadding="5" cellspacing="0">
<tr>
<td><label for="txtUsername">Username</label>
</td>
<td><input type="text" title="Skriv inn brukernavn" name="txtUsername" /></td>
</tr>
<tr>
<td><label for="txtpassword">Password</label>
</td>
<td><input type="password" title="Skriv inn passord" name="txtPassword" /></td>
</tr>
</table>
</center>
</div>
<p align="center"><input type="submit" name="Submit" value="Login" /></p>
</form>

<?php
}
else {
?>

<p class="style3">Velkommen til det personlige området! </p>

<?php
}
?>

Endret av karryboh
Skrevet

Du har fått en god del hjelp som er blitt godt forklart i tillegg. Hvis du leser litt om PHP, så tror jeg det er mye lettere både for deg, og for dem som skal forklare deg ;)

Skrevet

Du grimjoey;

 

På det der javascript scriptet, hvordan går det an å legge inn flere sider? slik at man hvis man logger seg inn med brukernavnet og passordet til side 1 i samme boks som i side 2? f.eks. (med andre ord legge til flere passord hash som fører til ulike sider??) :hmm:

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...