Autor Zpráva
JerryCB
Profil *
Dobrý večer,

V článku http://interval.cz/clanky/zaheslovany-pristup-na-stranku/ jsem našel script sloužící k zaheslování stránky, respektive script, pomocí kterého můžu mít přístup na některé stránky chráněn heslem.

Velice mě vyhovuje pro svou zjevnou jednoduchost, ale nevyhovuje mi z důvodu, že přístupové heslo si může každý přečíst ze zdrojového kódu stránky. Proto mě jako jediné východisko napadlo nahrávat tento script pomocí jiného scriptu. Ale výsledek nefunguje...

Zde píši výše popisovaný zdrojový kód: ...

<SCRIPT LANGUAGE="JavaScript">
<!--
function Login(){
var done=0;
var username=document.login.text.value;
var password=document.login.pass.value;
username=username.toLowerCase();
if (username=="abcd" && password=="1234") { window.location="tajnastranka"; done=1; }
if (done==0) { alert("Bylo zadáno špatné uživatelské jméno nebo heslo!"); }
}
// -->
</SCRIPT>

... následuje formulář login

Nyní bych celý tento script na stránce nahradil nahradil :

<script language=JavaScript src="extrasoubor.js"></script>

a do souboru .js vložím :

document.write("<SCRIPT LANGUAGE='JavaScript'> ");
document.write("<!-- ");
document.write("function Login(){ ");
document.write("var done=0; ");
document.write("var username=document.login.text.value; ");
document.write("var password=document.login.pass.value; ");
document.write("username=username.toLowerCase(); ");
document.write("if (username=='abcd' && password=='1234') { window.location='tajnastranka'; done=1; } ");
document.write("if (done==0) { alert('Špatné uživatelské jméno nebo heslo!'); } ");
document.write("} ");
document.write("// --> ");
document.write("</script>");

Řádky nezalamuji, ale přesto výsledek nefunguje, a po stisknutí tlačítka se jen objeví nápis : Na stránce došlo k chybě.

Nevíte někdo čím to je, a nebo zda se takto dá moje situace řešit.

Předem moc díky. Jerry
svadla
Profil
ikdyz tomu moc nerozumim, tak myslim ze to tvoje heslo bude stejne citelne z nejakeho souboru
pouzij php a mas to vyresene napr tady
JerryCB
Profil *
ikdyz tomu moc nerozumim, tak myslim ze to tvoje heslo bude stejne citelne z nejakeho souboru
pouzij php a mas to vyresene napr tady

Zdravím, mám web na webzdarma, ani nevím zda to podporuje, a hlavně se v PHP vůbec nevyznám.
Vím že kdyby se někdo mermomocí chtěl na zabezpečené stránky dostat ( i když tam nic tak strašně tajného není, jen soukromé fotografie ) tak se tam dostane i když to schovám do externího souboru, ale je to další překážka, a hlavně to heslo není zase tak na očích... navím v MSIE, nejdou js soubory přečíst. Teda alespoň v mé verzi.
svadla
Profil
JerryCB

tak dej ten funkcni skript do externiho souboru, efekt bude stejny. Webzdarma samozrejme php umi a pokud pouzijes ten priklad co jsem posilal tak to je skoro bez prace, ale jak chces.

Jeste me napadlo, ze pokud to heslo bude takhle na ocich, tak muzes kontrolovat jestli souhlasi hash toho zadaneho a spravneho hesla - aspon neco.
peta
Profil
<SCRIPT LANGUAGE="JavaScript">
<!--
function Login(){
var done=0;
var username=document.login.text.value;
var password=document.login.pass.value;
username=username.toLowerCase();
if (username=="abcd" && password=="1234") { window.location="tajnastranka"; done=1; }
if (done==0) { alert("Bylo zadáno špatné uživatelské jméno nebo heslo!"); }
}
// -->
</SCRIPT>

<?php
function Login(){
$done=0;
$username=$_GET['text'];
$password=$_GET['pass'];
$username=strtolower($username);
if ($username=="abcd" && $password=="1234") { header(..."tajnastranka"); $done=1; }
if ($done==0) { echo("Bylo zadáno špatné uživatelské jméno nebo heslo!"); }
}
?>

Ja v tom nevidim zasadni rozdily.
Funkce pro php se navic snadneji dohledavaji.
cz.php.net/funkce
cz.php.net/string
cz.php.net ... hledat=string ... typ=function ... OK



document.write("...");
documen.write prepisuje komplet cely dokument, pokud se script spusti po ukonceni vykreslovani dokumentu. Pokud je soucasti, pak se vykresli s dokumentem. U innerHTML script nelze vypisovat z duvodu mozneho zacykleni.

<script>document.write('<script>alert(\'aaa\');<\/script>');</script>
Tohle funguje v cistem html naprosto bez problemu

pro sifrovani se dost casto pouziva eval.

Ten script, co mas v document write vypisuje v javascriptove konzoly presne tyto chyby:
Chyba: unterminated string literal
Zdrojový soubor: file:///C:/Program%20Files/Far/zz1.htm
Řádek: 13, Sloupec: 15
Zdrojový kód:
document.write("
Problem ale ve skutecnosti vznika diky tomu, co pisi stale, lomitka / je treba lomitkovat \/. Kdyz to udelas, najednou to zacne fungovat a hlasit chybejici formular. Trochu jsem to upravil

<script>
document.write("\
<SCRIPT LANGUAGE='JavaScript'>\
function Login(){ \
var done=0; \
var username=document.login.text.value; \
var password=document.login.pass.value; \
username=username.toLowerCase(); \
if (username=='abcd' && password=='1234') { window.location='tajnastranka'; done=1; } \
if (done==0) { alert('xpatnx uxivatelskx jmxno nebo heslo!'); } \
} \
<\/script>\
");
Login();
</script>
Chamurappi
Profil
Reaguji na JerryhoCB:
Prosím o odkaz na živou ukázku. V uvedeném kódu chybu nevidím.


Reaguji na svadlu:
pokud to heslo bude takhle na ocich, tak muzes kontrolovat jestli souhlasi hash toho zadaneho a spravneho hesla
Tím si zase tak moc nepomůže, protože na očích zůstane adresa, na kterou se při splnění podmínky přesměrovává. Musel by ještě přidat (jiný) hash do jméno cílového souboru.


Reaguji na peta:
documen.write prepisuje komplet cely dokument, pokud se script spusti po ukonceni vykreslovani dokumentu.
Což je v tomto případě evidentně irelevantní.

U innerHTML script nelze vypisovat z duvodu mozneho zacykleni.
Tento důvod sis vymyslel. Zacyklení jde udělat i s document.write.

pro sifrovani se dost casto pouziva eval
Jasně, udělám eval("heslo") a je dokonale zašifrováno :-)

Ten script, co mas v document write vypisuje v javascriptove konzoly presne tyto chyby
To tedy nevypisuje. To ti vypisuje jen skript, co sis napsal ty, protože jsi nedodržel popsaný postup (zcela jasně píše o „.js souboru“).

lomitka / je treba lomitkovat \/
Jen u značky </script> v interním skriptu. U externího samozřejmě nehrozí, že by </script> ukončil soubor.
peta
Profil
Chamurappi
odzkousej a pak komentuj. Dekuji :)

'Jen u značky </script> v interním skriptu. U externího samozřejmě nehrozí, že by </script> ukončil soubor.'

Proc myslis, ze jsem si dal tu praci a priklad tolikrat jakoby zbytecne zkopiroval?
To lomitko, ktere jsi prave poprel zpusobi u daneho scriptu vypsani problemu s koncem uvozovky.
JerryCB
Profil *
Reakce na chamurappi

konkrétní příklad je na http://www.jerrycb.wz.cz/beta.htm

Přihlašovací formulář je v hlavním rámu ve spodní části stránky.
(stránka beta ještě není v provozu, proto odkazy směřují nikam.. s vyjímkou přihlášení)

soubor js je na adrese http://www.jerrycb.wz.cz/js/jvscrlg.js

Jerry
Chamurappi
Profil
Reaguji na JerryCB:
To je ale překrásný oříšek.

Vtip je v tom, že pokud skript začíná na „<!--“, prohlížeč zcela ignoruje celý řádek, jako kdyby to byl javascriptový komentář. Tvůj shluk volání document.write nikde nezalamuje vypisovaný HTML kód, takže generuje jeden dlouhatánský řádek „<SCRIPT LANGUAGE="JavaScript"> <!-- function Login(){ … } // --> </SCRIPT>“, který díky „<!--“ nedělá vůbec nic. Funkce „Login“ tudíž neexistuje a prohlížeči vadí, že ji zkoušíš volat.

Problému se můžeš snadno vyhnout vynecháním HTML komentáře nebo zalomením řádku. V tvém případě bude ale nejlepší, když do externího skriptu napíšeš přímo tu funkci Login místo skriptu vepisujícího interní <script> s funkcí Login. Nepotřebuješ document.write. Začni soubor rovnou „function Login(){“ a skonči za poslední „}“.


Reaguji na peta:
Proc myslis, ze jsem si dal tu praci a priklad tolikrat jakoby zbytecne zkopiroval?
Nevím, nejsem entomolog, nerozumím tvým myšlenkovým pochodům.

zpusobi u daneho scriptu vypsani problemu s koncem uvozovky
Nezpůsobí. Vyzkoušej si to. Na externím souboru.
JerryCB
Profil *
Reaguji na Chamurappi

Tak na tohle bych tedy v životě nepřišel... moc díky, takto už to funguje.

V budoucnu bude většina prvků stránky načítána z exteních souborů, tak uživatel, který bude chtít mermomocí zjistit heslo musí projít všechny externí soubory než najde ten, který se vstahuje k přihlašovacímu formuláři, tak snad je to alespoň trochu více zabezpečenější než s tím že má heslo přímo ve zdrojáku.

Nejlepší by samozřejmě bylo to, kdyby tajná stránka měla stejný název jako heslo, a tak se tím pádem psal název stránky přímo do formuláře. Ovšem v tomto způsobu mi dost vadí, že uživatel který se splete v zadání hesla nebo jména bude přesměrován na error404 namísto upozornění že zadal špatné uživatelské jmého nebo heslo.

Ještě jednou díky a s pozdravem Jerry

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0