Gå til innhold

Sikkerhetssjekk feiler nå plutselig


Anbefalte innlegg

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
Videoannonse
Annonse

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
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

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 av SimDaDim
Lenke til kommentar
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 av Rogeren
Lenke til kommentar

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 av SimDaDim
Lenke til kommentar

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 av SimDaDim
Lenke til kommentar
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

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

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

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
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

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å
×
×
  • Opprett ny...