Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kirjautumistieto ohjelmasta toiseen

manninen [17.08.2011 12:13:37]

#

Minulla on hallintasivusto johon tulee kirjautua tunnuksella ja salasanalla.
Hallintasivustolla on esim 5 eri linkkiä, viiteen muuhun ohjelmaan, jotka käyttävät samaa tunnusta kuin hallinta. Haluaisin kuitenkin linkkiä painamalla siirtyä suoraan johonkin nuista viidestä ohjelmasta, enkä kirjautua niihin uudestaan.

Miten tieto tulisi siirtää eteenpäin, jotta minun ei tarvitsisi kirjautua muihin ohjelmiin enää uudestaan. Onko tämä kuinka tietoturvallisesti järkevää?

kinnala [17.08.2011 13:01:47]

#

Ovatko nämä muut web-sovellukset omalla palvelimellasi/ovatko ne omia ohjelmiasi? Minkälainen kirjautumissysteemi näissä ohjelmissa on käytössä?

manninen [17.08.2011 13:10:47]

#

Ohjelmat sijaitsevat kaikki samalla palvelimella ja ovat omia ohjelmiani!

https://www.ohjelmointiputka.net/keskustelu/22832-kirjautuminen-pdo

awly [17.08.2011 19:19:35]

#

Jos keksit säilyvät, ei ole mitään hätää. Voit myös kuljettaa phpsesidiä linkillä, jolloin tämä uusi web sovellus asettaa sen käyttälle.

manninen [19.08.2011 13:11:27]

#

Jos kuljetan session id:n osoitteesta toiseen, niin miten tämän session tietoja luetaan toisessa osoitteessa. Vai tuleeko tämä id pakotettuna käyttöön

Koitin lähettää paikalliselta koneelta session id:n toiseen nettiosoitteeseen, mutta tässä osoitteessa sessio näytti silti tyhjältä.

Metabolix [19.08.2011 13:47:46]

#

Ei se tietenkään eri palvelinten välillä siirry. Joudut jotenkin välittämään kirjautumistiedot toiselle palvelimelle.

Tässä on yksi tapa: Oletetaan, että halutaan siirtyä A:sta B:hen. Käyttäjä menee siis sivulle A/siirry.php. Nyt A tallentaa tietokantaan rivin, joka on voimassa vaikka 5 sekuntia ja sisältää kirjautuneen käyttäjän id:n sekä vaikeasti arvattavan tunnisteen, esimerkiksi uniqid(md5(session_id()),1). Sitten A ohjaa käyttäjän palveluun B sivulle B/saavu.php?tunniste=salainen. Nyt palvelu B tietää salaisen tunnisteen ja voi varmistaa palvelusta A, että tunniste kelpaa: A/tarkista.php?tunniste=salainen. Palvelu A tarkistaa (ja poistaa) tunnisteen tietokannasta ja lähettää vastauksena käyttäjän tunnuksen.

Menetelmän vaatimuksena on, että pidät palveluiden käyttäjätietokannat synkronoituina niin, ettei niihin pääse tulemaan samalla tunnuksella eri henkilöitä.

Koodina:

<?php # http://A/siirry.php

session_start();
$tunniste = uniqid(md5(session_id()), 1);
sql(
  "INSERT INTO siirtyminen (kayttaja_id, tunniste, aika)
  VALUES (?, ?, NOW() + INTERVAL 5 SECOND)",
  $_SESSION["kayttaja_id"], $tunniste
);
$t = urlencode($t);
header("Location: http://B/saavu.php?tunniste={$t}");
<?php # http://A/tarkista.php

sql("DELETE FROM siirtyminen WHERE aika < NOW()");
$id = sql_hae("SELECT kayttaja_id FROM siirtyminen WHERE tunniste = ?", $_GET["tunniste"]);
sql("DELETE FROM siirtyminen WHERE tunniste = ?", $_GET["tunniste"]);

if ($id) {
  echo hae_tunnus($id);
}
<?php # http://B/saavu.php

$t = urlencode($_GET["tunniste"]);
$tunnus = file_get_contents("http://A/tarkista.php?tunniste={$t}");
if (!$tunnus) {
  forbidden("Tunniste ei kelpaa!");
} else {
  kirjaudu($tunnus);
}

Vastaus

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

Tietoa sivustosta