Cgi Skript leitet weiter aber dann error

Django, Flask, Bottle, WSGI, CGI…
Benutzeravatar
__blackjack__
User
Beiträge: 5458
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Samstag 21. März 2020, 00:40

@Mister: `pwrd` und `usrnm`? Was soll dass denn? Klopapier ist knapp, aber an Buchstaben auf Kosten der Verständlichkeit braucht man wirklich nicht sparen.

Die Vergleiche mit ``== True`` sind unnütz, der Ausdruck davor liefert ja bereits einen Wahrheitswert.

Das ``if``-Konstrukt ist zudem so regelmässig und einfach, dass man das durch ein Wörterbuch ersetzen sollte das Name und Passwort auf den Pfadteil abbildet.

Namen schreibt man in Python klein_mit_unterstrichen. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase). Also `new_url` statt `newURL`.

Code: Alles auswählen

#!/usr/bin/python3
import cgi
import cgitb

cgitb.enable()
response = """Content-type: text/html; charset=utf-8

<html>
<head>
  <title>Login..</title>
  <meta http-equiv="refresh" content="2;URL={}">
</head>
<body>Login...</body>
</html>"""

credentials_to_path = {
    ("peter", "abc"): "mainpeter",
    ("fritz", "def"): "mainfritz",
}

form = cgi.FieldStorage()
path = credentials_to_path.get(
    (form.getvalue("username"), form.getvalue("password")), "error_login"
)
print(response.format("users_lib/{}.html".format(path)))
Den Fehlermeldungen nach scheint die HTML-Datei auf die umgeleitet wird als CGI-Skript angesehen zu werden und nicht als HTML-Datei.

Hat eigentlich schon mal jemand erwähnt, dass man heutzutage kein CGI mehr macht? Die Anbindung du jour heisst WSGI. Und es gibt da auch wirklich ganz kleine Rahmenwerke. Neben Flask beispielsweise auch Bottle. Das ist nur eine einzige Datei.
long long ago; /* in a galaxy far far away */
Mister
User
Beiträge: 25
Registriert: Freitag 24. Januar 2020, 21:58

Samstag 21. März 2020, 01:51

Ja wie gesagt war das halt so in dem python Buch gezeigt und eswegen habe ich es so gemacht
Aber ich schaue mit bottle usw mal an
Mister
User
Beiträge: 25
Registriert: Freitag 24. Januar 2020, 21:58

Montag 23. März 2020, 01:32

Nur ist der cgi skript garnicht das Problem glaube ich. Der leitet mich nämlich immer korrekt weiter und der richtige URL wird aufgerufen. Nur nach dem Aufruf kommt dann der Error. Die HTML Datei ist auch nicht beschädigt oder fehlerhaft, man kann sie in ihrem Verzeichnis öffnen. Nur der Aufruf über den Server scheitert, aber nicht weil es nicht vorhanden ist sondern wegen etwas anderem. Was könnte das sein???
Sirius3
User
Beiträge: 11566
Registriert: Sonntag 21. Oktober 2012, 17:20

Montag 23. März 2020, 07:06

Du hast apache so konfiguriert, dass er alle Seiten als CGI interpretiert. Hat __blackjack__ schon vermutet. Ohne die Konfigurationsdatei zu kennen, kann das natürlich niemand sicher sagen.
Mister
User
Beiträge: 25
Registriert: Freitag 24. Januar 2020, 21:58

Montag 23. März 2020, 13:26

Aber meine ganzen anderen Seiten die auf dem Server miteinander verlinkt sind funktionieren alle. Nur diese beiden Seiten nicht
Sirius3
User
Beiträge: 11566
Registriert: Sonntag 21. Oktober 2012, 17:20

Montag 23. März 2020, 13:42

Toll, das hilft uns jetzt viel weiter.
Benutzeravatar
__blackjack__
User
Beiträge: 5458
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Montag 23. März 2020, 15:08

@Mister: Sind die beiden Dateien eventuell auf ausführbar gesetzt? Liegen die im gleichen Verzeichnis wie all die anderen Seiten die funktionieren?
long long ago; /* in a galaxy far far away */
Mister
User
Beiträge: 25
Registriert: Freitag 24. Januar 2020, 21:58

Montag 23. März 2020, 18:04

__blackjack__ hat geschrieben:
Montag 23. März 2020, 15:08
@Mister: Sind die beiden Dateien eventuell auf ausführbar gesetzt?
Jetzt nicht mehr, ich hatte das eingestellt in der Hoffnung es würde helfen..
__blackjack__ hat geschrieben:
Montag 23. März 2020, 15:08
Liegen die im gleichen Verzeichnis wie all die anderen Seiten die funktionieren?
Nein
Mister
User
Beiträge: 25
Registriert: Freitag 24. Januar 2020, 21:58

Montag 23. März 2020, 18:05

Sirius3 hat geschrieben:
Montag 23. März 2020, 13:42
Toll, das hilft uns jetzt viel weiter.
Schön
Benutzeravatar
noisefloor
User
Beiträge: 2831
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Montag 23. März 2020, 18:31

Hallo,

"funktioniert nicht" und "funktioniert woanders" sind nun mal keine brauchbaren Ansätze, dir konkret Hilfe zu geben. Wenn du deine Apache Konfig nicht hier posten willst - ok, deine Sache. Nur kann dir dann keiner helfen.

Was in sofern aber vorteilhaft wäre, als dass du schneller weg von die CGI-Mist kommst und dich zu der leuchtenden WSGI-Seite hin begibst ;-)

Gruß, noisefloor
Mister
User
Beiträge: 25
Registriert: Freitag 24. Januar 2020, 21:58

Dienstag 24. März 2020, 01:02

OK mach ich
Mittlerweile hab ich es auch zum laufen gebracht indem ich ein http:// und die Server IP davor gesetzt habe im python skript
Danke für die hilfe
Sirius3
User
Beiträge: 11566
Registriert: Sonntag 21. Oktober 2012, 17:20

Dienstag 24. März 2020, 06:18

"/users_lib/"+path+".html" soll also ein absoluter Pfad sein. Und wie verhindert die Passwortabfrage, dass man direkt auf /users_lib/mainpeter.html zugreift?
Mister
User
Beiträge: 25
Registriert: Freitag 24. Januar 2020, 21:58

Dienstag 24. März 2020, 11:53

Garnicht und das ist auch noch ein Problem aber wenigstens funktioniert mein erster cgi skript
Benutzeravatar
__blackjack__
User
Beiträge: 5458
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Dienstag 24. März 2020, 12:48

@Mister: Komische Definition von ”funktionieren” wenn die Funktion einer Anmeldung nicht erfüllt wird. 🤔
long long ago; /* in a galaxy far far away */
Benutzeravatar
noisefloor
User
Beiträge: 2831
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Dienstag 24. März 2020, 12:51

Hallo,

na ja, wenn die Passwortabfrage sinnlos ist, weil einfach zu umgehen, dann würde ich nicht wirklich sagen, dass das Skript funktioniert. Es sei denn, du definierst "funktioniert" als "läuft ohne Fehler durch".

Wenn du endlich ein Webframework verwenden würdest hättest du das Problem nicht, weil die Frameworks i.d.R. fertigen Methoden und Dekoratoren für die Nutzerauthentifizierung haben.
Dich weiter mit CGI zu befassen ist Verschwendung von Lebenszweit.

Gruß, noisefloor
Antworten