Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: JavaScript: Javascript salasanasuojausprompt

Sivun loppuun

aksun [13.08.2011 18:59:21]

#

Hei,


Minulla on käytössä Javascript salasanasuojaus. Tämä prompt-ikkuna on mielestäni turvallisempi vaihtoehto javascript-salasanasuojauksiin koska tässä ei voi tarkastella lähdekoodia selaimessa ainakaan ihan helposti. Kysymys kuuluukin:
tämä koodi laittaa formit itsenäisiin ikkunoihin, eli salasana toisessa ikkunassa ja kirjautumisnimi toisessa. Miten saisin kummatkin kentät yhteen ikkunaan?
Tässä koodi:

<HTML>
<HEAD>

<SCRIPT LANGUAGE="JavaScript">

<!-- Begin
function LogIn(){
loggedin=false;
username="";
password="";
username=prompt("Username:","");
username=username.toLowerCase();
password=prompt("Password:","");
password=password.toLowerCase();
if (username=="testi" && password=="salasana") {
loggedin=true;
window.location="membersarea.html";
}
if (username=="guest2" && password=="login2") {
loggedin=true;
window.location="home-page2.html";
}
if (loggedin==false) {
alert("Invalid login!");
}
}
// End -->
</SCRIPT>

<BODY>

<center>
<form><input type=button value="Login!" onClick="LogIn()"></form>
</center>

</BODY>
</HTML>

Testaajille:
Käyttäjätunnus: testi
Salasana: salasana

Htaccessin suosijoille:
Käytän freewebsiä, joten en voi käyttää htaccessia siellä!


Sincerely,

aksun

Metabolix [13.08.2011 19:07:05]

#

Prompt-ikkunaa ei voi muokata. Se on juuri tuollainen. Jos haluat hienomman, joudut tekemään sen HTML:llä.

Prompt-ikkuna ei ainakaan minusta vaikeuta lähdekoodin lukemista milliäkään, joten tuollaisesta suojauksesta ei ole oikeasti iloa. Eihän käyttäjä tarvitse edes salasanaa, kun lähdekoodista näkee suoraan, mille sivulle kirjautuminen vie.

Triton [13.08.2011 19:12:32]

#

Totuus on vain se, ettei JavaScriptillä pelkästään pysty tekemään kovinkaan käytännöllistä saati sitten turvallista kirjautumisskriptiä... Kannattaa tutustua siihen PHP:n.

-tossu- [13.08.2011 19:26:00]

#

Mikäli sinulla on pakottava tarve saada sivuille jokin JS-salasanasuojaus, suosittelen jotain tämäntapaista: http://weppipakki.com/js/salasana/anasalas.htm

Tuohon pitää tietysti lisätä vaikka AJAXilla toteutettu tarkistus, jos haluat antaa väärän salasanan tapauksessa jonkin kuvaavamman virheilmoituksen kuin 404-errorin.

Metabolix [13.08.2011 19:50:57]

#

Edelliseen ehdotukseen lisäisin vielä, että jos sivun lataa AJAXilla nykyisen sivun päälle, osoitekaan ei yleensä jää selaimen historiaan.

<!DOCTYPE html>
<html>
<head>
	<title>Salaiset sivut</title>
	<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
	<script type="text/javascript">
	/* <![CDATA[ */
	function lataa(sivu) {
		sivu = "salasivut/" + escape(sivu) + ".html";
		$("html").load(sivu, null, function(vastaus, tila) {
			if (tila == "error") {
				alert("Virheellinen salasana!");
			}
		});
	}
	/* ]]> */
	</script>
</head>
<body>
	<p>Sivu: <input id="sivu" /> <button onclick="lataa($('#sivu').val());">Lataa!</button></p>
</body>
</html>

Mikään ei myöskään velvoita käyttämään erikseen tunnusta ja salasanaa, vaan hyvin voi olla vain yksi sana, joka ajaa molemmat asiat.

-tossu- [13.08.2011 20:03:37]

#

Metabolix kirjoitti:

Edelliseen ehdotukseen lisäisin vielä, että jos sivun lataa AJAXilla nykyisen sivun päälle, osoitekaan ei yleensä jää selaimen historiaan.

Ajattelin, että AJAXilla vain tarkistettaisiin salasanan oikeellisuus ja sivu ladattaisiin normaalisti.

function logIn (salasana) {
	var pyynto = new XMLHttpRequest ();
	pyynto.onreadystatechange = function () {
		if (pyynto.readyState == 4) {
			if (pyynto.status == 200)
				location.href = pyynto.responseText;
			else
				alert ("Väärä salasana!");
		}
	}
	pyynto.open ("GET", "salasana_" + escape (salasana) + ".txt");
	pyynto.send (null);
}

Aputiedostoa käytettäessä salasanan ei välttämättä tarvitse olla sama kuin sivun osoite. Tuota koodia tuskin kannattaa käyttää tuollaisenaan, vaan se kannattaisi ainakin muokata vanhemmille IE:ille sopivaksi. https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=ajax

jlaire [13.08.2011 22:44:55]

#

Metabolix kirjoitti:

jos sivun lataa AJAXilla nykyisen sivun päälle, osoitekaan ei yleensä jää selaimen historiaan.

Tuohon tarkoitukseen on olemassa myös metodi location.replace(url). Toimintaa voi testata täällä: replace-linkkejä ei ainakaan chromella pysty peruuttamaan back-nappulalla. Muistaakseni tämä toimii oikein jopa IE7:lla.

Metabolix [13.08.2011 22:49:17]

#

jlaire, tarkoitus oli nimenomaan piilottaa sivun kaksi.html osoite, joka tässä menetelmässä on käytännössä sama kuin salasana.

jlaire [14.08.2011 01:28:49]

#

Jaajaa, voisi jatkossa lukea koko ketjun ennen vastaamista. ^^

The Alchemist [15.08.2011 09:09:01]

#

JavaScript Login -demo

Tuossa on esimerkki siitä, miten turvallinen JS-systeemi voisi toimia. Koska JS:ää käytetään lähinnä silloin kun PHP tms. ei ole vaihtoehto, niin sisältö sivuille ladataan ajax-pyynnöillä.

Perusidea on se, että sisältö on salaisessa hakemistossa ihan plaintextinä. Polku tähän hakemistoon haetaan lukemalla kryptattu tiedosto, joka puretaan käyttämällä käyttäjän syöttämää salasanaa. Tämä kryptattu tiedostokin on vielä piilotettu antamalla sille nimeksi salasanan tiivisteen kymmenen ensimmäistä merkkiä. Tiedostossa on salaisen hakemiston lisäksi listattu myös tiedostot, joista sisältö alisivuille ladataan.

Järjestelmä on teoreettisesti haavoittuvainen siksi, että salasanan tiiviste pitää tallentaa keksiin, jotta sivun voisi refreshata menettämättä sessiota.

Salasana on siis 'mypw' ja salainen hakemisto 'secret/'.

(Kryptaus on oikeastaan turha mutta tulipa testattua sitäkin.)

Synomi [15.08.2011 12:22:46]

#

Joo ihan okhan tuo näyttäis olevan tuo alchemistin suojaus. Tuskin tosiaan mitään kovin arkaa kannattis pitää suojattua tuolla tavoin. Tossahan ei kovin helpolla saa mitään estoa jotain salasanan purku ohjelmia vastaan, mutta eipä niille kovin usein tarvetta ole.


Sivun alkuun

Vastaus

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

Tietoa sivustosta