security: harden static site (headers, exposed-file cleanup, privacy)

Proactive security & health pass. No live/exploitable vulnerabilities were
found; these changes remove information-disclosure surfaces and add
standard hardening.

- Remove publicly-downloadable 1.1 MB full source dump (code_export.txt)
  and stray empty l.php; add code_export.txt to .gitignore.
- Exclude dev files/folders (*.sh, *.py, docs/, templates/, tools/,
  README.md) from the rsync deploy so they never reach the live server.
- .htaccess: add X-Frame-Options, Referrer-Policy, Permissions-Policy,
  and a report-only Content-Security-Policy; add defense-in-depth deny
  block for dev/VCS files (robots.txt & sitemap.xml left served).
- .htaccess: fix root redirect to canonical msosorg.com + /en/.
- Swap 4 project-page YouTube embeds to youtube-nocookie.com so no
  Google cookies are set before consent (GDPR).
- Add rel="noopener" to 30 team social links on the About Us pages.
- Harden esc() in my-route.js to also escape single quotes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
popovskikandClaude Opus 4.8 committed 2026-08-03 23:56:48 +02:00
1 parent c2b1b6eb5a
commit 168e4ce378
13 files changed
+75 -22777

No files matched your search

+10 -10
View File
@@ -211,8 +211,8 @@
<div class="member-content">
<div class="member-socials">
<a href="mailto:kristijan.popovski@msosorg.com" aria-label="Email Kristijan Popovski"><i class="fas fa-envelope"></i></a>
<a href="https://www.linkedin.com/in/popovski-k" target="_blank" aria-label="LinkedIn profile of Kristijan Popovski"><i class="fab fa-linkedin-in"></i></a>
<a href="https://www.instagram.com/popovski.k/" target="_blank" aria-label="Instagram profile of Kristijan Popovski"><i class="fab fa-instagram"></i></a>
<a href="https://www.linkedin.com/in/popovski-k" target="_blank" rel="noopener" aria-label="LinkedIn profile of Kristijan Popovski"><i class="fab fa-linkedin-in"></i></a>
<a href="https://www.instagram.com/popovski.k/" target="_blank" rel="noopener" aria-label="Instagram profile of Kristijan Popovski"><i class="fab fa-instagram"></i></a>
</div>
<div class="member-info">
<h4>Kristijan Popovski</h4>
@@ -225,8 +225,8 @@
<div class="member-content">
<div class="member-socials">
<a href="mailto:lea.janackovska@msosorg.com" aria-label="Email Lea Janachkovska"><i class="fas fa-envelope"></i></a>
<a href="https://www.linkedin.com/in/lea-janachkovska-9833b9246/" target="_blank" aria-label="LinkedIn profile of Lea Janachkovska"><i class="fab fa-linkedin-in"></i></a>
<a href="https://www.instagram.com/lea_janackovska" target="_blank" aria-label="Instagram profile of Lea Janachkovska"><i class="fab fa-instagram"></i></a>
<a href="https://www.linkedin.com/in/lea-janachkovska-9833b9246/" target="_blank" rel="noopener" aria-label="LinkedIn profile of Lea Janachkovska"><i class="fab fa-linkedin-in"></i></a>
<a href="https://www.instagram.com/lea_janackovska" target="_blank" rel="noopener" aria-label="Instagram profile of Lea Janachkovska"><i class="fab fa-instagram"></i></a>
</div>
<div class="member-info">
<h4>Lea Janachkovska</h4>
@@ -239,8 +239,8 @@
<div class="member-content">
<div class="member-socials">
<a href="mailto:marko.arsov@msosorg.com" aria-label="Email Marko Arsov"><i class="fas fa-envelope"></i></a>
<a href="https://www.linkedin.com/in/marko-arsov-3313202b9" target="_blank" aria-label="LinkedIn profile of Marko Arsov"><i class="fab fa-linkedin-in"></i></a>
<a href="https://www.instagram.com/marko.arsov" target="_blank" aria-label="Instagram profile of Marko Arsov"><i class="fab fa-instagram"></i></a>
<a href="https://www.linkedin.com/in/marko-arsov-3313202b9" target="_blank" rel="noopener" aria-label="LinkedIn profile of Marko Arsov"><i class="fab fa-linkedin-in"></i></a>
<a href="https://www.instagram.com/marko.arsov" target="_blank" rel="noopener" aria-label="Instagram profile of Marko Arsov"><i class="fab fa-instagram"></i></a>
</div>
<div class="member-info">
<h4>Marko Arsov</h4>
@@ -253,8 +253,8 @@
<div class="member-content">
<div class="member-socials">
<a href="mailto:marija.koshtrevska@msosorg.com" aria-label="Email Marija Koshtrevska"><i class="fas fa-envelope"></i></a>
<a href="https://www.linkedin.com/in/marija-koshtrevska/" target="_blank" aria-label="LinkedIn profile of Marija Koshtrevska"><i class="fab fa-linkedin-in"></i></a>
<a href="https://www.instagram.com/koshtrevska_10" target="_blank" aria-label="Instagram profile of Marija Koshtrevska"><i class="fab fa-instagram"></i></a>
<a href="https://www.linkedin.com/in/marija-koshtrevska/" target="_blank" rel="noopener" aria-label="LinkedIn profile of Marija Koshtrevska"><i class="fab fa-linkedin-in"></i></a>
<a href="https://www.instagram.com/koshtrevska_10" target="_blank" rel="noopener" aria-label="Instagram profile of Marija Koshtrevska"><i class="fab fa-instagram"></i></a>
</div>
<div class="member-info">
<h4>Marija Koshtrevska</h4>
@@ -267,8 +267,8 @@
<div class="member-content">
<div class="member-socials">
<a href="mailto:monika.velinova@msosorg.com" aria-label="Email Monika Velinova"><i class="fas fa-envelope"></i></a>
<a href="https://www.linkedin.com/in/monika-velinova-21632517a/" target="_blank" aria-label="LinkedIn profile of Monika Velinova"><i class="fab fa-linkedin-in"></i></a>
<a href="https://www.instagram.com/monivelinova" target="_blank" aria-label="Instagram profile of Monika Velinova"><i class="fab fa-instagram"></i></a>
<a href="https://www.linkedin.com/in/monika-velinova-21632517a/" target="_blank" rel="noopener" aria-label="LinkedIn profile of Monika Velinova"><i class="fab fa-linkedin-in"></i></a>
<a href="https://www.instagram.com/monivelinova" target="_blank" rel="noopener" aria-label="Instagram profile of Monika Velinova"><i class="fab fa-instagram"></i></a>
</div>
<div class="member-info">
<h4>Monika Velinova</h4>