Skip to content

Commit 64b9602

Browse files
authored
Merge pull request #51 from iFixit/fix/xss-remediation
Fix: Add stevebauman/purify for HTML sanitization
2 parents aaf54c9 + 4a3d914 commit 64b9602

21 files changed

Lines changed: 660 additions & 220 deletions

app/Http/Controllers/GroupController.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -455,7 +455,7 @@ public function delete($id): RedirectResponse
455455
$group->delete();
456456

457457
return redirect('/group')->with('success', __('groups.delete_succeeded', [
458-
'name' => $name,
458+
'name' => e($name),
459459
]));
460460
} else {
461461
return redirect('/user/forbidden');
@@ -576,7 +576,7 @@ public function getJoinGroup($group_id): RedirectResponse
576576
return redirect()
577577
->back()
578578
->with('success', __('groups.now_following', [
579-
'name' => $group->name,
579+
'name' => e($group->name),
580580
'link' => url('/group/view/'.$group->idgroups),
581581
]));
582582
} catch (\Exception $e) {
@@ -661,7 +661,7 @@ public function inviteNearbyRestarter($groupId, $userId): RedirectResponse
661661
}
662662
}
663663

664-
return redirect('/group/nearby/'.intval($groupId))->with('success', $user->name.' has been invited');
664+
return redirect('/group/nearby/'.intval($groupId))->with('success', e($user->name).' has been invited');
665665
}
666666

667667
/**

app/Http/Controllers/UserController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ public function postSoftDeleteUser(Request $request): RedirectResponse
292292

293293
if (Auth::id() !== $user_id) {
294294
return redirect('user/all')->with('danger', __('profile.soft_deleted', [
295-
'name' => $old_user_name
295+
'name' => e($old_user_name)
296296
]));
297297
} else {
298298
return redirect('login');

app/Http/Middleware/AcceptUserInvites.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,13 @@ public function handle(Request $request, Closure $next): Response
4545
$acceptance->delete();
4646
$request->session()->push('invites-feedback', __('groups.you_have_joined', [
4747
'url' => url("/group/view/{$group->idgroups}"),
48-
'name' => $group->name
48+
'name' => e($group->name)
4949
]));
5050

5151
// Else that must mean the User is already part of the Group.
5252
// We can then delete the Invite and create a new session
5353
} else {
54-
$request->session()->push('invites-feedback', 'You are already a member of <a class="plain-link" href='.url("/group/view/{$group->idgroups}").">{$group->name}</a>");
54+
$request->session()->push('invites-feedback', 'You are already a member of <a class="plain-link" href="'.url("/group/view/{$group->idgroups}").'">'.e($group->name).'</a>');
5555
}
5656
}
5757
$request->session()->forget('groups');
@@ -78,13 +78,13 @@ public function handle(Request $request, Closure $next): Response
7878
$acceptance->delete();
7979
$request->session()->push('invites-feedback', __('events.you_have_joined', [
8080
'url' => url("/party/view/{$event->idevents}"),
81-
'name' => $event->venue
81+
'name' => e($event->venue)
8282
]));
8383

8484
// Else that must mean the User is already part of the Event.
8585
// We can then delete the Invite and create a new session
8686
} else {
87-
$request->session()->push('invites-feedback', 'You are already a member of <a class="plain-link" href='.url("/party/view/{$event->idevents}").">{$event->venue}</a>");
87+
$request->session()->push('invites-feedback', 'You are already a member of <a class="plain-link" href="'.url("/party/view/{$event->idevents}").'">'.e($event->venue).'</a>');
8888
}
8989
}
9090
$request->session()->forget('events');

app/Models/Brands.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,9 @@ class Brands extends Model
2121
* @var array
2222
*/
2323
protected $hidden = [];
24+
25+
public function setBrandNameAttribute($value)
26+
{
27+
$this->attributes['brand_name'] = $value === null ? null : strip_tags((string) $value);
28+
}
2429
}

app/Models/Category.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ class Category extends Model
3333

3434
// Setters
3535

36+
public function setNameAttribute($value)
37+
{
38+
$this->attributes['name'] = $value === null ? null : strip_tags((string) $value);
39+
}
40+
3641
//Getters
3742
public function findAll()
3843
{

app/Models/Group.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use Illuminate\Database\Eloquent\Model;
1313
use Illuminate\Support\Facades\Lang;
1414
use Illuminate\Support\Facades\Log;
15+
use Stevebauman\Purify\Facades\Purify;
1516
use OwenIt\Auditing\Contracts\Auditable;
1617
use Illuminate\Database\Eloquent\SoftDeletes;
1718

@@ -446,6 +447,16 @@ public function setDistanceAttribute($val)
446447
$this->distance = $val;
447448
}
448449

450+
public function setNameAttribute($value)
451+
{
452+
$this->attributes['name'] = $value === null ? null : strip_tags((string) $value);
453+
}
454+
455+
public function setFreeTextAttribute($value)
456+
{
457+
$this->attributes['free_text'] = $value === null ? null : Purify::clean((string) $value);
458+
}
459+
449460
public function createDiscourseGroup() {
450461
// Get the host who created the group.
451462
$success = false;

app/Models/GroupTags.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,5 +42,10 @@ public function groupTagGroups(): HasMany
4242

4343
// Setters
4444

45+
public function setTagNameAttribute($value)
46+
{
47+
$this->attributes['tag_name'] = $value === null ? null : strip_tags((string) $value);
48+
}
49+
4550
//Getters
4651
}

app/Models/Network.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,22 @@
66
use Illuminate\Database\Eloquent\Factories\HasFactory;
77
use App\Models\Group;
88
use Illuminate\Database\Eloquent\Model;
9+
use Stevebauman\Purify\Facades\Purify;
910

1011
class Network extends Model
1112
{
1213
use HasFactory;
1314

15+
public function setNameAttribute($value)
16+
{
17+
$this->attributes['name'] = $value === null ? null : strip_tags((string) $value);
18+
}
19+
20+
public function setDescriptionAttribute($value)
21+
{
22+
$this->attributes['description'] = $value === null ? null : Purify::clean((string) $value);
23+
}
24+
1425
public function groups(): BelongsToMany
1526
{
1627
return $this->belongsToMany(Group::class, 'group_network', 'network_id', 'group_id');

app/Models/Party.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use DB;
1414
use Illuminate\Database\Eloquent\Model;
1515
use Illuminate\Database\Eloquent\SoftDeletes;
16+
use Stevebauman\Purify\Facades\Purify;
1617
use Illuminate\Support\Str;
1718
use Notification;
1819
use OwenIt\Auditing\Contracts\Auditable;
@@ -767,6 +768,16 @@ public function getEventEndUtcAttribute() {
767768
return array_key_exists('event_end_utc', $this->attributes) ? Carbon::parse($this->attributes['event_end_utc'], 'UTC')->toIso8601String() : null;
768769
}
769770

771+
public function setVenueAttribute($value)
772+
{
773+
$this->attributes['venue'] = $value === null ? null : strip_tags((string) $value);
774+
}
775+
776+
public function setFreeTextAttribute($value)
777+
{
778+
$this->attributes['free_text'] = $value === null ? null : Purify::clean((string) $value);
779+
}
780+
770781
// Mutators for previous event_date/start/end fields. These are now superceded by the UTC fields and therefore
771782
// should never be set directly. Throw exceptions to ensure that they are not.
772783
public function setEventDateAttribute($val) {

app/Models/Skills.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,10 @@ class Skills extends Model
2626

2727
// Setters
2828

29+
public function setSkillNameAttribute($value)
30+
{
31+
$this->attributes['skill_name'] = $value === null ? null : strip_tags((string) $value);
32+
}
33+
2934
//Getters
3035
}

0 commit comments

Comments
 (0)