uli: Passwort/ Formular- Abfrage

Hi,

ich möchte eine Formularabfrage verwirklichen. Bei Eingabe von "123" und "Enter" soll Seite A.htm und bei Falschangaben ein "alert" Fenster mit dem Hinweis auf falsche Eingabe erscheinen. Ein Zähler soll die Eingaben mitzählen und bei dreimaliger Falscheingabe auf einen lokalen "Anker" auf der Seite springen.

Leider bring ich`s nicht allein hin! Muß wohl etliches falsch laufen.
Ich wäre super dankbar falls mir jemand den Quelltext berichtigt!
Danke schonmal ganz sehr!
Hier mein Versuch:

<html>
<head>
<script type="text/JavaScript">
<!--
function passwd ()
{
var eingabe;
var zaehler=0;
function test ()
{
 do
 {
  zaehler++;
 if (eingabe=="123") return true;
 alert ("Ihr Passwort ist falsch");
 if (zaehler>2) return false;
 }
 while (true)
 }
if (test())
window.open ("ergebniss.htm", "_self");
else window.open ("registr.htm", "_self");
}
//-->
</script>
<noscript></noscript>
</head>
<body>

<form name="Formular">
<p>Geben Sie bitte Ihr Passwort ein!</p>
<input type="text" name="eingabe" value="">
<input type="button" value="logon" onClick="passwd ()">
<input type="reset">
</form>
</body>
</html>

  1. Hallo,

    ich würde NIEMALS eine Passwortabfrage mit Javascript machen. Eigentlich ist dies auch gar keine echte Passwortabfrage, da man z.B. im Quelltext oder anderswo sofort nach dem richtigen Passwort schauen kann. D.h. es ist sinnlos mit Javascript Passwortabfragen realisieren zu wollen. Benutze besser eine Serverseitige Scriptsprache(Php, ASP, ...) damit geht es besser. Un mit verbindung zu einer Datenbank wird es dann langsam richtig proffesionell :>

    Gruß Markus

  2. Hi uli,

    ich möchte eine Formularabfrage verwirklichen.

    dann benutze bitte einen zuverlässigen Schutz:

    http://aktuell.de.selfhtml.org/artikel/server/htaccess/
     http://aktuell.de.selfhtml.org/artikel/server/htaccess-faq/

    Hier steht das Passwort im Quelltext:

    »» if (eingabe=="123") return true;

    Und hier die Adressen der "geheimen" Seiten:

    »» window.open ("ergebniss.htm", "_self");
    »» else window.open ("registr.htm", "_self");

    Was meinst du, wie lange mich das aufhält?

    Grüße,
     Roland

    1. Danke, aber die Sicherheit spielt kaum eine Rolle in dem Fall!

      1. Danke, aber die Sicherheit spielt kaum eine Rolle in dem Fall!

        Sorry, vielleicht verstehe ich dich flasch. Aber wenn die Sicherheit keine Rolle spielt, warum dann überhaupt eine Passwortabfrage? Du kannst ja auch mittels anderer Methoden das gleiche erreichen.

    2. Hi Orlando

      Was meinst du, wie lange mich das aufhält?

      Ein paar Sekunden vielleicht.

      Aber ich muss sagen, dass ich sehr lange ausprobiert habe (hatte mit diesem Posting nichts zu tun) um einen effektiven Schutz mit JS zu realisieren.

      Das hat auch geklappt:

      Ich habe zwei Eingabefelder. In das obere kommt der Name rein in das untere das Passwort. Dann wird beides mit replace etwas verhackstückelt, denn jeder Buchstabe wird durch eine 2 oder 3 lange Zahlenkombination ersetzt. Dann wird per indexOf gecheckt ob ein paar Zahlenkombinationen drin vorkommen.
      Dann wird das Passwort nochmal zerhackstückelt, allerdings diesesmal so, dass die Zahlenkombination kürzer wird. Am Ende ist sie ungefähr genauso lang, wie bei der Eingabe.

      Sollten die Zahlenkombinationen gefunden worden sein wird zum Verzeichnis mit dem Namen des ersten Eingabefeldes gelinkt (nicht des ersetzten) und als Dateiname wird das zum zweiten mal replacete Feld genommen.

      Ist das nicht sicher, denn nirgendwo ist auch nur ein einzelnes Wort angegeben?

      Warte auf Kommentar, H²O

      1. Hallo,

        Ist das nicht sicher, denn nirgendwo ist auch nur ein einzelnes Wort angegeben?

        Wenn ein User einmal den Namen des Verzeichnisses und der Datei herausgefunden hat,
        kann er die Datei ohne Probleme beliebig oft abrufen und Links darauf setzen.
        Ohne Server-seitige Technologien gibt es keinen dauerhaften Schutz.

        Gruß
        Alexander Brock

        1. Hi.

          Wenn ein User einmal den Namen des Verzeichnisses und der Datei herausgefunden hat,
          kann er die Datei ohne Probleme beliebig oft abrufen und Links darauf setzen.
          Ohne Server-seitige Technologien gibt es keinen dauerhaften Schutz.

          Oh, doch:
          Wenn man sich nicht in einem Framefenster befindet (der Name wird gecheckt) dann wird man weggeleitet.
          Und das ganze ist per Base64 verschlüsselt, dass heisst nur, wenn du JS hast kannst du was sehen.

          H²O

          1. Hallo,

            Wenn man sich nicht in einem Framefenster befindet (der Name wird gecheckt) dann wird man weggeleitet.

            Das ist jetzt aber eine server-seitige Technologie.

            Und das ganze ist per Base64 verschlüsselt, dass heisst nur, wenn du JS hast kannst du was sehen.

            Was ist denn Base64 (wahrscheinlich auch eine server-seitige Technologie) ?
            Und warum verwendest du nicht gleich htacces, das halte ich für einfacher (und barrierefrei)?

            Gruß
            Alexander Brock

            1. Hi.

              Das ist jetzt aber eine server-seitige Technologie.

              Was ist denn server-seitig? Ich dachte, dass heißt, dass das nur der Server macht?

              Was ist denn Base64 (wahrscheinlich auch eine server-seitige Technologie) ?

              Ein Seitenverschlüsselungssystem per JS. Das heisst, wenn du JS hast siehst du es, außer du bist nicht legal reingegangen, dann wirst du umgeleitet.
              Wenn du kein JS siehst du auch nichts.

              Und warum verwendest du nicht gleich htacces, das halte ich für einfacher (und barrierefrei)?

              Weil ich das noch auf meinem HOME-PC läuft und da ja kein htacces geht, oder?

              H²O

              1. Hallo,

                Jetzt blick ich nicht mehr durch.
                Könntest du mal ein Beispiel posten?

                Gruß
                Alexander Brock

                1. Hi.

                  Jetzt blick ich nicht mehr durch.
                  Könntest du mal ein Beispiel posten?

                  Ok:

                  Du gibst z.B. als Benutzernamen "Haus" ein. Als erstes wird dieses Wort in ein hidden Feld übertragen (Erklärung kommt später).
                  Das Wort wird jetzt zersetzt. "H" durch 02, "a" durch 46, "u" durch 93 und s durch 45.
                  Zusammen also "02469345". Jetzt wird gecheckt ob die Zahlen "69", "34", "24" und "45" vorkommen. Kommt es geht es weiter. Wenn nicht kommt direkt alert("Falsches Passwort!").

                  Als Passwort wurde "Igel" eingegeben. Das Wort wird ebenfalls zersetzt: "I" durch 76, "g" durch 18, "e" durch 62 und "l" durch 49.
                  Das ergibt: "76186249". Hier wird nun auch gecheckt ob ein paar Zahlenkombinationen drin vorkommen: Wenn "61", "24", "18" und "86" drin vorkommen geht's weiter, sonst wieder alert(...).

                  So jetzt wird "76186249" zersetzt: "76" durch g, "18" durch u, "62" durch m, "4" durch w und "9" durch v. (Nach 6 Ziffern wird jede Zahl einzeln ersetzt. Deshalb sind es beim letzten mal zwei Buchstaben für zwei Zahlen)
                  Jetzt haben wir: "gumwv".

                  Sollte bis jetzt alles geklappt haben wird nun verlinkt.
                  Als Verzeichnis wird der Inhalt des hidden-Feldes genommen (siehe Anfang) und als Datei der Inhalt des Passwort-Feldes + ".html" .
                  Also würde in diesem Fall "Haus/gumwv.html" der Link heißen.

                  Ich finde das verdammt sicher, wenn man bedenkt, dass man die Seite "Haus/gumwv.html" nur aufrufen kann wenn man sich in einem Frameset mit richtigem Namen befindet.

                  Ich hoffe, du hast jetzt alles verstanden (ansonsten frage).

                  Ich finde diese Art des Passwortschutzes übrigens ziemlich gut und auch sicher.

                  Ich warte auf Kommentare, H²O

                  1. Hallo,

                    Ich finde das verdammt sicher, wenn man bedenkt, dass man die Seite "Haus/gumwv.html" nur aufrufen kann wenn man sich in einem Frameset mit richtigem Namen befindet.

                    Kein Problem,
                    Wenn ich die Adresse der Seite kenne,
                    erstelle ich ein Frameset mit richtigem Namen (der steht ja in der HTML-Datei mit der Passwort-Abfrage)
                    und verlinke von da auf die Seite.
                    --> Passwort außer Gefecht.

                    Ich finde diese Art des Passwortschutzes übrigens ziemlich gut und auch sicher.

                    Ich nicht.

                    Gruß
                    Alexander Brock

                    1. Hi.

                      Kein Problem,
                      Wenn ich die Adresse der Seite kenne,
                      erstelle ich ein Frameset mit richtigem Namen (der steht ja in der HTML-Datei mit der Passwort-Abfrage)
                      und verlinke von da auf die Seite.
                      --> Passwort außer Gefecht.

                      Da hast du jetzt natürlich Recht. Da habe ich noch gar nicht dran gedacht.

                      Ich nicht.

                      Ist eben nicht jedermans Sache.

                      Aber ich habe eine Idee. Man übergibt den Namen der Verschlüsselung des Passwortes (also bei Igel "76186249") und nennt das Fenster per window.name danach. Und dann wird man auf der verlinkten Seite zu der Seite window.name + ".html" umgeleitet. Ist das jetzt sicher?

                      H²O

                      PS: Wie bekommst du eigentlich den Namen der Seite raus? Wenn du das Passwort und den Benutzernamen nicht kennst, dann weißt du doch auch gar nicht, welche Seite denn angezeigt werden soll.

                      1. Hallo,

                        PS: Wie bekommst du eigentlich den Namen der Seite raus? Wenn du das Passwort und den Benutzernamen nicht kennst, dann weißt du doch auch gar nicht, welche Seite denn angezeigt werden soll.

                        Das alles könnte ein User machen, der einen Namen und ein Passwort hat.
                        Alle anderen könnten einfach mal (mit einem Programm) alles durchprobieren.
                        Dazu findet man heraus, wie die Buchstaben in Zahlen umgewandelt werden
                        und kann so die Anzahl der Möglichkeiten (stark?) einschränken.
                        Und durch die Prüfung verrätst du ja, welche Zahlen(Kombinationen) vorkommen müssen.

                        Aber ich habe eine Idee. Man übergibt den Namen der Verschlüsselung des Passwortes (also bei Igel "76186249") und nennt das Fenster per window.name danach. Und dann wird man auf der verlinkten Seite zu der Seite window.name + ".html" umgeleitet. Ist das jetzt sicher?

                        Die Verschlüsselung des Passwortes kann man herausfinden, indem man ein kleines alert(VariablederVerschluesselung) in den Code bastelt.

                        Gruß
                        Alexander Brock

                        P.S. Was für ein Server läuft denn auf deinem Home-PC?

                        1. Hi.

                          Das alles könnte ein User machen, der einen Namen und ein Passwort hat.

                          Na du bist mir gut. Wie soll ich es denn auch verhindern, dass die den Namen und Passwort haben nicht reinkommen.

                          Alle anderen könnten einfach mal (mit einem Programm) alles durchprobieren.

                          Stimmt, denn so viele Möglichkeiten gibt es ja nicht

                          Die Verschlüsselung des Passwortes kann man herausfinden, indem man ein kleines alert(VariablederVerschluesselung) in den Code bastelt.

                          Aber du schreibst die Seite doch nicht?

                          Ich habe wieder viel dazu gelernt, schönen Dank, H²O

                          1. Hallo,

                            Das alles könnte ein User machen, der einen Namen und ein Passwort hat.

                            Na du bist mir gut. Wie soll ich es denn auch verhindern, dass die den Namen und Passwort haben nicht reinkommen.

                            Es könnte ja ein User auf den Gedanken kommen dieses Verzeichnis öffentlich zugänglich zu machen, oder das Login zu vereinfachen.
                            Wer prüft übrigens den Namen des Frames?
                            Wenn das auch der Client macht, kann man das einfach aus dem Code nehmen.

                            Die Verschlüsselung des Passwortes kann man herausfinden, indem man ein kleines alert(VariablederVerschluesselung) in den Code bastelt.

                            Aber du schreibst die Seite doch nicht?

                            Aber ich kann sie verändern, sie landet ja in meinem Browser Cache.

                            Lernen ist ein nie endender Prozess.
                            Ich versuche zu lernen, indem ich mir Gedanken über die Probleme Anderer mache und nach Lösungen suche.

                            Gruß
                            Alexander Brock

                            1. Hallo.

                              Es könnte ja ein User auf den Gedanken kommen dieses Verzeichnis öffentlich zugänglich zu machen, oder das Login zu vereinfachen.
                              Wer prüft übrigens den Namen des Frames?
                              Wenn das auch der Client macht, kann man das einfach aus dem Code nehmen.

                              Na toll. Wenn jemand ein Passwort von einem htacess Bereich verrät, dann kann da auch jeder rein.

                              Aber ich kann sie verändern, sie landet ja in meinem Browser Cache.

                              Stimmt ja.

                              Lernen ist ein nie endender Prozess.
                              Ich versuche zu lernen, indem ich mir Gedanken über die Probleme Anderer mache und nach Lösungen suche.

                              Vielen Dank für die vielen Informationen.
                              H²O

                              1. Hallo,

                                Vielen Dank für die vielen Informationen.

                                Danke ebenfalls, es hat Spass gemacht sich über diese Art des Passwortschutzes Gedanken zu machen.
                                99,99% der User würden nie auf solche Umgehungsversuche kommen,
                                also ist der Passwortschutz immer noch besser als eine direkte Abfrage des Passwortes
                                über einen einfachen vergleich zweier Variablen.
                                Wenn du allerdings diese umständliche Zahlenprüfung entfernen würdest,
                                hätte ein Hacker keinen Anhaltspunkt, welche Buchstaben/Zahlen im Passwort vorkommen und könnte so die Anzahl der Möglichkeiten nicht eingrenzen.
                                Für eine Kombination aus einem 5-stelligen Buchstaben Passwort und einem 6-stelligen Benutzernamen gibt es zum Beispiel 151.115.727.451.829.000.000.000 Möglichkeiten.
                                Für ein 5-stelliges Zahlenpasswort und einen 6-stelligen Benutzernamen hingegen nur
                                        439.804.651.110.400.000 Möglichkeiten

                                Man kann aber auch auf Home-PC's den http://www.apache.org installieren, der kann htaccess und dieser Thread erübrigt sich.

                                Gruß
                                Alexander Brock

                                1. Hi.

                                  Danke ebenfalls, es hat Spass gemacht sich über diese Art des Passwortschutzes Gedanken zu machen.

                                  Freut mich zu hören.

                                  99,99% der User würden nie auf solche Umgehungsversuche kommen,

                                  Diese Sicherheit würde mit reichen.

                                  Vielen Dank nochmal für alles, H²O

  3. Hi.

    Hier ist ein Link dazu:
    http://www.christoph-schnauss.de/prog/jscript/jscript07.htm

    Das Script fragt auch dreimal ab, aber eben mit promt (hoffe das ist bekannt).
    Ich denke du hast genug Kentnisse um das selber noch so umzubauen wie du es brauchst.

    Allerdings muss ich dir wohl auch sagen, dass mit JS Passwörter-Bereich zu machen, sehr schlecht ist, denn man kann es auslesen.

    Ich hoffe ich konnte helfen, H²O

    1. Hi,

      Danke, so läuft es auch momentan. Ich möchte aber einfach das Passwort im Formular eingeben und nicht in dem Fenster.
      Ist es zuviel verlangt, meinen Quelltext zu berichtigen?
      Das wäre echt hilfreich!

      Danke

      uli

      1. Hi,

        Danke, so läuft es auch momentan. Ich möchte aber einfach das Passwort im Formular eingeben und nicht in dem Fenster.
        Ist es zuviel verlangt, meinen Quelltext zu berichtigen?
        Das wäre echt hilfreich!

        Also, ich habe mir den Quellcode mal angesehen.
        Da steht User Eingabe = window.prompt(...)
        Jetzt muss du doch an das window.prompt nur das Feld setzten oder?
        Ich weißt nicht genau ob es das tut, aber du kannst es ja mal ausprobieren.
        Z.B.: User Eingabe = document.forms[0].elements[0].value;

        Sollte das nicht klappen melde dich einfach nochmal.

        H²O

        1. Also, ich habe mir den Quellcode mal angesehen.
          Da steht User Eingabe = window.prompt(...)

          Sorry, ich meinte meinen Quelltext! Vielleicht gehts auch anders, aber ich habe nicht sonderlich viel Erfahrung in JS.

          Danke trotzdem,

          uli

          1. Hallo uli.

            Sorry, ich meinte meinen Quelltext! Vielleicht gehts auch anders, aber ich habe nicht sonderlich viel Erfahrung in JS.

            OK, ich verstehe. Ich habe jetzt mal versucht auf deinem Grundprinzip ein vernünftiges Script aufzubauen.
            Es ist nicht nur beim Versuch geblieben.
            Hier ist das Script:

            <html>
            <head>
            <script type="text/JavaScript">
            <!--

            function passwd()
            {

            var eingabe = document.Formular.eingabe.value;
            var zaehler= document.Formular.check.value;

            if (eingabe != "123" && zaehler>1){
            location.href="#anker1";
            document.Formular.check.value++ ;
            }

            -----------------------
            Also, das Feld hier fragt ab, ob 123 nicht im Textfeld steht und ob der zaehler über 1 ist, also ob jetzt das dritte mal die falsche eingabe ist. (das mit der >1 stimmt wirklich, auch wenn es eigentlich >2 heißen müsste).
            -----------------------

            else if (eingabe=="123"){
            location.href="A.htm";
            }

            -----------------------
            Wenn die eingabe 123 ist wird zu seite A.htm weitergeleitet
            -----------------------

            else{
            alert("Falsch!!");
            document.Formular.check.value++ ;

            -----------------------
            sollte es irgendetwas anderes sein wird der zaehler um 1 erhöht und eine alert angabe wird gemacht.
            -----------------------

            }
            }

            //-->
            </script>
            <noscript></noscript>
            </head>
            <body>

            <form name="Formular">
            <p>Geben Sie bitte Ihr Passwort ein!</p>
            <input type="text" name="eingabe" value="">
            <input type="button" value="login" onClick="passwd()">
            <input type="reset">
            <input type="hidden" name="check" value="0">
            ----------------------------
            hier ist der eigentiche zähler: ein verstecktes feld, dass die eingaben zählt. Der Rest dürfte klar sein.
            ----------------------------
            </form>

            <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
            <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

            <a name="anker1"><br>Dreimal hintereinander das falsche Passwort! Na sowas.</a>

            ----------------------------
            hierhin wird verlinkt und die vielen br's lassen es einfach ein bisschen schöner aussehen
            ----------------------------

            <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
            <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

            </body>
            </html>

            So, jetzt musst du nur noch die
            ------------------
            entfernen (text dazwischen natürlich auch)
            und dann kannst du das script benutzen.

            Solltest du noch Fragen haben, beantworte ich diese gerne.

            Ich hoffe ich konnte helfen, H²O