Repository navigation
fix(security): drobne wzmocnienia zabezpieczeń - #917
Merged
Merged
Conversation
- trasy /test_403/, /test_500/, /test_exception/ tylko dla superużytkownika, - rozszerzona lista ROLLBAR_SCRUB_FIELDS (tokeny sesji/CSRF/PBN, sekrety integracji Uczelni), - reset hasła: atomowe liczniki (cache.add + cache.incr), dodatkowy limit per adres e-mail, formularz nie informuje o istnieniu konta, - secret_key_guard odrzuca wartość build-ową poza krokiem buildu (DJANGO_BPP_BUILD_STAGE=1 inline w RUN collectstatic), - ewaluacja_dwudyscyplinowcy: uprawnienia jak w ewaluacja_optymalizacja, - stan_systemu: poprawna nazwa grupy (GR_WPROWADZANIE_DANYCH), - dane wykresów w szczegółach metryk przez filtr jsonify, - COinS: kodowanie rft.language; rodzaj_autora_label przez format_html, - rekord_short w adminie: safe_tytul_html + Truncator(html=True), - usunięty nieużywany kod (formatted_komunikat, pbn_api.admin.helpers), - odpięte trasy zakładek menu admin_tools (dashboard bez zmian), - nagłówek Content-Security-Policy, domyślnie w trybie Report-Only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UJ23Rb1c5UtxHTfAke9ENQ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UJ23Rb1c5UtxHTfAke9ENQ
mpasternak
force-pushed
the
sec/drobne-hardening
branch
from
October 24, 2026 18:17
715ec35 to
50c7df7
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Zestaw drobnych wzmocnień zabezpieczeń (hardening). Każdy punkt ma test.
Zmiany
/test_403/,/test_500/,/test_exception/są dostępne tylko dla superużytkownika (bpp.views.sentry_tester.tylko_superuser). Anonim trafia na logowanie, pozostali zalogowani dostają 403.ROLLBAR_SCRUB_FIELDS: dodanepbn_token,csrfmiddlewaretoken,sessionid,ott,pbn_app_token,orcid_client_secret,dspace_api_passwordiclarivate_password.access_token,refresh_tokeniclient_secretbyły już na liście.cache.add+cache.incr),BppPasswordResetFormnie zgłasza błędu dla adresu bez konta (zachowanie jak wdjango.contrib.auth).secret_key_guardodrzuca wartośćbuild-time-only-not-used, chyba że ustawionoDJANGO_BPP_BUILD_STAGE=1. W Dockerfile flaga jest ustawiona inline w obu RUN-achcollectstatic(nie przezENV). To odwraca wcześniejszą decyzję z fix(security): hardening z równoległego security review (6 findingów) #610, w której wartość build-owa była przepuszczana zawsze.ewaluacja_dwudyscyplinowcywymaga uprawnień „wprowadzanie danych” lub superużytkownika. To ta sama bramka URLconf co wewaluacja_optymalizacja, skąd prowadzi link. Widok pokazuje wszystkich autorów, więcma_uprawnienia_ewaluacji(dostęp dla każdego konta powiązanego z autorem) byłby za szeroki.stan_systemu:group_requiredużywa terazGR_WPROWADZANIE_DANYCH. Wcześniej była tam nazwa nieistniejącej grupy, więc przechodził tylko superużytkownik. Moduł jest używany: odpytuje go htmx z ekranów ewaluacji i snapshotów.csrf_exempt. Widok przyjmuje tylko GET (http_method_names = ["get"]) i nie ma efektów ubocznych. Test pilnuje, że POST zwraca 405.jsonifyzamiastjson.dumps|safe.rft.languagejest kodowany przezquote().rodzaj_autora_labelskłada HTML przezformat_html; z szablonu zniknęło|safe.admin_tools: podpięty jest tylkoadmin_tools/dashboard/. Trasy zakładek menu nie są montowane, bo BPP nie używa zakładek.rekord_shortw adminie: najpierwsafe_tytul_html, potemTruncator(...).chars(100, html=True).formatted_komunikatwpbn_export_queueorazpbn_api/admin/helpers.pyrazem z jego testem.django_bpp.csp, bez nowych zależności:Content-Security-Policy-Report-Only,DJANGO_BPP_CSP_ENABLED,DJANGO_BPP_CSP_REPORT_ONLY,DJANGO_BPP_CSP_POLICYiDJANGO_BPP_CSP_REPORT_URI,docs/administrator/zaawansowane.md.Ryzyka zmiany zachowania
DJANGO_BPP_SECRET_KEY=build-time-only-not-usednie wystartuje nasettings.production. CI nie buduje stagetestserver, więc zmiana w Dockerfile nie jest tam weryfikowana; pilnuje jej test statyczny pliku.DJANGO_BPP_CSP_ENABLED=false.Testy
Lokalnie:
pbn_export_queue/,pbn_api/tests/,bpp/tests/test_admin/iewaluacja_optymalizacja/tests/test_authz.py: 1349 passed,test_smoke.py(anonimowy crawl przechodzi przy aktywnym CSP Report-Only): 1 passed.Nowe testy przed poprawką kończyły się błędem: 38 failed i błąd importu w teście guarda.
🤖 Generated with Claude Code
https://claude.ai/code/session_01UJ23Rb1c5UtxHTfAke9ENQ