Lösenord

Först av allt skall jag säga det här: Det går inte att använda javaskript för att skydda en sida helt.

Det finns flera anledningar till detta. En är att besökaren kan högerklicka på sidan och välja "Visa källa", och därmed läsa lösenordet i javaskriptet. En annan är att besökaren kan ha javaskriptfunktionen avstängd, och på så sätt komma åt sidan.

Använd alltså inte skriptet nedan – eller något annat javaskript - för att skydda viktiga sidor. Däremot kan du använda det för att åstadkomma åtminstone ett hyggligt skydd, som håller de flesta borta från din skyddade sida.

Du kan pröva här. Använd lösenordet "Lösen" för att öppna sidan.

Lösenordsskyddad sida

Skriptet ligger i HEAD på sidan som öppnas, och det ser ut så här:

<SCRIPT language="JavaScript">
<!--Göm
var sesam;
var sesam1="Lösen";
    sesam=prompt("Skriv ditt lösenord!"," ");
if (sesam!=sesam1)
{
    alert("Fel lösenord – kontakta mig!");    
    window.location="../10.html";
}
//-->
</SCRIPT>

Det mesta av koden känner du redan igen, men vi tittar närmare på den i alla fall.

var sesam;
Det här deklarerar variabeln "sesam", som vi sedan skall använda som jämförelse.

var sesam1="Lösen";
Det här deklarerar variabeln "sesam1" och i den anger vi lösenordet för sidan.

sesam=prompt("Skriv ditt lösenord!"," ");
Det här öppnar en skriptprompt, och det besökaren skriver där kommer att bli värdet i variabeln "sesam".

if (sesam!=sesam1)
Här görs en jämförelse. Om värdet på "sesam" inte är detsamma (!=) som värdet på "sesam1", går skriptkörningen vidare till nästa rad.

Om värdet på "sesam" och "sesam1" är lika gäller inte if-satsen. De båda följande raderna hoppas då över och sidan laddas.

alert("Fel lösenord – kontakta mig!");
Om besökaren skriver in fel lösenord har "sesam" och "sesam1" inte samma värde. Då öppnas en meddelanderuta som talar om för besökaren att lösenordet var fel, och att han bör ta kontakt (för att få rätt lösenord).

window.location="../10.html";
Det här skickar besökaren till den sida som vi vill öppna om han skrev fel lösenord eller inte skrev något lösenord alls.

I det här fallet skickas besökaren helt enkelt tillbaka till den här sidan om lösenord, men du kan använda vilken sida som helst. Se till att du anger rätt sökväg till den.

Här är det dock på sin plats med en liten varning för skillnaderna mellan webbläsarna. I Internet Explorer skickas besökaren direkt till den sida vi har angett. Men i Netscape 4 får besökaren först se en snabb glimt av den skyddade sidan och först därefter öppnas den sida vi har angett.

Flera lösenord

Skriptet ovan bygger på att vi har ett enda lösenord för alla besökare. Men vi vill kanske ge våra besökare egna lösenord, till exempel för att kunna skicka dem vidare från den skyddade sidan till andra skyddade sidor, som är personliga för var och en.

Det här löser vi enklast genom att deklarera fler variabler, en för varje lösenord:

var sesam1 ="Anders";
var sesam2 ="Bertil";
var sesam3 ="Calle";

Samtidigt måste vi ändra i if-satsen, eftersom den för närvarande bara jämför "sesam" med "sesam 1".

if (sesam!=sesam1 && sesam!=sesam2 && sesam!=sesam3)

&&
De två et-tecknen är en logisk operator som betyder "och". Raden ovan kan alltså läsas som: "Om sesam inte är lika med sesam1 och sesam inte är lika med sesam2 och sesam inte är lika med sesam3."

Om allt detta gäller, innebär det att lösenordet som skrevs in inte stämmer med någon av variablerna. Då går skriptkörningen vidare till alert-raden, och när besökaren har klickat på OK-knappen skickas han tillbaka till sidan han kom ifrån.

Ett annat sätt

Om vi vill slippa problemet med att Netscape visar en sekundsnabb glimt av den skyddade sidan, kan vi använda en sida för "mellanlandning". Vi låter länken från den här sidan gå till en sida där besökaren skall skriva in lösenordet, och om lösenordet är rätt kopplas han vidare till den skyddade sidan. Pröva med länken nedan:

Mellanlandning

I HEAD-elementet på "mellansidan" (pass1.html) placerar vi följande kod – observera att koden med skriptet är allt sidan skall innehålla:

<HEAD><TITLE></TITLE> 
<SCRIPT language="JavaScript">
<!--Göm
var sesam=prompt('Skriv ditt lösenord','');
var sesam1="Lösen";
if (sesam==sesam1)
{
    window.location="pass2.html";
}
else
{
    alert("Fel lösenord – kontakta mig!");
    window.location="../10.html";
}
//-->
</SCRIPT>
</HEAD><BODY></BODY></HTML>

if (sesam==sesam1)
Observera här skillnaden mellan == och !=. Här kan vi använda == (är lika med) därför att det är en annan sida som skall öppnas. Om vi använde == i stället för != (är inte lika med) i det första skriptet, skulle den redan "öppnade" sidan öppnas på nytt, och skriptet köras om igen. Vi skulle alltså gå in i en ändlös slinga.

window.location="pass2.html";
Om lösenordet är rätt – "sesam" är lika med "sesam1" – öppnas sidan pass2.html. Det är den sidan som vi vill skydda.

window.location="../10.html";
Om lösenordet är fel, skickas besökaren helt enkelt tillbaka till den här sidan.

Länk till mellansidan
Vi måste förstås även lägga in en länk till mellansidan:

<A href="extra/pass1.html">Mellanlandning</A>

Det här löser bekymret med Netscape. Den snabba glimt Netscape visar blir av mellansidan med skriptet, inte av den skyddade sidan.

Flera lösenord vid mellanlandning

Du kan ange flera lösenordsvariabler även här, men if-satsen måste ändras:

if (sesam==sesam1 || sesam==sesam2 || sesam==sesam3)

Eftersom vi öppnar en annan sida än den som skriptet ligger på, undersöker vi om det angivna lösenordet "är lika med" någon av variablerna. Skulle vi då utnyttja && (och) måste alla villkoren vara uppfyllda.

Med den här ändringen, där vi använder || (eller) i stället för &&, säger vi: "Om sesam är lika med sesam1 eller sesam är lika med sesam2 eller sesam är lika med sesam3." Då räcker det att ett av villkoren uppfylls.

Säkerheten

Som jag skrev ovan är säkerheten i de här skripten inte tillräcklig. En fiffig hackare tar sig lätt förbi lösenordsskyddet. Du bör därför inte använda dem på sidor som innehåller känsligt material.

© SupportData.Net