SQLAlchemy delete - Sicherheitsfrage

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Karlirex
User
Beiträge: 126
Registriert: Dienstag 18. August 2020, 18:27

Hallo,

ich programmiere zur Zeit eine webbasierte Datenbank mit Flask und SQLAlchemy.

Nun habe ich per Google, Forum und YT Methoden gebaut, um die Werte zu erstellen, bearbeiten und löschen.
Sobald ich den Lösch-Button drücke ist das Datenstück weg, funktioniert also an sich. Leider ist der Mensch ja etwas tollpatschig, weshalb hier vllt eine Sicherheitsabfrage sinnvoll wäre :D

Leider habe ich weder durch Verlinkung auf ein "delete"-Template, noch durch eine if-Bedingung erfolge erzielt.
Habt ihr eine Idee oder Tipp, wie ich so ein Sicherheitsfeld einbaue?

mein Code:

Code: Alles auswählen

@app.route('/new', methods=['GET', 'POST'])
def new():
    if request.method == 'POST':
        if not request.form['name'] or not request.form['eluent'] or not request.form['column']:
            flash('Alle Felder beachten.', 'error')
        else:
            hplcmethod = HPLCMETHODS(request.form['name'], request.form['eluent'], request.form['column'], request.form['comment'], request.form['temperatur'], request.form['flow'], request.form['mitarbeiter'])

            db.session.add(hplcmethod)
            db.session.commit()

            flash('Methode erfolgreich hinzugefügt.')
            return redirect(url_for('show_all'))
    return render_template('new.html')


@app.route('/update/<int:id>', methods=['GET', 'POST'])
def update(id):
    method_update = HPLCMETHODS.query.get_or_404(id)
    if request.method == 'POST':
        method_update.name = request.form['name']
        method_update.eluent = request.form['eluent']
        method_update.column = request.form['column']
        method_update.comment = request.form['comment']
        method_update.temperatur = request.form['temperatur']
        method_update.flow = request.form['flow']
        method_update.mitarbeiter = request.form['mitarbeiter']
        try:
            db.session.commit()
            flash("Methode bearbeitet")
            return redirect(url_for('show_all'))
        except:
            return "Fehler, versuche es erneut"
    else:
        return render_template('update.html', method_update = method_update)


@app.route('/delete/<int:id>')      ####Hier sollte es eine Sicherheit geben
def delete(id):
    method_delete = HPLCMETHODS.query.get_or_404(id)
    db.session.delete(method_delete)
    db.session.commit()
    flash('Methode erfolgreich entfernt')
    return redirect(url_for('show_all'))
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Karlirex: Das an der Stelle zu lösen ist IMHO unnötig kompliziert. Das ist ja eigentliche eine Frage der Benutzeroberfläche. Wenn Du auf der Webseite auf „Löschen“ klickst, sollte *da* im *Browser* nachgefragt werden. Da würde ich keinen extra „round trip“ über den Server für machen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Karlirex
User
Beiträge: 126
Registriert: Dienstag 18. August 2020, 18:27

@__blackjack__: muss ich die nachfrage nicht dann trotzdem in dem Server einfügen, da es dann entscheidet, ob dieser die Daten aus der DB löscht oder nicht?
Und wie genau finde ich sowas? :D wie gesagt, meine Googlepunkte waren wenig erfolgreich bisher.
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn das im Browser passiert, dann gibt es bei negativer Antwort einfach kein request. Da muss der Server nix entscheiden. Und wonach hast du denn gesucht?
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Bei solchen Dingen ist es hilfreich einfach mal zu schauen wie unterschiedliche Webseiten sowas lösen. Also die Developer Console anwerfen, mal bei Github ein Repo löschen o.ä. und schauen was genau da passiert. Du wirst feststellen dass, wie schon von anderen erwähnt, sowas im Browser mit Javascript realisiert wird.
Karlirex
User
Beiträge: 126
Registriert: Dienstag 18. August 2020, 18:27

Ich suchte erstmal nach den Dingen mit flask, also sowas wie "delete secure flask" o.ä..
Mit HTML habe ich da noch nicht sonderlich weiter geschaut, dachte wie gesagt, es ginge um flask bei der Sache.

Ist javascript dafür von nöten? würde ungern weitere Module nutzen.
Den Tipp mit wie das andere Seiten per HTML nutzen werde ich testen, mal sehen, was passiert.

Falls jemand anderweitig Ideen hat, gerne her damit.
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Browserseitig meint JavaScript. Wenn du das nicht willst, musst du eben eine Reihe von Seiten machen, die diesen Prozess abbilden. Aber es geht nicht, diese Frage in dem Code oben zu stellen. Wenn der läuft, muss er durchlaufen.
Karlirex
User
Beiträge: 126
Registriert: Dienstag 18. August 2020, 18:27

@__deets__: Ja ich habe gerade herausgefunden, dass man JavaScript auch Browserseitig in die .html einpflegen kann :D ich dachte es ist "aufwendiger".
Dann werde ich nun mal schauen, ob ich eine solche "Box"/"Abfrage" finde.
Karlirex
User
Beiträge: 126
Registriert: Dienstag 18. August 2020, 18:27

ich habe in der HTML ein BUtton eingefügt, mit onclick ="return confirm....". Hat für meine Dinge gereicht. :)
Antworten