94 lines
4.2 KiB
HTML
94 lines
4.2 KiB
HTML
{% extends "base.html" %}
|
||
{% block title %}Security-Check{% endblock %}
|
||
{% block content %}
|
||
<h1 class="page-title">Reichweiten-Check
|
||
<span class="badge badge-muted">Access Control</span>
|
||
</h1>
|
||
|
||
<div class="card">
|
||
<p class="hint" style="display:block">
|
||
Prüft, was ein <b>normaler Studenten-Login</b> (dein Account) von fremden Personen
|
||
abrufen kann. Angezeigt werden ausschließlich <b>Booleans und Anzahlen</b> –
|
||
keine Feldwerte, keine Speicherung. Grün = vom CIS sauber geschützt,
|
||
Rot = Daten liegen mit diesem Account offen.
|
||
</p>
|
||
<div class="form-row">
|
||
<div class="field">
|
||
<label>Ziel (optional)</label>
|
||
<input type="text" id="probe-uid" placeholder="leer = Zufallsstudent">
|
||
</div>
|
||
<button class="btn btn-primary" id="probe-btn" onclick="runProbe()">Check starten</button>
|
||
</div>
|
||
<p id="probe-status" class="muted"></p>
|
||
<table class="data" id="probe-table" style="display:none">
|
||
<thead><tr><th>#</th><th>Prüfung</th><th>Ergebnis</th><th>Details</th></tr></thead>
|
||
<tbody></tbody>
|
||
</table>
|
||
<p class="hint" id="probe-target" style="display:none"></p>
|
||
</div>
|
||
|
||
<div class="card">
|
||
<h2>Audit-Referenz: Wo die Rechte im Quellcode sitzen</h2>
|
||
<p class="hint" style="display:block">
|
||
Das CIS basiert auf <b>FH-Complete</b> (Open Source, <span class="mono">github.com/FH-Complete</span>).
|
||
Gefunden per Source-Review statt Raten — jede Zeile = eine Prüfung, die der
|
||
Reichweiten-Check oben abdeckt oder die das <b>Weiterentwickeln</b> der Tests erlaubt.
|
||
</p>
|
||
<table class="data">
|
||
<thead><tr><th>Stelle im Code</th><th>Mechanismus</th><th>Prüfung / Beobachtung</th></tr></thead>
|
||
<tbody>
|
||
<tr>
|
||
<td class="mono">profile/index.php</td>
|
||
<td>Feld-Filter: <span class="mono">$ansicht</span> hide Geburtsdatum/-ort,
|
||
Adresse, private Kontakte bei fremdem Profil; ausser mit Recht
|
||
<span class="mono">basis/kontakt</span></td>
|
||
<td>Check 2: grün = Code hält sich an sich selbst ✅</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="mono">include/benutzerberechtigung.class.php</td>
|
||
<td>Zentrale Prüfung <span class="mono">$rechte->isBerechtigt('modul/recht', oe)</span>;
|
||
Rollen/Rechte in <span class="mono">tbl_berechtigung</span>,
|
||
<span class="mono">tbl_rolleberechtigung</span></td>
|
||
<td>Audit-Kriterium: Jede Seite mit Personen-/Plandaten MUSS diese Klasse
|
||
aufrufen — fehlender Aufruf = Fund. Unsere 4 roten Checks sind genau
|
||
die Seiten ohne wirksame Prüfung (LV-Plan, Autocomplete, bild.php,
|
||
stud_in_grp).</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="mono">public/bild.php?src=person&person_id=</td>
|
||
<td>Foto-Schutz nur über <span class="mono">person.foto_sperre</span>
|
||
(dann Dummy-Bild); keine Rollenprüfung, IDs fortlaufend</td>
|
||
<td>Check 3: Foto-IDOR. FIX-Hebel für den Report: foto_sperre
|
||
default-mäßig einschalten oder Prüfung einbauen.</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="mono">lvplan/stpl_week.php · stpl_kalender.php</td>
|
||
<td>Plan für beliebige <span class="mono">pers_uid</span> ohne
|
||
Berechtigungscheck</td>
|
||
<td>Check 5: jeder Login sieht fremde Termine/Räume. Ist teils
|
||
gewollt (Raumsuche) — Meldung: Umfang dokumentieren.</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="mono">lvplan/lvplan_autocomplete.php</td>
|
||
<td>Autocomplete <span class="mono">benutzer</span> liefert ganzes Directory
|
||
ohne Rollenfilter</td>
|
||
<td>Check 1: 5735 Personen / 5 Requests.</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="mono">extensions/FHC-Core-Anwesenheiten</td>
|
||
<td>Prüfungen deklariert pro Action im Controller
|
||
(<span class="mono">PermissionLib->isBerechtigt</span>)</td>
|
||
<td>Auf der Live-Instanz nicht installiert (404) — im Report als
|
||
"nicht testbar" vermerken.</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="mono">extensions/FHC-Core-DSMS</td>
|
||
<td>eigenes Datenschutz-Modul der Plattform</td>
|
||
<td>Belegt: Feldebene ist eine konfigurierte Funktion, kein Bug —
|
||
ihre Korrektheit ist genau das, was Check 2 dynamisch validiert.</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
{% endblock %}
|