Rogeren Skrevet 20. januar 2007 Del Skrevet 20. januar 2007 Hei. Jeg har et adminpanel som alltid har fungert bra i Php 4. Men nå i versjon 5.2 feiler alltid sikkerhetssjekken etter innlogging. Når du logger inn og klikker på ting i menyen blir alltid security.php kalt først for å sjekke om det er den rette bruker som er inne. Security.php ser slik ut: <?php if (!isset($_SESSION['first_name']) || $_SESSION['first_name'] != $first_name) { header ("Location: ../auth/error.php"); } ?> auth/error.php blir alltid kallet. Firstname og slik er satt fordi velkommen "Fornavn Etternavn" alltid er rett. Og brukernavn/passord går også gjennom fint. Noen formeninger på hva som er galt? Lenke til kommentar
xqus Skrevet 20. januar 2007 Del Skrevet 20. januar 2007 Hvos kommer $first_name fra? Hva skjer om du gjør slik? <?php echo $_SESSION['first_name'] . ' - '. $first_name . '<br>'; if (!isset($_SESSION['first_name']) || $_SESSION['first_name'] != $first_name) { //header ("Location: ../auth/error.php"); } ?> Lenke til kommentar
The_Lozer Skrevet 20. januar 2007 Del Skrevet 20. januar 2007 <?php if (!isset($_SESSION['first_name']) || $_SESSION['first_name'] !== $first_name) { header ("Location: ../auth/error.php"); } ?> prøv den Lenke til kommentar
Rogeren Skrevet 20. januar 2007 Forfatter Del Skrevet 20. januar 2007 Hvos kommer $first_name fra? Hva skjer om du gjør slik? <?php echo $_SESSION['first_name'] . ' - '. $first_name . '<br>'; if (!isset($_SESSION['first_name']) || $_SESSION['first_name'] != $first_name) { //header ("Location: ../auth/error.php"); } ?> 7762951[/snapback] Da blir "Roger -" skrevet ut. Og jeg kommer inn i panelet..... Lenke til kommentar
Rogeren Skrevet 20. januar 2007 Forfatter Del Skrevet 20. januar 2007 <?php if (!isset($_SESSION['first_name']) || $_SESSION['first_name'] !== $first_name) { header ("Location: ../auth/error.php"); } ?> prøv den 7763045[/snapback] Fungerte ikke The_Lozer Lenke til kommentar
SimDaDim Skrevet 20. januar 2007 Del Skrevet 20. januar 2007 (endret) Roger, da er det no galt med måten $first_name blir behandlet på Jeg ville tippe at det har med Globals å gjøre. Prøv å hent $_POST['first_name'] istedet for $first_name altså: <?php if (!isset($_SESSION['first_name']) || $_SESSION['first_name'] !== $_POST['first_name']) { header ("Location: ../auth/error.php"); }?> Les mer om GLOBALS her: http://no.php.net/manual/en/language.variables.external.php EDIT: Hvorfor funker det ikke å skrive ! - altså utropstegn innenfor [ php ] klammen? Måtte bruke script istedet for at det ikke skulle komme sånne rare tegn som erstattet ! i starten av if spørringen. EDIT2: Hah, skrev $_GET først, mente seff $_POST. Bruk $_REQUEST for å være helt sikker Endret 20. januar 2007 av SimDaDim Lenke til kommentar
Rogeren Skrevet 20. januar 2007 Forfatter Del Skrevet 20. januar 2007 (endret) Roger, da er det no galt med måten $first_name blir behandlet på Jeg ville tippe at det har med Globals å gjøre. Prøv å hent $_POST['first_name'] istedet for $first_name altså: <?php if (!isset($_SESSION['first_name']) || $_SESSION['first_name'] !== $_POST['first_name']) { header ("Location: ../auth/error.php"); }?> Les mer om GLOBALS her: http://no.php.net/manual/en/language.variables.external.php EDIT: Hvorfor funker det ikke å skrive ! - altså utropstegn innenfor [ php ] klammen? Måtte bruke script istedet for at det ikke skulle komme sånne rare tegn som erstattet ! i starten av if spørringen. EDIT2: Hah, skrev $_GET først, mente seff $_POST. Bruk $_REQUEST for å være helt sikker 7763235[/snapback] Merkelig nok fungerte ikke det heller. Jeg vil gi mer info om hvordan det er satt opp, kanskje dere ser en løsning. Takker for all hjelp så langt Bare deler av koden blir listet opp..... 1. admin/index.php <form action="../auth/checkuser.php" 2.checkuser.php session_start(); session_register('first_name'); $_SESSION['first_name'] = $first_name; session_register('last_name'); $_SESSION['last_name'] = $last_name; session_register('email_address'); $_SESSION['email_address'] = $email_address; session_register('special_user'); $_SESSION['user_level'] = $user_level; session_register('username'); $_SESSION['username'] = $username; session_register('password'); $_SESSION['password'] = $password; mysql_query("UPDATE metal_users SET last_login=now() WHERE userid='$userid'"); header("Location: login_success.php"); 3.login_success.php session_start(); include("security.php"); include("header.php"); header.php er selve menyen. 4.security.php <?php if (!isset($_SESSION['first_name']) || $_SESSION['first_name'] !== $_GET['first_name']) { header ("Location: ../auth/error.php"); }?> Takk for linken om globals. Skal utforske mer. Endret 20. januar 2007 av Rogeren Lenke til kommentar
SimDaDim Skrevet 20. januar 2007 Del Skrevet 20. januar 2007 (endret) Men her er det noe som malger. hvor kobles det til databasen den sjekker brukernavnet opp mot? Fordi, det jeg trodde var at $first_name var det brukeren skrev inn når han logget inn. Men det er det jo selvfølgelig ikke. For det lagres i $_SESSION['first_name']. Det som altså mangler er hva scriptet skal sjekke det innskrevene brukernavnet opp mot. Enten er det en include du ikke har skrevet opp her, eller så kobler scriptet bare ikke opp mot databasen der brukernavnet ligger... Så, $first_name skal inneholde brukernavnet fra databasen. Endret 20. januar 2007 av SimDaDim Lenke til kommentar
Rogeren Skrevet 20. januar 2007 Forfatter Del Skrevet 20. januar 2007 include("connections/SiteConn.php"); i index og checkuser. Lenke til kommentar
SimDaDim Skrevet 20. januar 2007 Del Skrevet 20. januar 2007 (endret) Ok. Se om det er no sted den kobler opp og henter ut brukernavnet der. "SELECT * FROM metal_users WHERE user_name=$_POST['user_name']" eller no sånt er spørringen tenker jeg. Hvis du skal poste noe fra det scriptet, pass på å ta bort brukernavn og passord i mysql_connect Endret 20. januar 2007 av SimDaDim Lenke til kommentar
Rogeren Skrevet 20. januar 2007 Forfatter Del Skrevet 20. januar 2007 Ok. Se om det er no sted den kobler opp og henter ut brukernavnet der. "SELECT * FROM metal_users WHERE user_name=$_POST['user_name']" eller no sånt er spørringen tenker jeg. Hvis du skal poste noe fra det scriptet, pass på å ta bort brukernavn og passord i mysql_connect 7763421[/snapback] Ingenting ser ut til å fungere. Vurderer å be verten om å nedgradere til PHP 4. Lenke til kommentar
ZoRaC Skrevet 20. januar 2007 Del Skrevet 20. januar 2007 Du kan ikke leve med PHP4 for alltid heller, så før eller siden må du rettet opp det. Om du poster alt av kode du bruker i forbindelse med det så kan vi sikkert hjelpe deg. Jeg er også nesten sikker på at det har med register_globals å gjøre. Lenke til kommentar
Rogeren Skrevet 21. januar 2007 Forfatter Del Skrevet 21. januar 2007 Orker dere å lese all koden altså? Takker på forhånd for all hjelp. Er vanvittig irriterende å måtte deaktivere security.php for å tilgang til å legge til nye saker til databasen. NB: Ikke bry dere om at html koden i admin panelet er gammeldags. En del stygg bruk av tabeller. Den koden bryr jeg meg ikke mye om. Hovedsiten er i topp moderne CSS og ingen tabeller har blitt brukt. (2 column liquid CSS). HTML/CSS kan jeg. Sliter litt mer med php/mysql kan en si...... 1.admin/index.php <?php include("../connections/SiteConn.php"); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html" charset="iso-8859-1"> <link href="../styles/fontstyles.css" rel="stylesheet" type="text/css"> <link href="../styles/formstyle.css" rel="stylesheet" type="text/css"> <style type="text/css"> <!-- .style1 {font-weight: bold} --> </style> </head> <body> <table width="100%" border="1" cellpadding="0" cellspacing="0" bordercolor="#4A4A4A"> <tr> <td align="left"> <img src="images/logo.gif" width="340" height="62" hspace="10"><br> <?php echo "Welcome ". $_SESSION['first_name'] ." ". $_SESSION['last_name'] ."!"; ?></td> </tr> </table> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="19%" height="612" valign="top"> </td> <td width="81%" align="center" valign="top"> <p> </p> <p>Welcome to admin area.</p> <p>Please login below.</p> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="center"><form action="../auth/checkuser.php" method="post" name="" id=""> <p> </p> <p> </p> <table width="222" border="1" align="center" cellpadding="2" cellspacing="0" bordercolor="#696969"> <tr> <td width="214" align="center" valign="top"><span class="bodytext">Username</span><br> <input name="username" type="text" class="textinput_1" id="username" size="10"></td> </tr> <tr> <td align="center" valign="top"><span class="bodytext">Password</span><br> <input name="password" type="password" class="textinput_1" id="password" size="10"></td> </tr> <tr> <td align="center"><input type="submit" name="Submit" value="login"></td> </tr> <tr> <td align="center" class="bodytext"> </td> </tr> </table> </form></td> </tr> </table> <p><a href="../auth/lost_pw.php" class="bl_links">Lost password</a> </p></td> </tr> </table> </body> </html> auth/checkuser.php sjekker deretter om brukernavn/passord stemmer med det som står i tabellen. 2.auth/checkuser.php <?php /* Check User Script */ // Start Session session_start(); header("Cache-control: private");// I.E6 fixed include 'connection/db.php'; // Convert to simple variables $username = $_POST['username']; $password = $_POST['password']; if((!$username) || (!$password)){ echo "Please enter ALL of the information! <br />"; include 'login_form.php'; exit(); } // Convert password to md5 hash $password = md5($password); // check if the user info validates the db $sql = mysql_query("SELECT * FROM metal_users WHERE username='$username' AND password='$password' AND activated='1' AND validated='Yes'"); $login_check = mysql_num_rows($sql); if($login_check > 0){ while($row = mysql_fetch_array($sql)){ foreach( $row AS $key => $val ){ $$key = stripslashes( $val ); } // Register some session variables to base access rights an id! session_register('first_name'); $_SESSION['first_name'] = $first_name; session_register('last_name'); $_SESSION['last_name'] = $last_name; session_register('email_address'); $_SESSION['email_address'] = $email_address; session_register('special_user'); $_SESSION['user_level'] = $user_level; session_register('username'); $_SESSION['username'] = $username; session_register('password'); $_SESSION['password'] = $password; mysql_query("UPDATE metal_users SET last_login=now() WHERE userid='$userid'"); header("Location: ../admin/login_success.php"); } } else { echo "You could not be logged in! Either the username and password do not match or you have not validated your membership!<br /> Please try again!<br />"; include 'error.php'; } ?> Så langt går alt bra. Jeg blir fraktet til login_success.php. Else feilmeldingen blir ikke kallet. 3.admin/login_success.php <?php session_start(); header("Cache-control: private");// I.E6 fixed include("security.php"); include("header.php"); ?> <table width="90%" border="0" cellspacing="0" cellpadding="0"> <tr> <td><p>As an administrator of this site the available options for your priviledge level are visible in the menu. If for any reason you wish to delete an item, remain logged in and navigate the site until you find the relevant record. Whilst logged in edit and delete links will be visible in the page displays.</p> <p>Any individual found to be abusing the system shall have his admin rights terminated with immediate effect.</p> <p>Where ammendments to records are concerned, update details of the administrator are automatically entered to the database. This ensures that we can access information and relate it to an admin individuals performance.</p> <p>Thank you. </p></td> </tr> </table> <p> </p> <?php include("footer.php"); ?> Det første login_success gjør er å kalle på security.php. Det gjør også hver side i menyen. 4.admin/security.php <?php if (!isset($_SESSION['first_name']) || $_SESSION['first_name'] != $first_name) { header ("Location: ../auth/error.php"); } ?> Der feiler det og auth/error.php bli kallet: <?php session_start(); header("Cache-control: private");// I.E6 fixed include("header.php"); ?><table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="center" valign="top"><table width="450" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="center"> </td> </tr> <tr> <td align="center"><span class="error">!!ERROR!!</span></td> </tr> <tr> <td class=><p class="style2">You have been re-directed to this page because you are not logged in or are not a staff member. You may login using the form below. If you are not currently a member please exit from this page by clicking <a href="../index.php" class="titles">here.</a> </p> <p class="style2"> </p></td> </tr> <tr> <td> </td> </tr> <tr> <td align="center"><form action="checkuser.php" method="post" name="" id=""> <table width="207" border="1" align="center" cellpadding="2" cellspacing="0" bordercolor="#696969"> <tr> <td align="center" valign="top"><span class="bodytext">Username</span><br> <input name="username" type="text" class="textinput_1" id="username" size="20"></td> </tr> <tr> <td align="center" valign="top"><span class="bodytext">Password</span><br> <input name="password" type="password" class="textinput_1" id="password" size="20"></td> </tr> <tr> <td align="center"><input type="submit" name="Submit" value="login"></td> </tr> </table> </form></td> </tr> <tr> <td align="center" class="bl_links"><p> </p> <p>[ <a href="lost_pw.php">Forgotten password?</a> ] </p></td> </tr> </table></td> </tr> </table> <?php include("footer.php"); ?> Poenget er at login_success.php skal fungere bra og inkludere header.php etter at security.php har gått bra. Header.php er en vanlig meny der du kan legge til/redigere/slette saker i databasen. Lenke til kommentar
ZoRaC Skrevet 21. januar 2007 Del Skrevet 21. januar 2007 Det første du kan gjøre er å fjerne "session_register('xx');", de den ikke trengs: If you want your script to work regardless of register_globals, you need to instead use the $_SESSION array as $_SESSION entries are automatically registered. If your script uses session_register(), it will not work in environments where the PHP directive register_globals is disabled. (http://no.php.net/session_register) På PHP4 kjørte den nok register_globals=on, noe som gjorde at $firstname og $_SESSION['firstname'] er samme variable. Dvs at det det egentlig står er: if (!isset($_SESSION['first_name']) || $_SESSION['first_name'] != $_SESSION['first_name']) { noe som selvfølgelig går igjennom... Endre til: if (!isset($_SESSION['first_name']) { Så tenker jeg det virker. Lenke til kommentar
Rogeren Skrevet 21. januar 2007 Forfatter Del Skrevet 21. januar 2007 Det første du kan gjøre er å fjerne "session_register('xx');", de den ikke trengs:If you want your script to work regardless of register_globals, you need to instead use the $_SESSION array as $_SESSION entries are automatically registered. If your script uses session_register(), it will not work in environments where the PHP directive register_globals is disabled. (http://no.php.net/session_register) På PHP4 kjørte den nok register_globals=on, noe som gjorde at $firstname og $_SESSION['firstname'] er samme variable. Dvs at det det egentlig står er: if (!isset($_SESSION['first_name']) || $_SESSION['first_name'] != $_SESSION['first_name']) { noe som selvfølgelig går igjennom... Endre til: if (!isset($_SESSION['first_name']) { Så tenker jeg det virker. 7767220[/snapback] Takker så mye ZoraC! Nå fungerte det med <?php if (!isset($_SESSION['first_name'])) { header ("Location: ../auth/error.php"); }?> i security.php MEN session_register (xx) linjene måtte være der. Samme feilmelding om de ble tatt bort.... 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å