Passwortgeschützte Internetseite ansteuern
-
Bei aktuellem IE funktioniert die USER/PW-Übergabe via http nicht mehr.
-
Wenn es nicht mehr funktioniert, wie kann ich es dann machen???
Bin für alles dankbar,
Euer Entertainer
-
Wie Vernochan bereists gesagt hatte, php skript basteln. Aber das geht natürlich nur wenn die seite dir gehört und du auch die daten ändern kannst.
Wie ist die seite denn per passwort geschützt ? Per Formular und PHP oder per htaccess (aufpoppendes fenster mit login aufforderung )?
MFG Simon
-
Wieso geht das nicht mehr?
Und was ist mit .htaccess gesicherten seiten? da wird Username/Passwort doch auch über http übertragen.. ?!?!
Und www.animexx.de (jaja schlagt mich :D) bezieht auch Username/Passwort ohne eine Extra seite.... Halt über dieses kleine eingabe fenster..Oder meinst du, das lediglich die angabe über URL nicht mehr geht?
Oder ich liege falsch mit meinem Obig gesagtem..
-
www.animexx.de benutzt (glaub ich zumindest) eine PHP-Header funktion.
Hier mal ein beispiel:
<?php if($PHP_AUTH_USER!="usertest" OR $PHP_AUTH_PW!="pwtest") { Header('HTTP/1.1 401 Unauthorized'); Header('WWW-Authenticate: Basic realm="Top Secret"'); echo "Mit Abbrechen kommst Du hier nicht rein.\n"; exit; } echo "username / passwort richtig"; ?>
In php kannst du dann noch nach
echo "username / passwort richtig";
den benutzernamen / passwort über $PHP_AUTH_USER und $PHP_AUTH_PW bekommen.
kannst ja mal versuchen Dateiname.php?PHP_AUTH_USER=usertest&PHP_AUTH_PW=pwtest
die parameter direkt zu übergeben.mfg simon
-
Dieser Thread wurde von Moderator/in Jansen aus dem Forum Borland C++ Builder (VCL/CLX) in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Gibt es nicht noch irgendeinen Weg, um das ganze unter C++ anzusteuern.
Es soll im Browser einfach die Internetseite nach erfolgreicher Passworteingabe erscheinen.Gebt mir bitte Anregungen, wenn ihr etwas parat habt!
Vielen Dank,
Euer Entertainer
-
Usernamen und Passwort sind base64 verscxhlüsselt.
base64(username:passwort)
Wenn du das ganze in einem POST als
Authorisation: Basic base64(username:passwort)
\n\nan den Server sendest bist du drin. Mehr macht der Browser auch nicht.
Wie du das aber mit dem IE machst KA.
-
Sorry, aber ich kenne mich da nicht so gut aus, könntest du mir vielleicht etwas Beispielscode zeigen???
Ich weiß nicht wie so etwas wie ein POST funktioniert.Vielen Dank,
Entertainer
-
Hmm.. also wird, wenn man mit PHP_AUTH_USER arbeitet der Username und das Passwort nicht im Header gesendet, sondern die PHP Parser gibt einen Zusätzlichen Header aus.. oder so in der art.. ?
Auf jedenfall funktioniert die sache mit PHP_AUTH_USER=usertest&PHP_AUTH_PW=pwtest bei ANimexx nicht... ^^"
Okay hab grad bei meinem Homeserver register_globals abgestellt.. jetzt geht das auch nichtmehr.. wird also bei Animexx daran dann liegen... Hmmm...Interresant...
Aber wie genau is das dann mit .htaccess geschützten Ordnern? Da kommt ja auch die PW Abfrage....
-
Was ich geschrieben habe wird im Header gesendet.
IMHO kann man das bezeichen wie man will. Man öffnet eine Socket und fängt an mit
POST /www.c-plusplus.net HTTP/1.0\nHost: www.c-plusplus.net\nContent-Type applikation/x-www-form-urlencoded\nContent-Length: 35\nAuthorisation: Basic base64(username:passwort)\n\nMEINEPOSTVAR=hallo&meinezweite=welt\n\n
Die NEWLINE sind zu beachten. Conetnt-Length ist die Zeichenlänge nach der Authorisierung. Hier 35 Zeichen beginned bei MEINEPOSTVAR
Das ganze sendet man nun über den Socket und erwarte die Antwort. So macht es jeder Brwoser.
-
ich verstehe es leider immer noch nicht. In diesem Thema bin ich noch recht neu. Könnte mir nicht vielleicht jemand etwas C++ Code als Beispiel bereitsstellen???
Ich komme echt nicht weiter. Bitte helft mir!!!
Vielen Dank,
Euer Entertainer
-
Du besorgst dir eine Klasse welche dir Socket-Funktinen zur verfügung stellt. Dann eine Socket zu einem Webserver öffnen und das oben angezeigte senden. Parameter und Website muss geändert werden.
-
Wozu sollte das gut sein? Er will doch offenbar nicht selbst den Inhalt der Seite abrufen sondern einen auf dem System installierten Browser dazu veranlassen, die Seite zu laden.
-
Ich habe nun versucht das alles in eine Funktion zu packen, aber es funktioniert nicht. Hier mein Source:
void __fastcall TForm1::WebServerAnsteuern(string strUrl, unsigned short usPort) { WSADATA wsa; if(::WSAStartup(0x101, &wsa )!= 0) // Sockets starten { WSACleanup(); _exit(0); } string strHost, strPfad; char caHostName[256], caFilePath[MAX_PATH]; strPfad.assign(strUrl.substr(strUrl.find("http://")+7)); strHost.assign(strPfad, 0, strPfad.find_first_of("/")); strPfad.assign(strPfad.substr(strPfad.find_first_of("/")+1)); struct hostent*(Host) = gethostbyname(strHost.c_str()); if(Host) { strcpy(caHostName, inet_ntoa(*((struct in_addr*)Host->h_addr_list[0]))); } else { strcpy(caHostName, strHost.c_str()); } SOCKADDR_IN addr; addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr(caHostName); addr.sin_port = htons(usPort); SOCKET Sock = socket(AF_INET, SOCK_STREAM, NULL); unsigned long NONEBLOCK = 1; if(Sock == SOCKET_ERROR || connect(Sock, (PSOCKADDR) &addr, sizeof(addr)) == SOCKET_ERROR || ioctlsocket(Sock, FIONBIO, &NONEBLOCK) != 0) { closesocket(Sock); WSACleanup(); } else { fd_set fds; struct timeval tv; tv.tv_sec = 20; tv.tv_usec = 0; char caUrl[256]; sprintf(caUrl, "%s%s%s%s%s", "GET /", strPfad.c_str(), " HTTP/1.0\r\nUser-Agent: Benutzer- Anmeldung 1.0\r\nHost: ", strHost.c_str(), "\nAuthorisation: Basic base64(Benutzer:Passwort)\n\n"); int iSel, Byte, err = 0, iTimeOut = 0; unsigned long ulSum = 0, ulSendLong = strlen(caUrl); do { FD_ZERO(&fds); FD_SET(Sock, &fds); iSel = select(Sock + 1, NULL, &fds, NULL, &tv); if(iSel && FD_ISSET(Sock, &fds)) { Byte = send(Sock, caUrl, ulSendLong, 0); if(Byte == SOCKET_ERROR) { err = GetLastError(); if(err == WSAEWOULDBLOCK) { if(iTimeOut++ < 1000) { Sleep(10); continue; } } closesocket(Sock); } else if(Byte > 0) { ulSum += Byte; if(ulSum >= ulSendLong){break;} } else { if(iTimeOut++ > 1000) { closesocket(Sock); WSACleanup(); } Sleep(10); } } else { if(iTimeOut++ > 1000) { closesocket(Sock); WSACleanup(); } Sleep(10); } } while(!err); } closesocket(Sock); WSACleanup(); Application->MessageBox("Anmeldevorgang beendet!", "Anmeldevorgang beendet", 0+64); }
Ich hoffe, ihr könnt mir nun helfen!!!
Vielen Dank,
Euer Entertainer
-
Jansen schrieb:
Wozu sollte das gut sein? Er will doch offenbar nicht selbst den Inhalt der Seite abrufen sondern einen auf dem System installierten Browser dazu veranlassen, die Seite zu laden.
Das kann schon sein aber ich kann ihm nur die Lösung bieten die ich habe. Wie man das im IE umsetztbzw. ob man ihn dazu bringen kann soweas zu machen weiß ich nicht und habe ich auch oben schon geschrieben. Den Ansatz wie es der Browser macht habe ich deshalb geschrieben weil es ja vielleicht möglich ist mit eine COM zu interagieren.
IMHO denke ich aber das er das ganze nicht für den IE braucvht sondern irgend eine Program schreiben will das diese Anmeldung kann.
-
Ohne zu testen ob diese Funktion richtig ist:
base64(Benutzer:Passwort)
ist eine Funktion die es nicht gibt.
Die musst du dir selbst schreiben oder eine vorhandene Klasse besorgen.
Ich wollte damit nur aufzeigen wie UID:PWD übergeben werden.
-
Vielleicht hilft diese Info weiter:
Die Anmeldung funktioniert mit Outlook Web Access, was wohl auf ASP deutet.
Vielleicht kennt hierfür jemand einen Weg für die Anmeldung.
Vielen Dank,
Euer Entertainer
-
Hallo Leute,
Ich habe mal wieder etwas Zeit gefunden und weiter nach einer Lösung meines Problems gesucht. Ich bin bei MSDN auf eine mögliche Antwort getroffen, die ich angepasst habe. Leider funktioniert es dennoch nicht. Vielleicht könnte sich jemand den Code mal ansehen:
HINTERNET hOpenHandle, hConnectHandle, hResourceHandle; DWORD dwError, dwStatus; DWORD dwStatusSize = sizeof(dwStatus); char strUsername[64], strPassword[64]; strUsername[64] = (char)"Benutzer"; strPassword[64] = (char)"Passwort"; hOpenHandle = InternetOpen("Anmeldung", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); hConnectHandle = InternetConnect(hOpenHandle, "https://Testserver.de/unterordner/", INTERNET_INVALID_PORT_NUMBER, NULL, NULL, INTERNET_SERVICE_HTTP,0,0); hResourceHandle = HttpOpenRequest(hConnectHandle, "GET", "/premium/default.htm", NULL, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION, 0); resend: { HttpSendRequest(hResourceHandle, NULL, 0, NULL, 0); HttpQueryInfo(hResourceHandle, HTTP_QUERY_FLAG_NUMBER | HTTP_QUERY_STATUS_CODE, &dwStatus, &dwStatusSize, NULL); switch (dwStatus) { case HTTP_STATUS_PROXY_AUTH_REQ: // Proxy Authentication Required { // Insert code to set strUsername and strPassword. // cchUserLength is the length of strUsername and cchPasswordLength // is the length of strPassword. DWORD cchUserLength, cchPasswordLength; cchUserLength = sizeof(strUsername); cchPasswordLength = sizeof(strPassword); // Insert code to safely determine cchUserLength and cchPasswordLength. // Insert error handling code as appropriate. InternetSetOption(hResourceHandle, INTERNET_OPTION_PROXY_USERNAME, strUsername, cchUserLength+1); InternetSetOption(hResourceHandle, INTERNET_OPTION_PROXY_PASSWORD, strPassword, cchPasswordLength+1); goto resend; break; } case HTTP_STATUS_DENIED: // Server Authentication Required { // Insert code to set strUsername and strPassword. // cchUserLength is the length of strUsername and cchPasswordLength // is the length of strPassword. DWORD cchUserLength, cchPasswordLength; cchUserLength = sizeof(strUsername); cchPasswordLength = sizeof(strPassword); // Insert code to safely determine cchUserLength and cchPasswordLength. // Insert error handling code as appropriate. InternetSetOption(hResourceHandle, INTERNET_OPTION_USERNAME, strUsername, cchUserLength+1); InternetSetOption(hResourceHandle, INTERNET_OPTION_PASSWORD, strPassword, cchPasswordLength+1); goto resend; break; } } }
Die Quelle: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/handling_authentication.asp
Wie bereits gesagt arbeite ich mit dem C++ Builder mit dem ich auch alles kompilieren kann. Es handelt sich um einen Server mit ASP und https, bei dem ich die Anmedlung realisieren möchte.
Vielen Dank für eure Hilfe
-
Kann mir denn wirklich keine meine Fehler nennen oder wenigstens einen Hinweis geben???
Vielen Dank für euer Engagement,
Euer Entertainer