django: 500 bei suchbots...

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 10. April 2008, 17:23

Ich erhalte komische 500 Fehlermails:

Code: Alles auswählen

Traceback (most recent call last):

  File ".../pylucid/django/core/handlers/base.py", line 73, in get_response
    callback, callback_args, callback_kwargs = resolver.resolve(request.path)

TypeError: unpack non-sequence
Wie ich in den Tracebacks metadaten sehe sind es immer Suchmaschinen bots von Google, Yahoo und Co.
Die machen anscheinend eine GET Abfrage direkt auf die FastCGI dispatcher file. Also statt www.domain.tld hängt da noch /index.fcgi dran...

Jemand anderes hat das selbe Problem, anscheinend mit modPython: http://groups.google.de/group/django-us ... ad7090d5f5

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Freitag 11. April 2008, 10:52

Und? Dann solltest du entweder die Exception abfangen, den Code verbessern oder per `mod_rewrite` o.ä. so einen Request direkt blocken (z.B. 404) oder verhindern, dass der an deine Applikation weiter gereicht wird.
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 11. April 2008, 11:41

Der User sieht keine Exception, wenn du das meinst. Er sieht nur eine 500 Error Seite. Den Traceback erhalte ich per Mail.
Ich weiß aber nicht, warum es überhaupt zu einem Traceback kommt.
Im übrigen benutzte ich kein modPython, sondern fastCGI...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Freitag 11. April 2008, 13:09

jens hat geschrieben:Der User sieht keine Exception, wenn du das meinst. Er sieht nur eine 500 Error Seite. Den Traceback erhalte ich per Mail.
[...]
Im übrigen benutzte ich kein modPython, sondern fastCGI...
Ist mir alles klar.
jens hat geschrieben:Ich weiß aber nicht, warum es überhaupt zu einem Traceback kommt.
Dann solltest du vielleicht erstmal rausfinden, welchen Wert `request.path` hat und was `resolver.resolve` damit machen will. Vermutlich wird da der Query-String erwartet, der aber fehlt.
Wie gesagt, am passendsten wäre wohl, den direkten Zugriff auf dein Dispatcher-Script zu blocken - was ohnehin so sein sollte. Wird das nicht seitens Django so empfohlen?
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 11. April 2008, 16:29

request.path ist == ""

Hm... Hab ja einen unittest für die URLs der deckt das wohl nicht ab. Ich hab mal was daraus extrahiert:

Code: Alles auswählen

        urlconf = settings.ROOT_URLCONF
        resolver=RegexURLResolver(r'^/', urlconf)
        print resolver.resolve("/")
        print resolver.resolve("")
Liefert folgendes:
(<function index at 0x8a8d6f4>, ('',), {})
None
Also eine leere URL macht Probleme... Nun frage ich mich, ob es an meinen URL-REs liegt... Die pattern die eigentlich matchen müßte ist:

Code: Alles auswählen

urls += (r'([\w/-]*)', 'PyLucid.index.index'),
Das deckt doch aber "" ab...
Y0Gi hat geschrieben:am passendsten wäre wohl, den direkten Zugriff auf dein Dispatcher-Script zu blocken - was ohnehin so sein sollte. Wird das nicht seitens Django so empfohlen?
Wie könnte ich am einfachsten machen? Ich nutzte modrewrite. Die http://pylucid.net:8080/pylucid/browser ... /.htaccess Datei sieht ungefähr so aus:

Code: Alles auswählen

AddHandler fastcgi-script .fcgi

RewriteEngine On
RewriteRule ^media - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.fcgi/$1 [QSA,L]

<Files settings.py>
    Deny from all
</Files>

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Montag 14. April 2008, 08:39

ScriptAlias verwenden. Dann hast du das Problem erst gar nicht. Dieses AddHandler und mod-rewrite rumgefummle ist aus so vielen Gründen eine schlechte Idee, ich wunder mich ja direkt, dass da nicht mehr kaputt geht.
TUFKAB – the user formerly known as blackbird
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 14. April 2008, 11:46

Leider darf ich anscheinen ScriptAlias nicht verwenden :( Alternativen?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 13. Mai 2008, 16:18

Y0Gi hat geschrieben:am passendsten wäre wohl, den direkten Zugriff auf dein Dispatcher-Script zu blocken
Ich hab es jetzt so halb hinbekommen, mit der mod_rewrite Regel:

Code: Alles auswählen

RewriteRule ^index.fcgi$ - [F,L]
Der Client bekommt direkt ein 403 Forbidden geschickt.

Das klappt allerdings nur für:
  • pylucid.org/index.fcgi
aber schon nicht mehr für
  • pylucid.org/index.fcgi/
oder
  • pylucid.org/index.fcgi/irgend/etwas/
Wenn ich die Regel z.B. so schreibe:

Code: Alles auswählen

RewriteRule ^index.fcgi.*$ - [F,L]
Dann bekomme ich auf alle URLs 500 Server Error :(

Irgendwie alles nicht so doll, mit mod_rewrite...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten