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ää?
Ovatko nämä muut web-sovellukset omalla palvelimellasi/ovatko ne omia ohjelmiasi? Minkälainen kirjautumissysteemi näissä ohjelmissa on käytössä?
Ohjelmat sijaitsevat kaikki samalla palvelimella ja ovat omia ohjelmiani!
https://www.ohjelmointiputka.net/keskustelu/
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.
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ä.
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); }
Aihe on jo aika vanha, joten et voi enää vastata siihen.