Security polish (audit F5-F6): disable broad allowMixedContent on Android (loopback cleartext stays via network_security_config); document CVM client's intentional fixed data-relay set + IP-disclosure privacy note
Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
This commit is contained in:
parent
f316c77806
commit
00482fc332
2 changed files with 24 additions and 2 deletions
|
|
@ -10,8 +10,16 @@ const config: CapacitorConfig = {
|
||||||
androidScheme: 'https',
|
androidScheme: 'https',
|
||||||
},
|
},
|
||||||
android: {
|
android: {
|
||||||
// Allow mixed content for Nostr WebSocket connections
|
// Cleartext is NOT needed here for Nostr: all public relays are wss:// and
|
||||||
allowMixedContent: true,
|
// are unaffected by this flag. The only cleartext endpoint is the optional
|
||||||
|
// local Citrine relay (ws://127.0.0.1:4869), which is permitted specifically
|
||||||
|
// and safely via res/xml/network_security_config.xml (loopback-only), NOT by
|
||||||
|
// this broad mixed-content switch. Keeping this false avoids silently
|
||||||
|
// allowing insecure sub-resources on the https-scheme app shell.
|
||||||
|
// NOTE: if the local Citrine relay ever fails to connect on a device after
|
||||||
|
// this change, fix it in network_security_config.xml (loopback cleartext),
|
||||||
|
// not by re-enabling global mixed content.
|
||||||
|
allowMixedContent: false,
|
||||||
// Capture input for hardware back button
|
// Capture input for hardware back button
|
||||||
captureInput: true,
|
captureInput: true,
|
||||||
// Use the app's dark background for the splash
|
// Use the app's dark background for the splash
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,20 @@ import { useNostr } from '@nostrify/react';
|
||||||
|
|
||||||
// Relay list
|
// Relay list
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fixed set of PUBLIC data relays this discovery client queries.
|
||||||
|
*
|
||||||
|
* Intentionally NOT the user's personal NIP-65 relays: this hook powers the
|
||||||
|
* community content browser (spots, events, Lab, gear, crews, shops, tours),
|
||||||
|
* and that content is spread across the community's shared relays — a user's
|
||||||
|
* own relay set would return an incomplete, inconsistent view. So we always
|
||||||
|
* query the canonical skate-data relays regardless of personal config.
|
||||||
|
*
|
||||||
|
* PRIVACY NOTE: because these are fixed, a query here reveals the user's IP to
|
||||||
|
* these three relay operators even if the user configured different relays
|
||||||
|
* elsewhere in the app. This is disclosed on the Privacy page. All data queried
|
||||||
|
* is public; the private encrypted Stash is never touched by this client.
|
||||||
|
*/
|
||||||
const DATA_RELAYS = [
|
const DATA_RELAYS = [
|
||||||
'wss://goskatespots.nostr1.com',
|
'wss://goskatespots.nostr1.com',
|
||||||
'wss://relay.ditto.pub',
|
'wss://relay.ditto.pub',
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue