Skip to content

Commit

Permalink
Enhance security for links, cookies, and regex operations (#205)
Browse files Browse the repository at this point in the history
* Add `rel="noopener"` to various anchor tags across multiple files to prevent access to `window.opener`.
* Add `Secure` and `HttpOnly` attributes to cookies
* Introduced `RegexTimeout` constant in `TimeOnlyModelBinder.cs` and `TimeSpanModelBinder.cs`, and updated `Regex.Replace` calls
  • Loading branch information
axunonb authored Oct 8, 2024
1 parent 21ebf16 commit 8f65d83
Show file tree
Hide file tree
Showing 8 changed files with 32 additions and 22 deletions.
2 changes: 1 addition & 1 deletion League.Demo/Views/Home/AboutLeague.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
<li><span class="fa-li"><i class="fas fa-check-square text-primary"></i></span>Optimized for mobile devices: Comfortable operation on smartphones, tablets or desktop PCs</li>
<li><span class="fa-li"><i class="fas fa-check-square text-primary"></i></span>Localizable for language, region and time zone</li>
<li><span class="fa-li"><i class="fas fa-check-square text-primary"></i></span>Runs on Windows und Linux</li>
<li><span class="fa-li"><i class="fas fa-check-square text-primary"></i></span>The platform software is Open Source and published on <a href="https://github.com/axuno/Volleyball-League" class="link" target="_blank">GitHub</a>.</li>
<li><span class="fa-li"><i class="fas fa-check-square text-primary"></i></span>The platform software is Open Source and published on <a href="https://github.com/axuno/Volleyball-League" class="link" target="_blank" rel="noopener">GitHub</a>.</li>
</ul>
</article>
<article class="col-4 col-sm-4">
Expand Down
2 changes: 1 addition & 1 deletion League.Demo/Views/Home/AboutLeague.de.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
<li><span class="fa-li"><i class="fas fa-check-square text-primary"></i></span>Optimiert für mobile Geräte: Komfortable Bedienung per Smartphone, Tablet oder Desktop PC</li>
<li><span class="fa-li"><i class="fas fa-check-square text-primary"></i></span>Lokalisierbar für Sprache, Region und Zeitzone</li>
<li><span class="fa-li"><i class="fas fa-check-square text-primary"></i></span>Lauffähig auf Windows und Linux</li>
<li><span class="fa-li"><i class="fas fa-check-square text-primary"></i></span>Die Software der Plattform ist Open Source und veröffentlicht auf <a href="https://github.com/axuno/Volleyball-League" class="link" target="_blank">GitHub</a>.</li>
<li><span class="fa-li"><i class="fas fa-check-square text-primary"></i></span>Die Software der Plattform ist Open Source und veröffentlicht auf <a href="https://github.com/axuno/Volleyball-League" class="link" target="_blank" rel="noopener">GitHub</a>.</li>
</ul>
</article>
<article class="col-2 col-sm-4">
Expand Down
4 changes: 2 additions & 2 deletions League.Demo/Views/Home/Privacy.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@
<h3>Retention period:</h3>
<p>We do not collect any personal data via the integration of Google Maps.</p>
<h3>Third country transfers</h3>
<p>Google processes your data in the United States of America and is subject to the EU-U.S. Privacy Shield: <a href="https://www.privacyshield.gov/EU-US-Framework" rel="noopener nofollow" target="_blank">https://www.privacyshield.gov/EU-US-Framework</a>. </p>
<p>Google processes your data in the United States of America and is subject to the EU-U.S. Privacy Shield: <a href="https://www.privacyshield.gov/EU-US-Framework" rel="noopener nofollow" target="_blank" rel="noopener">https://www.privacyshield.gov/EU-US-Framework</a>. </p>
<h3>Revocation of consent</h3>
<p>If you do not want Google to collect, process or use information about you via our website, you can disable JavaScript in your browser settings. In this case, you cannot or only partially use our website.</p>
<h3>Mandatory or required provision</h3>
Expand All @@ -141,7 +141,7 @@
<p>Everyone who has disabled the storage of cookies for the Google ad programme will not have to expect any cookies when watching YouTube videos. However, YouTube also stores non-personal usage information in other cookies. If you would like to prevent this, you must block the storage of cookies in the browser.</p>
<p>You’ll find additional information on data protection at ‘YouTube’ in the provider’s privacy policy at: <a href="https://policies.google.com/privacy" rel="noopener nofollow" target="_blank">https://policies.google.com/privacy</a>.</p>
<h3>Third country transfers</h3>
<p>Google processes your data in the United States of America and is subject to the EU-U.S. Privacy Shield: <a href="https://www.privacyshield.gov/EU-US-Framework" target="_blank">https://www.privacyshield.gov/EU-US-Framework</a>.</p>
<p>Google processes your data in the United States of America and is subject to the EU-U.S. Privacy Shield: <a href="https://www.privacyshield.gov/EU-US-Framework" target="_blank" rel="noopener">https://www.privacyshield.gov/EU-US-Framework</a>.</p>
<h3>Mandatory or required provision</h3>
<p>The provision of your personal data is voluntary, based solely on your consent. If you prevent access, this can lead to functional limitations on the website.</p>
<p></p>
Expand Down
18 changes: 9 additions & 9 deletions League.Demo/Views/Home/Privacy.de.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -133,26 +133,26 @@
<h3>Speicherdauer:</h3>
<p>Die Löschung der Daten erfolgt, sobald diese für unsere Aufzeichnungszwecke nicht mehr erforderlich sind.</p>
<h3>Drittlandtransfer:</h3>
<p>Google verarbeitet Ihre Daten in den USA und hat sich dem EU_US Privacy Shield unterworfen <a href="https://www.privacyshield.gov/EU-US-Framework" target="_blank">https://www.privacyshield.gov/EU-US-Framework</a>. </p>
<p>Google verarbeitet Ihre Daten in den USA und hat sich dem EU_US Privacy Shield unterworfen <a href="https://www.privacyshield.gov/EU-US-Framework" target="_blank" rel="noopener">https://www.privacyshield.gov/EU-US-Framework</a>. </p>
<h3>Bereitstellung vorgeschrieben oder erforderlich:</h3>
<p>Die Bereitstellung Ihrer personenbezogenen Daten erfolgt freiwillig, allein auf Basis Ihrer Einwilligung. Sofern Sie den Zugriff unterbinden, kann es hierdurch zu Funktionseinschränkungen auf der Website kommen.</p>
<h3>Widerruf der Einwilligung:</h3>
<p>Sie können die Speicherung der Cookies durch eine entsprechende Einstellung Ihrer Browser-Software verhindern; wir weisen Sie jedoch darauf hin, dass Sie in diesem Fall gegebenenfalls nicht sämtliche Funktionen dieser Website vollumfänglich werden nutzen können. Sie können darüber hinaus die Erfassung der durch das Cookie erzeugten und auf Ihre Nutzung der Webseite bezogenen Daten (inkl. Ihrer IP-Adresse) an Google sowie die Verarbeitung dieser Daten durch Google verhindern, indem sie das unter dem folgenden Link verfügbare Browser-Plugin herunterladen und installieren: <a href="http://tools.google.com/dlpage/gaoptout?hl=de">Browser Add On zur Deaktivierung von Google Analytics</a>.</p>
<p>Sie können die Speicherung der Cookies durch eine entsprechende Einstellung Ihrer Browser-Software verhindern; wir weisen Sie jedoch darauf hin, dass Sie in diesem Fall gegebenenfalls nicht sämtliche Funktionen dieser Website vollumfänglich werden nutzen können. Sie können darüber hinaus die Erfassung der durch das Cookie erzeugten und auf Ihre Nutzung der Webseite bezogenen Daten (inkl. Ihrer IP-Adresse) an Google sowie die Verarbeitung dieser Daten durch Google verhindern, indem sie das unter dem folgenden Link verfügbare Browser-Plugin herunterladen und installieren: <a href="http://tools.google.com/dlpage/gaoptout?hl=de" rel="noopener">Browser Add On zur Deaktivierung von Google Analytics</a>.</p>
<p>Zusätzlich oder als Alternative zum Browser-Add-On können Sie das Tracking durch Google Analytics auf unseren Seiten unterbinden, indem Sie <button type="button" title="Google Analytics Opt-Out-Cookie setzen" onClick="gaOptout();alert('Google Analytics wurde deaktiviert');">diesen Link anklicken</button>. Dabei wird ein Opt-out-Cookie auf Ihrem Gerät installiert. Damit wird die Erfassung durch Google Analytics für diese Website und für diesen Browser zukünftig verhindert, solange das Cookie in Ihrem Browser installiert bleibt.</p>
<h3>Profiling:</h3>
<p>Mit Hilfe des Tracking-Tools Google Analytics kann das Verhalten der Besucher der Webseite bewertet und die Interessen analysiert werden. Hierzu erstellen wir ein pseudonymes Nutzerprofil.</p>
<p></p>
<h2>Verwendung von Scriptbibliotheken (Google Webfonts)</h2>
<h3>Art und Zweck der Verarbeitung:</h3>
<p>Um unsere Inhalte browserübergreifend korrekt und grafisch ansprechend darzustellen, verwenden wir auf dieser Website „Google Web Fonts“ der Google LLC (1600 Amphitheatre Parkway, Mountain View, CA 94043, USA; nachfolgend „Google“) zur Darstellung von Schriften.</p>
<p>Die Datenschutzrichtlinie des Bibliothekbetreibers Google finden Sie hier: <a href="https://www.google.com/policies/privacy/" target="_blank">https://www.google.com/policies/privacy/</a></p>
<p>Die Datenschutzrichtlinie des Bibliothekbetreibers Google finden Sie hier: <a href="https://www.google.com/policies/privacy/" target="_blank" rel="noopener">https://www.google.com/policies/privacy/</a></p>
<h3>Rechtsgrundlage:</h3>
<p>Rechtsgrundlage für die Einbindung von Google Webfonts und dem damit verbundenen Datentransfer zu Google ist Ihre Einwilligung (Art. 6 Abs. 1 lit. a DSGVO). </p>
<h3>Empfänger:</h3>
<p>Der Aufruf von Scriptbibliotheken oder Schriftbibliotheken löst automatisch eine Verbindung zum Betreiber der Bibliothek aus. Dabei ist es theoretisch möglich – aktuell allerdings auch unklar ob und ggf. zu welchen Zwecken – dass der Betreiber in diesem Fall Google Daten erhebt.</p>
<h3>Speicherdauer:</h3>
<p>Wir erheben keine personenbezogenen Daten, durch die Einbindung von Google Webfonts.</p>
<p>Weitere Informationen zu Google Web Fonts finden Sie unter <a href="https://developers.google.com/fonts/faq" target="_blank">https://developers.google.com/fonts/faq</a> und in der Datenschutzerklärung von Google: <a href="https://www.google.com/policies/privacy/">https://www.google.com/policies/privacy/</a>.</p>
<p>Weitere Informationen zu Google Web Fonts finden Sie unter <a href="https://developers.google.com/fonts/faq" target="_blank" rel="noopener">https://developers.google.com/fonts/faq</a> und in der Datenschutzerklärung von Google: <a href="https://www.google.com/policies/privacy/" rel="noopener">https://www.google.com/policies/privacy/</a>.</p>
<h3>Drittlandtransfer:</h3>
<p>Google verarbeitet Ihre Daten in den USA und hat sich dem EU_US Privacy Shield unterworfen <a href="https://www.privacyshield.gov/EU-US-Framework" target="_blank">https://www.privacyshield.gov/EU-US-Framework</a>.</p>
<h3>Bereitstellung vorgeschrieben oder erforderlich:</h3>
Expand All @@ -164,7 +164,7 @@
<h3>Art und Zweck der Verarbeitung:</h3>
<p>Auf dieser Webseite nutzen wir das Angebot von Google Maps. Google Maps wird von Google LLC, 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA (nachfolgend „Google“) betrieben. Dadurch können wir Ihnen interaktive Karten direkt in der Webseite anzeigen und ermöglichen Ihnen die komfortable Nutzung der Karten-Funktion.</p>
<p>Nähere Informationen über die Datenverarbeitung durch Google können Sie <a href="http://www.google.com/privacypolicy.html" target="_blank">den Google-Datenschutzhinweisen</a> entnehmen. Dort können Sie im Datenschutzcenter auch Ihre persönlichen Datenschutz-Einstellungen verändern.</p>
<p>Ausführliche Anleitungen zur Verwaltung der eigenen Daten im Zusammenhang mit Google-Produkten<a href="http://www.dataliberation.org/" target="_blank"> finden Sie hier</a>.</p>
<p>Ausführliche Anleitungen zur Verwaltung der eigenen Daten im Zusammenhang mit Google-Produkten<a href="http://www.dataliberation.org/" target="_blank" rel="noopener"> finden Sie hier</a>.</p>
<h3>Rechtsgrundlage:</h3>
<p>Rechtsgrundlage für die Einbindung von Google Maps und dem damit verbundenen Datentransfer zu Google ist Ihre Einwilligung (Art. 6 Abs. 1 lit. a DSGVO).</p>
<h3>Empfänger:</h3>
Expand All @@ -173,7 +173,7 @@
<h3>Speicherdauer:</h3>
<p>Wir erheben keine personenbezogenen Daten, durch die Einbindung von Google Maps.</p>
<h3>Drittlandtransfer:</h3>
<p>Google verarbeitet Ihre Daten in den USA und hat sich dem EU_US Privacy Shield unterworfen <a href="https://www.privacyshield.gov/EU-US-Framework" target="_blank">https://www.privacyshield.gov/EU-US-Framework</a>.</p>
<p>Google verarbeitet Ihre Daten in den USA und hat sich dem EU_US Privacy Shield unterworfen <a href="https://www.privacyshield.gov/EU-US-Framework" target="_blank" rel="noopener">https://www.privacyshield.gov/EU-US-Framework</a>.</p>
<h3>Widerruf der Einwilligung:</h3>
<p>Wenn Sie nicht möchten, dass Google über unseren Internetauftritt Daten über Sie erhebt, verarbeitet oder nutzt, können Sie in Ihrem Browsereinstellungen JavaScript deaktivieren. In diesem Fall können Sie unsere Webseite jedoch nicht oder nur eingeschränkt nutzen.</p>
<h3>Bereitstellung vorgeschrieben oder erforderlich:</h3>
Expand All @@ -183,16 +183,16 @@
<h3>Art und Zweck der Verarbeitung:</h3>
<p>Auf einigen unserer Webseiten betten wir YouTube-Videos ein. Betreiber der entsprechenden Plugins ist die YouTube, LLC, 901 Cherry Ave., San Bruno, CA 94066, USA (nachfolgend „YouTube“). Wenn Sie eine Seite mit dem YouTube-Plugin besuchen, wird eine Verbindung zu Servern von YouTube hergestellt. Dabei wird YouTube mitgeteilt, welche Seiten Sie besuchen. Wenn Sie in Ihrem YouTube-Account eingeloggt sind, kann YouTube Ihr Surfverhalten Ihnen persönlich zuzuordnen. Dies verhindern Sie, indem Sie sich vorher aus Ihrem YouTube-Account ausloggen.</p>
<p>Wird ein YouTube-Video gestartet, setzt der Anbieter Cookies ein, die Hinweise über das Nutzerverhalten sammeln.</p>
<p>Weitere Informationen zu Zweck und Umfang der Datenerhebung und ihrer Verarbeitung durch YouTube erhalten Sie in den Datenschutzerklärungen des Anbieters, Dort erhalten Sie auch weitere Informationen zu Ihren diesbezüglichen Rechten und Einstellungsmöglichkeiten zum Schutze Ihrer Privatsphäre (<a href="https://policies.google.com/privacy">https://policies.google.com/privacy</a>). Google verarbeitet Ihre Daten in den USA und hat sich dem EU-US Privacy Shield unterworfen https://www.privacyshield.gov/EU-US-Framework</p>
<p>Weitere Informationen zu Zweck und Umfang der Datenerhebung und ihrer Verarbeitung durch YouTube erhalten Sie in den Datenschutzerklärungen des Anbieters, Dort erhalten Sie auch weitere Informationen zu Ihren diesbezüglichen Rechten und Einstellungsmöglichkeiten zum Schutze Ihrer Privatsphäre (<a href="https://policies.google.com/privacy" rel="noopener">https://policies.google.com/privacy</a>). Google verarbeitet Ihre Daten in den USA und hat sich dem EU-US Privacy Shield unterworfen https://www.privacyshield.gov/EU-US-Framework</p>
<h3>Rechtsgrundlage:</h3>
<p>Rechtsgrundlage für die Einbindung von YouTube und dem damit verbundenen Datentransfer zu Google ist Ihre Einwilligung (Art. 6 Abs. 1 lit. a DSGVO).</p>
<h3>Empfänger:</h3>
<p>Der Aufruf von YouTube löst automatisch eine Verbindung zu Google aus.</p>
<h3>Speicherdauer und Widerruf der Einwilligung:</h3>
<p>Wer das Speichern von Cookies für das Google-Ad-Programm deaktiviert hat, wird auch beim Anschauen von YouTube-Videos mit keinen solchen Cookies rechnen müssen. YouTube legt aber auch in anderen Cookies nicht-personenbezogene Nutzungsinformationen ab. Möchten Sie dies verhindern, so müssen Sie das Speichern von Cookies im Browser blockieren.</p>
<p>Weitere Informationen zum Datenschutz bei „YouTube“ finden Sie in der Datenschutzerklärung des Anbieters unter: <a href="https://www.google.de/intl/de/policies/privacy/" target="_blank">https://www.google.de/intl/de/policies/privacy/ </a></p>
<p>Weitere Informationen zum Datenschutz bei „YouTube“ finden Sie in der Datenschutzerklärung des Anbieters unter: <a href="https://www.google.de/intl/de/policies/privacy/" target="_blank" rel="noopener">https://www.google.de/intl/de/policies/privacy/ </a></p>
<h3>Drittlandtransfer:</h3>
<p>Google verarbeitet Ihre Daten in den USA und hat sich dem EU_US Privacy Shield unterworfen <a href="https://www.privacyshield.gov/EU-US-Framework" target="_blank">https://www.privacyshield.gov/EU-US-Framework</a>.</p>
<p>Google verarbeitet Ihre Daten in den USA und hat sich dem EU_US Privacy Shield unterworfen <a href="https://www.privacyshield.gov/EU-US-Framework" target="_blank" rel="noopener">https://www.privacyshield.gov/EU-US-Framework</a>.</p>
<h3>Bereitstellung vorgeschrieben oder erforderlich:</h3>
<p>Die Bereitstellung Ihrer personenbezogenen Daten erfolgt freiwillig, allein auf Basis Ihrer Einwilligung. Sofern Sie den Zugriff unterbinden, kann es hierdurch zu Funktionseinschränkungen auf der Website kommen.</p>
<p></p>
Expand Down
12 changes: 10 additions & 2 deletions League/Controllers/Language.cs
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,11 @@ public IActionResult Index(string? culture, string? uiCulture, string? returnUrl
Response.Cookies.Delete(cookieProvider.CookieName);
Response.Cookies.Append(cookieProvider.CookieName, string.Empty, new CookieOptions
{
Expires = DateTime.UtcNow.AddDays(-1), IsEssential = true, SameSite = SameSiteMode.Lax
Secure = true,
Expires = DateTime.UtcNow.AddDays(-1),
IsEssential = true,
HttpOnly = true,
SameSite = SameSiteMode.Lax
});

return RedirectToLocal(returnUrl);
Expand All @@ -81,7 +85,11 @@ public IActionResult Index(string? culture, string? uiCulture, string? returnUrl
cookieValue,
new CookieOptions
{
Expires = DateTimeOffset.UtcNow.AddYears(1), IsEssential = true, SameSite = SameSiteMode.Lax
Secure = true,
Expires = DateTimeOffset.UtcNow.AddYears(1),
IsEssential = true,
HttpOnly = true,
SameSite = SameSiteMode.Lax
});

return RedirectToLocal(returnUrl);
Expand Down
7 changes: 4 additions & 3 deletions League/ModelBinders/TimeOnlyModelBinder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ public class TimeOnlyModelBinder : IModelBinder
{
private readonly IModelBinder _fallbackBinder;
private readonly ILogger<TimeOnlyModelBinder> _logger;
private const int RegexTimeout = 300;

private const DateTimeStyles _dateTimeStyles = DateTimeStyles.AllowWhiteSpaces | DateTimeStyles.AllowLeadingWhite | DateTimeStyles.AllowTrailingWhite;

Expand Down Expand Up @@ -56,8 +57,8 @@ private bool TryParseTimeOnly(string? text, out TimeOnly time)
{
if (text != null)
{
text = Regex.Replace(text, "([^0-9]|^)([0-9])([0-9]{2})([^0-9]|$)", "$1$2:$3$4");
text = Regex.Replace(text, "^[0-9]$", "0$0");
text = Regex.Replace(text, "([^0-9]|^)([0-9])([0-9]{2})([^0-9]|$)", "$1$2:$3$4", RegexOptions.Compiled, TimeSpan.FromMilliseconds(RegexTimeout));
text = Regex.Replace(text, "^[0-9]$", "0$0", RegexOptions.Compiled, TimeSpan.FromMilliseconds(RegexTimeout));

foreach (var format in _formats)
{
Expand All @@ -67,7 +68,7 @@ private bool TryParseTimeOnly(string? text, out TimeOnly time)
return true;
}
}

time = TimeOnly.MinValue;
return false;
}
Expand Down
5 changes: 3 additions & 2 deletions League/ModelBinders/TimeSpanModelBinder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ public class TimeSpanModelBinder : IModelBinder
{
private readonly IModelBinder _fallbackBinder;
private readonly ILogger<TimeSpanModelBinder> _logger;
private const int RegexTimeout = 300;

private const DateTimeStyles _dateTimeStyles = DateTimeStyles.AllowWhiteSpaces | DateTimeStyles.AllowLeadingWhite | DateTimeStyles.AllowTrailingWhite;

Expand Down Expand Up @@ -56,8 +57,8 @@ private bool TryParseTime(string? text, out TimeSpan time)
{
if (text != null)
{
text = Regex.Replace(text, "([^0-9]|^)([0-9])([0-9]{2})([^0-9]|$)", "$1$2:$3$4");
text = Regex.Replace(text, "^[0-9]$", "0$0");
text = Regex.Replace(text, "([^0-9]|^)([0-9])([0-9]{2})([^0-9]|$)", "$1$2:$3$4", RegexOptions.Compiled, TimeSpan.FromMilliseconds(RegexTimeout));
text = Regex.Replace(text, "^[0-9]$", "0$0", RegexOptions.Compiled, TimeSpan.FromMilliseconds(RegexTimeout));

foreach (var format in _formats)
{
Expand Down
4 changes: 2 additions & 2 deletions League/MultiTenancy/TenantResolver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@ private void SetMostRecentTenantCookie(ITenantContext tenant)
new CookieOptions
{
Path = "/",
HttpOnly = false,
Secure = false,
HttpOnly = true,
Secure = true,
SameSite = SameSiteMode.Lax,
Expires = DateTimeOffset.Now.AddYears(1),
IsEssential = true
Expand Down

0 comments on commit 8f65d83

Please sign in to comment.