Einfache Webprogrammierung mit python
- 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.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
- daemonTutorials
- User
- Beiträge: 171
- Registriert: Sonntag 6. Februar 2011, 12:06
- Kontaktdaten:
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.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.
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
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.derdon hat geschrieben:Bei der Citibank macht man das aber auch so
Das Prinzip ist ganz simpel:daemonTutorials hat geschrieben: Also, eine Frage: Wie macht man "Prepared Statements"?
Code: Alles auswählen
cursor.execute(statement, (p1, p2, ...))
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.
- noisefloor
- User
- Beiträge: 4181
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
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
Wie alles andere bei Python auch: das ganze in kleine Häppchen unterteilen und mit entsprechenden Modulen / Klassen / Funktionen bereitstellen.Coder hat geschrieben:Wie trennt man am Besten die beiden Teile?
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