VisualStudio Skrevet 20. april 2007 Del Skrevet 20. april 2007 (endret) Hei! Jobber med en hjemmeside til klassen nå, først og fremst i CSS og HTML, så kan ikke så mye PHP. Men noen som vet om et script, som man trenger et passord for å komme inn på siden, altså KUN ett passordfelt. Ikke noe brukernavn, et felles passord for alle. Også, skal man jo ikke komme rundt ved å taste http://www.minurl.net/start.html isteden liksom. Rett og slett et script som sjekker om du har den nødvendige cookien eller hva faen det bruker, hvis ja, så kommer du inn, hvis nei, så kommer du ikke inn og får en feilmelding. Altså, denne trenger ikke være skuddsikker, men ihvertfall så ikke enhver idiot kommer inn sånn uten videre. Noen som kan hjelpe? Takk Edit: Vær så snill, og ikke si .htaccess nå Det skjønner jeg ikek noe av xD Bare et enkelt script, hvis det er mulig Endret 20. april 2007 av VisualStudio Lenke til kommentar
tehextinct Skrevet 20. april 2007 Del Skrevet 20. april 2007 Okey du kan prøve dett: config.php <?php $admin = "admin"; $password = "password"; ?> login.php <?php error_reporting(E_WARNING); ob_start(); session_start(); include_once("config.php"); if($_POST['Go']=="Go"){ $p = $_POST['password']; $a = $_POST['admin']; //if the passwords match if(($admin==$a)&&($password==$p)){ //clear previous sessions unset($_SESSION['admin']); unset($_SESSION['password']); //start a new session $_SESSION['admin'] = $a; $_SESSION['password'] = $p; //redirect to the protected webpage header("Location:admin.php"); } else{ $errors .='<p class="red">Error logging in. Please check your details</p>'; } } ?> <link rel="stylesheet" type="text/css" href="lstyle.css"/> <div class="login"> <form action="login.php" method="post"> <table> <tr> <td>Username</td> <td><input type="text" name="admin"/></td> </tr> <tr> <td>Password</td> <td><input type="password" name="password"/></td> </tr> <tr> <td></td> <td> <input type="submit" value="Go"/> <input type="hidden" name="Go" value="Go"/></td> </tr> </table> </form> <a href="index.php">Tilbake</a> <?=$errors?> </div> admin/password protected siden putt d i toppen <?php ob_start(); session_start(); include_once("config.php"); if(!isset($_SESSION['admin'])||!isset($_SESSION['password'])|| $_SESSION['admin']!=$admin||$_SESSION['password']!=$password){ header("Location:login.php"); exit; } ?> Det må selfølgelig noen endreinger til da men d er ikke så vansklig MvH tehextinct Lenke til kommentar
grimjoey Skrevet 20. april 2007 Del Skrevet 20. april 2007 (endret) eller: <?php $password = 'hemmelig passord'; $side = 'navn på siden som skal vises'; if($_POST['password'] == $password) { include($side); } else { echo ' <html> <body> <form action="" method="post"> Skriv passord:<input type="password" name="password" value=""> </form> </body> </html> '; } ?> Endret 20. april 2007 av grimjoey Lenke til kommentar
VisualStudio Skrevet 20. april 2007 Forfatter Del Skrevet 20. april 2007 eller: <?php $password = 'hemmelig passord'; $side = 'navn på siden som skal vises'; if($_POST['password'] == $password) { include($side); } else { echo ' <html> <body> <form action="" method="post"> Skriv passord:<input type="password" name="password" value=""> </form> </body> </html> '; } ?> 8431671[/snapback] Blokkerer denne forsøk på å å rundt? Helst, så skal alt blokkeres, hvis ikke man har tastet inn passord. Altså, passordet skal heslt ikke finnes i kildekoden. Vil den bli synlig her? Takk for svar Lenke til kommentar
ilpostino Skrevet 20. april 2007 Del Skrevet 20. april 2007 hvis herligheten ligger på en Linux server er det sikrere å bruke .htaccess. Ved å bruke dette går det på sikkerheten på os'et og ikke på selve webløsningen. jeg har sett at det finnes løsninger hvor en kan bruke php + htaccess for å logge seg på.. søk litt på Google så finner du det nok. Lenke til kommentar
Ståle Skrevet 20. april 2007 Del Skrevet 20. april 2007 Morten har et bra script http://mortz.tjokk.net Lenke til kommentar
grimjoey Skrevet 20. april 2007 Del Skrevet 20. april 2007 (endret) står i første post at .htaccess ikke skulle nevnes. scriptet mitt viser en rute hvor man skal skrive inn passord. når riktig passord skrives inn blir filen du skriver inn som $side inkludert slik at den vises. passordet vil befinne seg i php-kildekoden, men ikke html source hvis det var det du tenkte på. php er server side. det vil si at scriptet tolkes før det blir sendt til en web client. scriptet er ikke synlig for de som leser siden. kun til de som har leserettigheter på den filen på serveren utenom http. edit. det kan lønne seg å lage et vanskelig navn på filen som skal inkluderes, eventuelt legge den i en beskyttet bane eller bane hvor webserveren ikke gir tilgang fra web. ilpostino: .htaccess er vel ikke spesifikt linux. tror det funker på win med apache. vet at det funker i flere *nixer. ... (edit: etter å ha fulgt linken du oppgav, får jeg inntrykk av at .htaccess er apache spesifikt.) Endret 20. april 2007 av grimjoey Lenke til kommentar
VisualStudio Skrevet 21. april 2007 Forfatter Del Skrevet 21. april 2007 står i første post at .htaccess ikke skulle nevnes. scriptet mitt viser en rute hvor man skal skrive inn passord. når riktig passord skrives inn blir filen du skriver inn som $side inkludert slik at den vises. passordet vil befinne seg i php-kildekoden, men ikke html source hvis det var det du tenkte på. php er server side. det vil si at scriptet tolkes før det blir sendt til en web client. scriptet er ikke synlig for de som leser siden. kun til de som har leserettigheter på den filen på serveren utenom http. edit. det kan lønne seg å lage et vanskelig navn på filen som skal inkluderes, eventuelt legge den i en beskyttet bane eller bane hvor webserveren ikke gir tilgang fra web. ilpostino: .htaccess er vel ikke spesifikt linux. tror det funker på win med apache. vet at det funker i flere *nixer. ... (edit: etter å ha fulgt linken du oppgav, får jeg inntrykk av at .htaccess er apache spesifikt.) 8433361[/snapback] Jojo, ok. Men kan ejg komme rundt, uten å skrive inn passordet? For på startsiden, vil det jo være linker... Lenke til kommentar
tehextinct Skrevet 21. april 2007 Del Skrevet 21. april 2007 Bare så du vet så alt mellom <?php ?> er ikke synlig i koden! Lenke til kommentar
grimjoey Skrevet 21. april 2007 Del Skrevet 21. april 2007 du får to filer. script.php og siden_din.htm. siden_din vises gjennom script.php så det er det som blir synlig i adresselinjen: http://www.dinsite.no/script.php her må du ha riktig passord for å kunne komme inn. Ingen vei utenom fra weben, med mindre noen klarer å gjette navnet på siden_din.htm og viser den direkte. Enten lag et langt og vanskelig navn på den, eller best er å legge den i en beskyttet bane som ikke er tilgjengelig fra web. Lenke til kommentar
Ståle Skrevet 21. april 2007 Del Skrevet 21. april 2007 Bare så du vet så alt mellom <?php ?> er ikke synlig i koden! 8434860[/snapback] Men hvis PHP feiler, sa vises all koden. Det beste er a lagre det i filen hashet med feks md5() eller sha1() Lenke til kommentar
ilpostino Skrevet 21. april 2007 Del Skrevet 21. april 2007 Men hvis PHP feiler, sa vises all koden. ut ifra min erfaring vises kun der feilen i scriptet ligger. Lenke til kommentar
grimjoey Skrevet 22. april 2007 Del Skrevet 22. april 2007 (endret) hvis apache/evt annen webserver ikke klarer å loade php modulen... da vises all koden. sant som ståle sier. lag en md5 av passordet du vil bruke $password = 'fhalsfhlasjfkjasdghfasdf'; #md5sum fra passordet du vil bruker eller sha. så må du legge til md5/sha() rundt $_POST['password'] i if'en For å gjøre det enkelt. denne lager passordhash til deg. cutnpaste til neste script <?php echo(sha1('----bytt-med-ønsket-passord----')); ?> her cutnpaster du strengen fra forrige script inn i [$password = 'streng her';] <?php $password = 'sha1 sum av hemmelig passord'; $side = 'navn på siden som skal vises'; if(sha1($_POST['password']) == $password) { include($side); } else { echo ' <html> <body> <form action="" method="post"> Skriv passord:<input type="password" name="password" value=""> </form> </body> </html> '; } ?> Endret 22. april 2007 av grimjoey Lenke til kommentar
VisualStudio Skrevet 22. april 2007 Forfatter Del Skrevet 22. april 2007 Ok. Men blir det slik da:? <?php $password = echo(sha1('passord')); $side = 'navn på siden som skal vises'; if(sha1($_POST['password']) == $password) { include($side); } else { echo ' <html> <body> <form action="" method="post"> Skriv passord:<input type="password" name="password" value=""> </form> </body> </html> '; } ?> Lenke til kommentar
grimjoey Skrevet 22. april 2007 Del Skrevet 22. april 2007 nei. poenget er at passordet ikke skal lagres i klarttekst på siden. sha1('passord'); returnerer ec40c62ddf2d2d7d353e6ad7d1e3529bb6867e0f da blir det $password = 'ec40c62ddf2d2d7d353e6ad7d1e3529bb6867e0f'; Lenke til kommentar
Zyrex_ Skrevet 29. april 2007 Del Skrevet 29. april 2007 hvordan kan du hente ut et passord fra mysql. Får opp rett verdi på variablene men får ikke logget inn med de. Her er koden jeg har brukt Henter ut variablen $profile fra adressen. <?PHP $illegal = 'script|http|<|>|%3c|%3e|SELECT|UNION|UPDATE|AND|exe|exec|INSERT|tmp'; foreach ($_GET as $key => $param) { if (preg_match("/$illegal/i", $param)) die('<b>Error:</b> URL Injection Prevention!'); } $profile = $_GET['profile']; ?> Henter passordet fra mysql <?PHP $id = $profile; $host = "localhost"; $user = "root"; $password = "****"; $connection = mysql_connect ($host, $user, $password); mysql_select_db("profile", $connection); $sql = "SELECT passord FROM profile WHERE id='$id'"; $res = mysql_fetch_array(mysql_query ($sql)); mysql_close($connection); ?> config.php <?php $admin = $profile; $password = $res['passord']; ?> Lenke til kommentar
Ståle Skrevet 29. april 2007 Del Skrevet 29. april 2007 prov: $res = mysql_fetch_assoc(mysql_query($sql)); Lenke til kommentar
Zyrex_ Skrevet 29. april 2007 Del Skrevet 29. april 2007 (endret) takk. får brukt passordet da, men får fortsatt ikke godkjent brukernavnet som er $profile EDIT: får vist ikke brukt passordet heller så lenge "$id = $profile;". virker må sette en statisk verdi for $id for at det skal fungere Endret 29. april 2007 av Zyrex_ Lenke til kommentar
grimjoey Skrevet 29. april 2007 Del Skrevet 29. april 2007 (endret) hvis du ikke har noe i mot javascript kan du jo bruke denne: classes/dbBase.class.php: Klikk for å se/fjerne innholdet nedenfor <?php /** * * Class: dbBase - configuration information * **/ class dbBase { var $settings; function getSettings() { // System variables $settings['sitePath'] = ''; // Database variables $settings['dbHost'] = 'localhost'; $settings['dbUser'] = 'username'; $settings['dbPass'] = 'password'; $settings['dbName'] = 'database'; return $settings; } } ?> classes/dbTraffic.class.php Klikk for å se/fjerne innholdet nedenfor <?php ////////////////////////////////////////// // Class: dbTraffic // Notes: MySQL db communicator. ////////////////////////////////////////// require_once('classes/dbBase.class.php'); class dbTraffic extends dbBase { var $theQuery; // Holds query before escaped. var $escQuery; // Holds query after escape. var $link; // Database link handle. // String escape function gotten from www.diskusjon.no private function quoteSmart($qry) { // Stripslashes if (get_magic_quotes_gpc()) { $qry = stripslashes($qry); } // Quote if not a number or a numeric string if (!is_numeric($qry)) { $qry = "'" . mysql_real_escape_string($qry) . "'"; } return $qry; } // Opens a database connection using settings from dbBase. public function open() { $settings = $this->getSettings(); $host = $settings['dbHost']; $user = $settings['dbUser']; $pass = $settings['dbPass']; $db = $settings['dbName']; $this->link = mysql_connect($host, $user, $pass); mysql_select_db($db); # register_shutdown_function(array(&$this, 'close')); } // Sends an escaped query to database. Returns result handle. public function query($query) { $this->open(); $this->theQuery = $query; $this->escQuery = $this->quoteSmart($query); if(!$result = mysql_query($this->theQuery)) echo(mysql_error()); $this->close(); return($result); } // Takes an SQL query as an argument and returns object. public function getObj($query) { $result = $this->query($query); return mysql_fetch_object($result); } // Close database connection. Registered as shutdown function. private function close() { mysql_close($this->link); } } ?> classes/dbAuth.class.php Klikk for å se/fjerne innholdet nedenfor <?php /** * * Class: dbAuth - authentication * * Methods: * * isAuth() * Returns 1 if user have a valid key and ip compared to database. Returns 0 otherwise. * * doAuth() * Checks username and key with database. If valid, stores nonce and ip, and returns 1. Returns 0 otherwise. * * createUser(username, password, email) * Create a user in the database. * * deleteUser(username or userid) * Deletes user from database. * **/ require_once('classes/dbTraffic.class.php'); function shaen($msg) { return $msg; } class dbAuth extends dbTraffic { var $prefix = 'auth'; // Create stronger hash from password. private function createKey($password) { $seed = substr($password, 0, 6); $password = $seed.$password; for($i = 0; $i <= 1000; $i++) { $password = sha1($password); } return $password; } // Create necessary tables. private function createTables() { $crUserTable = ' CREATE TABLE '.$this->prefix.'User ( uid INT(6) NOT NULL PRIMARY KEY auto_increment, username VARCHAR(20), password VARCHAR(40), nonce VARCHAR(10), ip VARCHAR(15), email VARCHAR(60) ); '; $crGroupTable = ' CREATE TABLE '.$this->prefix.'Group ( gid INT(2) NOT NULL PRIMARY KEY auto_increment, groupname VARCHAR(10) ); INSERT INTO '.$this->prefix.'Group VALUES( "", "users" ); '; $crUserGroup = ' CREATE TABLE '.$this->prefix.'UserGroup ( uid INT(6), gid INT(2), PRIMARY KEY(uid, gid) ); '; $a = $this->query($crUserTable); $b = $this->query($crGroupTable); $c = $this->query($crUserGroup); $d = variant_and($a,$b); return variant_and($c, $d); } // Create user. public function createUser($username, $password, $email) { $password = $this->createKey($password); $qry = 'INSERT INTO '.$this->prefix.'User(uid, username, password, email) VALUES("", "'.$username.'", "'.$password.'", "'.$email.'");'; $a = $this->query($qry); $qry = 'INSERT INTO '.$this->prefix.'UserGroup VALUES((SELECT uid FROM '.$this->prefix.'User WHERE username = "'.$username.'"),(SELECT gid FROM '.$this->prefix.'Group WHERE grouname="users"));'; $b = $this->query($qry); return variant_and($a, $b); } // Delete user. public function deleteUser($input) { if(is_numeric($input)) // if numeric expect sid, else expect username. { $method = 'uid = "'.$input.'"'; $uid = $input; } else { $method = 'username = "'.$input.'"'; $qry = 'SELECT uid FROM '.$this->prefix.'User WHERE '.$method.';'; $obj = $this->getObj($qry); $uid = $obj->uid; } $qry = 'DELETE FROM '.$this->prefix.'User WHERE '.$method.';'; // Delete user. $a = $this->query($qry); $qry = 'DELETE FROM '.$this->prefix.'UserGroup WHERE uid = "'.$uid.'";'; // Delete user - group relations. $b = $this->query($qry); return variant_and($a, $b); } // Check key and ip with database. public function isAuth($key, $nonce, $ip, $group = 'users') { $qry = 'SELECT nonce_c FROM '.$this->prefix.'User WHERE ip = "'.$ip.'";'; $obj = $this->getObj($qry); $nonce_c = $obj->nonce_c; $this->query('UPDATE '.$this->prefix.'User SET nonce_c = "'.$nonce.'";'); $qry = 'SELECT password, nonce, groupname FROM '.$this->prefix.'User, '.$this->prefix.'Group, '.$this->prefix.'UserGroup WHERE '.$this->prefix.'User.uid = '.$this->prefix.'UserGroup.uid AND groupname = \''.$group.'\' AND ip = \''.$ip.'\' LIMIT 1;'; $obj = $this->getObj($qry); $dbNonce = $obj->nonce; $dbKey = sha1($nonce_c.sha1($dbNonce.$obj->password)); $dbGroup = $obj->groupname; if(($key == $dbKey) && ($group == $dbGroup)) { return 1; } else { return 0; } } // Check username and password with database. Store ip and nonce. public function doAuth($username, $key, $nonce1, $nonce2, $ip, $group = 'users') { $this->query('UPDATE '.$this->prefix.'User SET nonce_c = "'.$nonce1.'";'); $a = 0; $qry = 'SELECT password FROM '.$this->prefix.'User WHERE username = \''.$username.'\';'; $obj = $this->getObj($qry); // Get password. $dbKey = sha1($nonce2.$obj->password); // Create key. if(!strcmp($key, $dbKey)) // Compare keys { $a = 1; // (*) $qry = 'UPDATE '.$this->prefix.'User SET nonce = "'.$nonce1.'" WHERE username = "'.$username.'";'; $this->query($qry); // Store nonce. $qry = 'UPDATE '.$this->prefix.'User SET ip = "'.$ip.'" WHERE username = "'.$username.'";'; $this->query($qry); // Store nonce. } else { return 0; // (**) } // Check if user is in group which have access to page being requested. $qry = 'SELECT username FROM '.$this->prefix.'User, '.$this->prefix.'UserGroup, '.$this->prefix.'Group WHERE username = "'.$username.'" AND '.$this->prefix.'UserGroup.uid = '.$this->prefix.'User.uid AND '.$this->prefix.'Group.gid = '.$this->prefix.'UserGroup.gid AND '.$this->prefix.'Group.groupname = "'.$group.'";'; if($this->getObj($qry)) $a = $a + 1; // (***) return($a); // Returns 1 (*) if user is valid but not in group, 2 (***) if both valid and in group, 0 otherwise (**). } // Store nonce to prevent reuse private function dbNonce($mode, $nonce) { if(!isset($mode) || !isset($nonce)) return(0); switch($mode) { case 'put': $obj = $this->getObj('SHOW TABLES;'); if(!in_array($obj, 'nonce')) $this->query('CREATE TABLE nonce (nonce VARCHAR(10) NOT NULL PRIMARY KEY);'); $this->query('INSERT INTO nonce values('.$nonce.');'); break; case 'cmp': $this->query('SELECT nonce FROM nonce where nonce=\''.$nonce.'\';'); break; } } // Generate nonce public function genNonce($length) { $return = ''; $chars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz01234567890123456789"; for($i = 0; $i < $length; $i++) { $return = $return.$chars[mt_rand(0, (strlen($chars) - 1))]; } # if($this->dbNonce('cmp', $return)) # { # $return = genNonce($length); # } else { # $this->dbNonce('put', $return); # } return $return; } // Return nonces public function getNonces() { $nonce = array($this->genNonce(10), $this->genNonce(10)); return($nonce); } // Return javascript public function getJavaScript($nonce) { $string = " /** * * Secure Hash Algorithm (sha1) * http://www.webtoolkit.info/ * **/ function shaen (msg) { return msg; }; 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(); } /** * * getCookie * **/ function getCookieVal (offset) { var endstr = document.cookie.indexOf (\";\", offset); if (endstr == -1) endstr = document.cookie.length; return unescape(document.cookie.substring(offset, endstr)); } function getCookie (name) { var arg = name + \"=\"; var alen = arg.length; var clen = document.cookie.length; var i = 0; while (i < clen) { var j = i + alen; if (document.cookie.substring(i, j) == arg) return getCookieVal (j); i = document.cookie.indexOf(\" \", i) + 1; if (i == 0) break; } return null; }; /** * * grimjoeys more secure login and session handeling js component * **/ function loginSubmit() { // Cryptographically secure random values from server var nonce1 = \"".$nonce[0]."\"; var nonce2 = \"".$nonce[1]."\"; // Get password from form var password = document.loginForm.passwordIn.value; // Get seed var seed = password.substr(0, 6); // Add seed to password password = seed + password; // Notify wait alert(\"Login: Strengthening key... Might take a few seconds.\"); // Key strengthening for (i = 0; i <= 1000; i++) { password = sha1(password); }; // Set cookie key for further authentication document.cookie = \"SOLIDCRKEY=\" + escape(sha1(nonce1 + password)); // Remove password from form document.loginForm.passwordIn.value = \"fuck off damn sniffer\"; // Set hidden input to key value document.loginForm.password.value = sha1(nonce2 + password); document.loginForm.submit(); }; function updateKey(nonce) { var skey = getCookie(\"SOLIDCRKEY\"); if (skey != null) { document.cookie = \"SOFTCRKEY=\" + escape(sha1(nonce + skey)); }; }; updateKey(\"".$nonce[0]."\"); "; return($string); } // Return login form public function getLoginForm($nonce) { $string = " <table> <form name=\"loginForm\" action=\"".$_SERVER['PHP_SELF']."\" method=\"post\"> <tr><td>Username:<td><input type=\"text\" name=\"username\" value=\"\"> <tr><td>Password:<td><input type=\"password\" name=\"passwordIn\" value=\"\"> <input type=\"hidden\" name=\"nonce1\" value=\"".$nonce[0]."\"> <input type=\"hidden\" name=\"nonce2\" value=\"".$nonce[1]."\"> <input type=\"hidden\" name=\"password\" value=\"\"> <tr><td colspan=\"2\"><input type=\"submit\" onClick=\"loginSubmit();\" name=\"submitLogin\" value=\"Login\"> </form> </table> "; return($string); } } ?> index.php Klikk for å se/fjerne innholdet nedenfor <?php require_once('classes/dbAuth.class.php'); $auth = new dbAuth; $nonce = $auth->getNonces(); if(isset($_POST['username'])) { $username = $_POST['username']; $key = $_POST['password']; $pnonce1 = $_POST['nonce1']; $pnonce2 = $_POST['nonce2']; $auth->doAuth($username, $key, $pnonce1, $pnonce2, $_SERVER['REMOTE_ADDR']); header('Location: '.$_SERVER['PHP_SELF']); } else { echo ' <html> <head> <title>login test </title> <script type=\'text/javascript\'> '.$auth->getJavaScript($nonce).' </script> </head> <body> '; if(isset($_COOKIE['SOFTCRKEY'])) { if($auth->isAuth($_COOKIE['SOFTCRKEY'], $nonce[0], $_SERVER['REMOTE_ADDR'])) { echo ' Authenticated. '; } else { echo ' cookie set but not authenticated. '; } } else { echo ' '.$auth->getLoginForm($nonce).' '; } echo ' </body> </html> '; } ?> mkpass.php Klikk for å se/fjerne innholdet nedenfor <html> <body> <?php if(!isset($_POST['submit'])) { echo " <form action='' method='post'> Passord:<input type='text' name='pass'><br> <input type='submit' name='submit' value='Lag hash'> "; } else { $pass = $_POST['pass']; $seed = substr($pass, 0, 6); $pass = $seed.$pass; for($i = 0; $i <= 1000; $i++) { $pass = sha1($pass); } echo "<tt>$pass</tt>"; } ?> </body> </html> i dbBase.class.php finnes innstillinger for database tilkobling og i dbAuth.class.php stiller du inn prefix for tabellene. krever: CREATE table [prefix]User ( uid INT(6) NOT NULL PRIMARY KEY auto_increment, username VARCHAR(20), password VARCHAR(40), nonce VARCHAR(10), nonce_c VARCHAR(10), ip VARCHAR(15)); INSERT INTO [prefix]User values( null, 'ditt_brukernavn', 'passordhash_fra_mkpass.php', '', '', '',); mitt første forsøk på oo php så ikke ha for store forventninger. dette er ment å være en sikrere session håndtering en den som ligger i php som standard. denne benytter seg av challenge-response som gjør at den ikke kan hijackes. nøkkelen endrer seg for hver request. veldig tidlig utgave, men det fungerer edit: hmm. fant nettopp ut en alvårlig sårbarhet. ikke bruk denne umodifisert. Endret 29. april 2007 av grimjoey Lenke til kommentar
mske Skrevet 29. april 2007 Del Skrevet 29. april 2007 Hei Dette scriptet vil jeg tro skal passe til det du ønsker: <?php ob_start(); session_start(); $password = sha1($_POST['password']; $login_pass = sha1("passordet for å komme inn på siden"); if($password != $login_pass) { header("Location: login.html"); exit; } else { $_SESSION['online'] = TRUE; header("Location: startside.php"); } ob_end_flush(); ?> Så legger du dette øverst i alle filer du vil at folk må være innlogget for å kunne se: <?php ob_start(); session_start(); if($_SESSION['online'] != TRUE) { header("Location: login.html"); exit; } ?> //HTML her.. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå