Einfache Webprogrammierung mit python

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

@daemonTutorials: Und jetzt bitte in einer Version, die nicht für SQL Injections anfällig ist. Prepared Statements zu nutzen ist doch gerade in Python unheimlich einfach.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Oder besser gleich ein ORM nehmen... Und doch Templates... Also doch besser direkt mit Django anfangen... ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
daemonTutorials
User
Beiträge: 171
Registriert: Sonntag 6. Februar 2011, 12:06
Kontaktdaten:

cofi hat geschrieben:@daemonTutorials: Und jetzt bitte in einer Version, die nicht für SQL Injections anfällig ist. Prepared Statements zu nutzen ist doch gerade in Python unheimlich einfach.
Sorry, hatte erst kürzlich was mit SQL und Python zutun und da habe ich 'sqlite3' benutzt und das war in einer abgeriegelten Web-App für den HomePC. Da musste ich über das nicht nachdenken.

Also, eine Frage: Wie macht man "Prepared Statements"?
Ich habe die ID schon über '%' eingefügt, wie weiter?
Ach und bei PHP, da habe ich es total vergessen, sorry!
LG Maik
deets

Nee, nicht wirklich. Die haben ja keine SQL-Injection verbrochen, sondern authentizitaet mit authorisation gleichgesetzt. Sicher auch ein beliebter Fehler (siehe zB den "Facebook-Killer" Diaspora), aber noch ein klitzekleines bisschen besser als SQL-Injection.
deets

daemonTutorials hat geschrieben: Also, eine Frage: Wie macht man "Prepared Statements"?
Das Prinzip ist ganz simpel:

Code: Alles auswählen

cursor.execute(statement, (p1, p2, ...))
In dem statement muessen dann ebenfalls Platzhalter vorkommen. Leider ist das abhaenging von der verwendeten Datenbank (ein weiterer Grund, SQLAlchemy zu benutzen).

ZB "select * from table where column = %s" fuer mysqj. Dabei ist egal, was der Parameter fuer einen Typ hat! Das %s ist immer ein Platzhalter fuer jeden Typ.
Benutzeravatar
noisefloor
User
Beiträge: 4179
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Coder hat geschrieben:Wie trennt man am Besten die beiden Teile?
Wie alles andere bei Python auch: das ganze in kleine Häppchen unterteilen und mit entsprechenden Modulen / Klassen / Funktionen bereitstellen.

Im Falle einer Webapplikation wäre das: die "Hauptdatei", welcher per WSGI eingebunden wird. Hier werden die Routen definiert und die zur Route gehörige Funktion. Ein eigenes Modul (bzw. mindestens Funktionen), welches die "Datenverarbeitung" vornimmt. Was auch immer "Datenverarbeitung" ist (Berechnung, PDF generieren, Datenbankanbindung etc.). Und mindestens ein Template, was dann zum Generieren der Ausgabe dient.

MVC-Prinzip halt. Jetzt wird vielleicht auch klar, warum Django bei einem neuen Projekt drei Dateien anlegt (AFAIK). :-)

Gruß, noisefloor
Antworten