Skip to content

Commit 22fc668

Browse files
committed
Fix Big Security Bug: check if user own form in edit view and read id of edited event from url instead of form.
I'm retarded.
1 parent 1e4c134 commit 22fc668

File tree

4 files changed

+15
-17
lines changed

4 files changed

+15
-17
lines changed

forms.py

-4
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,3 @@ class EventForm(Form):
5858
def validate_link(self, field):
5959
if not any(field.data.startswith(prefix) for prefix in [u'http://', u'https://']):
6060
raise ValidationError('Invalid link')
61-
62-
63-
class EventUpdateForm(EventForm):
64-
id = HiddenField()

static/css/calendar.css

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
#timeline #ctf_schedule {
23
/* min-height: 400px; */
34
position: relative;

templates/events/manage.html

+5-6
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@
1212
<h2 class="panel-title">Manage Event</h2>
1313
</div>
1414
<div class="panel-body">
15-
<form class="form-horizontal" method="POST" id="event_manage_form">
16-
{{ event_manage_form.csrf_token }}
17-
{% if event_manage_form.errors %}
15+
<form class="form-horizontal" method="POST" id="event_form">
16+
{{ event_form.csrf_token }}
17+
{% if event_form.errors %}
1818
<div class="alert alert-danger">
1919
<ul>
2020
Please correct the following errors.
21-
{% for field in event_manage_form %}
21+
{% for field in event_form %}
2222
{% if field.errors %}
2323
{% for error in field.errors %}
2424
<li>{{ error }}</li>
@@ -32,8 +32,7 @@ <h2 class="panel-title">Manage Event</h2>
3232
<div id="login_msg"></div>
3333
</fieldset>
3434
<fieldset class="container-fluid">
35-
{{ event_manage_form.id() }}
36-
{% for field in event_manage_form if field.id != 'csrf_token' and field.id != 'id' %}
35+
{% for field in event_form if field.id != 'csrf_token' and field.id != 'id' %}
3736
<div class="row">
3837
<div class="col-sm-12 form-group">
3938
{{ field.label(class_="col-sm-3 control-label") }}

views/events.py

+9-7
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import json
22

3-
from flask import Blueprint, redirect, render_template, url_for, flash
3+
from flask import abort, Blueprint, redirect, render_template, url_for, flash
44
from flask_login import current_user, login_required
55

6-
from forms import EventForm, EventUpdateForm
6+
from forms import EventForm
77
from models import db, Event
88
from util import admin_required, isoformat
99

@@ -110,8 +110,10 @@ def events_approve(event_id):
110110
@login_required
111111
def events_manage(event_id):
112112
event = Event.query.get_or_404(event_id)
113-
event_manage_form = EventUpdateForm(obj=event)
114-
if event_manage_form.validate_on_submit():
115-
event_manage_form.populate_obj(event)
116-
return redirect(url_for('.events_detail', event_id=event.id))
117-
return render_template('events/manage.html', event_manage_form=event_manage_form)
113+
if current_user != event.owner:
114+
abort(403)
115+
event_form = EventForm(obj=event)
116+
if event_form.validate_on_submit():
117+
event_form.populate_obj(event)
118+
return redirect(url_for('.events_detail', event_id=event_id))
119+
return render_template('events/manage.html', event_form=event_form)

0 commit comments

Comments
 (0)