Skip to content

Security: Fix credential exposure and improve input sanitization#47

Open
trek-e wants to merge 4 commits intoDarklyter:mainfrom
trek-e:security-fixes
Open

Security: Fix credential exposure and improve input sanitization#47
trek-e wants to merge 4 commits intoDarklyter:mainfrom
trek-e:security-fixes

Conversation

@trek-e
Copy link
Copy Markdown

@trek-e trek-e commented Jan 24, 2026

Summary

  • Add redact_sensitive_params() helper to mask API keys and Plex tokens in debug logs
  • Change os.environ['PLEXTOKEN'] to os.environ.get('PLEXTOKEN') with proper error handling
  • Escape backslashes in addition to quotes for GraphQL query safety
  • Add missing images{id,title,file{width,height}} fields to gallery GraphQL query

Security Issues Addressed

Issue Severity Fix
API key logged in plaintext High Redact with apikey=REDACTED
Plex token logged in plaintext High Redact with X-Plex-Token=REDACTED
Missing PLEXTOKEN crashes plugin Medium Graceful error message
Backslash in filename breaks GraphQL Medium Escape \ before "
Gallery images query incomplete Low Add required subfields

Test plan

  • Enable debug logging and verify API key appears as REDACTED in logs
  • Enable debug logging with SaveUserRatings and verify Plex token appears as REDACTED
  • Test with PLEXTOKEN unset - should log error message instead of crashing
  • Test filename search with backslash in filename
  • Test IncludeGalleryImages feature with SortGalleryImages enabled

🤖 Generated with Claude Code

trek-e and others added 4 commits January 24, 2026 01:04
- STACK.md - Technologies and dependencies
- ARCHITECTURE.md - System design and patterns
- STRUCTURE.md - Directory layout
- CONVENTIONS.md - Code style and patterns
- TESTING.md - Test structure
- INTEGRATIONS.md - External services
- CONCERNS.md - Technical debt and issues
Fixes Darklyter#15

The INCLUDES query template had extra wrapper quotes around the filename
placeholder, causing searches to look for `"filename"` (with literal quotes)
instead of just `filename`. This broke matching for files with mixed quote
types (apostrophes and double quotes).

Removed the wrapper `\"` quotes from the INCLUDES query to match how the
EQUALS query works.
Fixes Darklyter#29

When a scene has no studio set in Stash (studio: null), the FormattedTitle
function would crash with TypeError when trying to access data['studio']['name'].

Added null check to gracefully handle scenes without studios - the {studio}
placeholder will simply be empty in the formatted title.
- Add redact_sensitive_params() to mask API keys and tokens in debug logs
- Use os.environ.get() for PLEXTOKEN to prevent crash when not set
- Escape backslashes in GraphQL queries to prevent injection
- Add missing image fields to gallery GraphQL query

Fixes potential security issues:
- API keys were logged in plaintext when debug mode enabled
- Plex tokens were logged in plaintext in section/rate requests
- Missing PLEXTOKEN caused unhandled exception
- Filenames with backslashes could cause GraphQL parsing issues

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant