Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kirjautuminen

Sivun loppuun

Vasta_alkaja [13.08.2009 22:15:19]

#

Sellainen ongelma, että.

Minulla on sovellus 1 ja 2, joissa käytän samanlaista kirjautumisjärjestelmää. Liite koodina.

Jos kirjaudun kohteeseen 1 riittää minulle, että kirjoitan kohteen kaksi osoiteen ja ohitan kirjautumissivun, siirtymällä suoraan etusivulle ei minun tarvitse kirjautua kohteeseen 2 ollenkaan sillä olen jo kirjautunut kohteeseen yksi.

Kumpikin käyttää $_SESSION muuttujana samaa sanaa "log_key", eli vaihtamalla vain toiseen kirjautumiseen tuon sanan olettaisin, että näin ei enää tapahtuisi. Mutta entäpäs jos joku satunnainen heppu käyttää samaa sanaa ja sattuu sattumalta yrittämään minun ohjelmistooni. Hän pääsee sisään. Miten tämä ongelma kannattaisi korjata, jos viitsitte päätänne vaivata.

<?php
require_once("config.php");
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<link rel="stylesheet" href="./css/index.css" type="text/css">
<head>
<style type="text/css">
  .nappi{
    background:rgb(51,153,102);
    color:white;
    border-left:2px;
    border-right:1px;
    border-top:1px;
    border-bottom:2px;
    border-style:solid;
    border-color:rgb(0,102,0);
  }
  .nappi:hover{
    background:rgb(51,153,102);
    color:yellow;
    border-left:1px;
    border-right:2px;
    border-top:2px;
    border-bottom:1px;
    border-style:solid;
    border-color:rgb(0,102,0);
  }
</style>
<title>Kirjautuminen tietokantaan</title>
<?php
if(!empty($_POST['tunnus']) && !empty($_POST['salasana'])){
    $tunnus = get_magic_quotes_gpc() ? $_POST['tunnus'] : mysql_real_escape_string($_POST['tunnus']);
    $salasana = get_magic_quotes_gpc() ? $_POST['salasana'] : mysql_real_escape_string($_POST['salasana']);

    $salaus = 'ia8ksk3ä'.$salasana.'qhlslmw2';
    $kaanteinen = strrev($salaus);
    $merkkijono = strlen($kaanteinen);

    for($i=0; $i<$merkkijono; $i++){
        $koodattusalasana .= $kaanteinen[$i].$salaus[2].$salaus[3].$salaus[$i];
    }
    $salasana = md5($koodattusalasana);
    $istuntotunnus = md5(uniqid(rand(), true));

    $k = "UPDATE kayttajat SET istunto = '$istuntotunnus' WHERE tunnus = '$tunnus' AND salasana = '$salasana'";
    if(!($t = mysql_query($k))){
        echo 'tsdfsdf';
        //header("location:index.php");
        return;
    }
    if(mysql_affected_rows() == 1){
        $_SESSION['log_key'] = $istuntotunnus;
    }
}
if(!empty($_SESSION['log_key'])){
        header('location:./paasivu.php');
}
?>
</head>
<body>
<form method="post">
<table align="center" width="40%" height="70%" border="0">
<tr>
<td>
<table border="0" width="100%" style="border-bottom:2px solid #339966;">
<tr>
    <td style="color:#339966; font-size:xx-large; text-align:right; width:45%;">Laskutusjärjestelmä</td>
</tr>
</table>
<br />
<![if !IE]>
<table border="0" align="center" class="Kirjautuminen">
<tr>
    <td width="180" id="d1"> K&auml;ytt&auml;j&auml;tunnus</td>
    <td><input type="text" name="tunnus" size="25" maxlength="15"></td>
</tr>
<tr>
    <td width="180" id="d2">Salasana </td>
    <td><input type="PASSWORD" name="salasana" size="25" maxlength="15"></td>
</tr>
<tr>
    <td colspan="2"><input type="submit" class="nappi" value="Kirjaudu sis&auml;&auml;n"></td>
</tr>
</table>
<br />
</form>
<![endif]>
</td>
</tr>
</table>
</body>
</html>

MIB [14.08.2009 09:35:24]

#

Eivätkös sessionit ja keksit ole sivukohtaisia?

Teuro [14.08.2009 09:37:44]

#

MIB kirjoitti:

Eivätkös sessionit ja keksit ole sivukohtaisia?

Jos tarkoitat sivustokohtaisia, niin ovat. Sessiot ja keksit ovat oikein omiaan tiedon siirtämiseen sivulta toiselle. Esimerkiksi tämä ohjelmointiputka ei toimisi ollenkaan hyvin, jos evästeet olisivat sivukohtaisia. Joutuisit siis jokaisella sivulla kirjautumaan aina uudelleen, mikäli jollakin sivuston sivulla luotua keksiä ei voisia lukea käyttäjän tunnistavassa scriptissä.

MIB [14.08.2009 09:46:38]

#

Joo, ajatusvirhe. Sivustokohtaisia tarkoitin, että aloittajalla ei ole mitään hätää tuollaisen asian kanssa.

Vasta_alkaja [14.08.2009 19:16:31]

#

Tietenkin yksi vaihtoehto olisi, että tekisi vielä kantaan yhden kentän jossa on projektitunnus, mutta olisi mielenkiintoinen ratkaista ongelma muutenkin.

Wiwwe [14.08.2009 20:31:54]

#

Niin toi ongelmahan ilmenee ainoastaan silloin kun sovellukset on samalla palvelimella, eikös.

Vasta_alkaja [15.08.2009 16:27:40]

#

Siitä en osaa minä varmuutta sanoa, sillä ei ole kuin yksi palvelin. Tuli mieleen, että eihän tuo projektitunnuskaan auta, tai no jos sille tekee vielä toisen tarkistuksen.

Jos se on yhden palvelimen ongelma niin .htaccess tunnuksellahan siitä eroon pääsee, mutta siihen en ole oikein tyytyväinen vaan haluaisin ratkaista ongelman muuten. Onko kellään ideoita?

Missä kaikki nörtit on ? :)

MIB [15.08.2009 17:26:59]

#

Siis, jos edelleen pohdit sitä, että porukka pääsee "kirjautumaan" jos on sellainen log_key sessioni/keksi, niin kannattaa huomioida, että ne ovat sivustokohtaisia.
Mitä tällä projektitunnuksella haluat, kun ymmärsin että olet huolissasi kirjautumisesta?

Vasta_alkaja [15.08.2009 20:15:46]

#

Eli jos minulla on sivu

www.jokusivu.com/projekti1
www.jokusivu.com/projekti2
www.jokusivu.com/projekti3

Kirjaudun projektiin yksi. Tämän jälkeen pääsen nuihin kaikkiin muihin kuin varkain. Sen haluaisin estää.

$k = "UPDATE kayttajat SET istunto = '$istuntotunnus' WHERE tunnus = '$tunnus' AND salasana = '$salasana' AND projekti = '$projekti'";
 if(!($t = mysql_query($k))){
     echo 'tsdfsdf';
     //header("location:index.php");
     return;
 }

Eikös se silloin estyisi kun projekti määritettäisiin kaikkiin muuttujissa kiinteästi. Eli pelkkä oikea istunto ei riittäisi.

reca [16.08.2009 00:04:22]

#

En nyt tiedä, että meneekö ihan metsään tämä ajatus, mutta yritetään.

Eikös sinne sessioniin vois laittaa vaikka muuttujan projekti. Sitten sille annetaan jokaisessa projektissa uniikki tunnus tms. Sitten voidaan aina vertailla, että jos löytyy eri niin tietysti halutaan kirjautumista, jonka jälkeen projektikohtainen tunniste uudistetaan...

Toivottavasti lukasin kyssärin oikein jne.. vähä väsy ja sillai...

Vasta_alkaja [16.08.2009 12:45:15]

#

Juuri tämän kaltaista vastausta hain tukemaan ajatustani.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta