• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Apache basic authentification mit Forms

std

Member
Hallo,

ich möchte auf meinen Apache-Webserver einen geschützten Bereich einrichten. Authentifizierung erfolgt per "Apache basic authentification". Funktioniert auch ganz gut. Leider stört mich das Browserpopup und dieses möchte ich durch eine Loginseite ersetzen. Im Internet habe ich folgendes Beispiel gefunden:

Code:
<html lang="de" xmlns="http://www.w3.org/1999/xhtml">
<head>

  <title>3rd party access.</title>
 </head>

<a href="JavaScript:login(user, pass, 'http://meinServer/path/index.html')">
    Protected Web Site
</a>
<script>
function getHTTPObject() {

      var xmlhttp = false;
      if (typeof XMLHttpRequest != 'undefined') {
            try {
                  xmlhttp = new XMLHttpRequest();
            } catch (e) {
                  xmlhttp = false;
            }
      } else {
        /*@cc_on
        @if (@_jscript_version >= 5)
            try {
                xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (E) {
                    xmlhttp = false;
                }
            }
        @end @*/
      }
      return xmlhttp;
}

function login(username, password, url) {
	document.write(username);
	document.write("<br>");
	document.write(password);
	document.write("<br>");
	document.write(url);
	document.write("<br>");
    var http = getHTTPObject();
    document.write(http);
    document.write("<br>");
    http.open("get", url, false, username, password);
    document.write("open");
    document.write("<br>");
    http.send("");
      if (http.status == 200) {
            document.location = url;
      } else {
        alert("No access to the secured web site");
    }
    return false;
}
var user = "ich"
var pass = "bekannt"
</script>

Zur Fehlersuche wurde von mir noch ein paar document.write eingesetzt.

Mit dem IE funktioniert das Beispiel auch ganz gut. Mein Firefox 22 hängt sich beim http.open aber leider auf.

Hat einer eine Idee, wo der Fehler liegt?

Danke
Stefan

PS: Leider finde ich nicht mehr den Original Link. Aber hier ist das Beispiel auch zusehen.
 

spoensche

Moderator
Teammitglied
Du solltest nach dem Aufruf der Funktion getHTTPObject auch überprüfen, ob die Funktion auch wirklich ein Objekt zurück gibt oder false. Zum debuggen solltest du statt document.write eher console.log verwenden.

Gib im catch Block mal irgendeinen Text aus statt nur die Variable auf false zu setzen.
 
OP
S

std

Member
Hallo spoensche,

danke für deinen Tipp mit dem console.log . Ich habe alle document.write dagegen ausgetauscht und dann noch einmal die Funktion login geschrieben. Jetzt geht es. Ich tippe mal, das darin ein Schmutzzeichen war.

Viele Grüße
Stefan
 

spoensche

Moderator
Teammitglied
Du willst aber doch wohl nicht den Usernamen und das Passwort im Klartext und im Quelltext and die Funktion übergeben?

Tippen oder Wissen? Du wirst doch wohl die eingegeben Daten überprüfen und XSS, CSRF u. SQL Code raus filtern oder?
 
OP
S

std

Member
Das war jetzt erst einmal die Machbarkeitsstudie. Username und Paßwort wird dann in einem mehrstufigen Verfahren abgefragt und auch auf die passende Syntax überprüft.
 
Oben