<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Flutter Guard</title>
    <description>The latest articles on DEV Community by Flutter Guard (@flutterguard).</description>
    <link>https://dev.to/flutterguard</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3686109%2Fb1d912c0-102a-4d5e-95a3-3f00c26b8358.png</url>
      <title>DEV Community: Flutter Guard</title>
      <link>https://dev.to/flutterguard</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/flutterguard"/>
    <language>en</language>
    <item>
      <title>What Your Flutter App Leaks After Release (And How to Catch It Before Launch)</title>
      <dc:creator>Flutter Guard</dc:creator>
      <pubDate>Tue, 30 Dec 2025 13:09:21 +0000</pubDate>
      <link>https://dev.to/flutterguard/i-shipped-my-firebase-key-heres-the-tool-i-built-so-you-dont-40p8</link>
      <guid>https://dev.to/flutterguard/i-shipped-my-firebase-key-heres-the-tool-i-built-so-you-dont-40p8</guid>
      <description>&lt;p&gt;You spent months building your Flutter app. QA passed. Users love it. You ship to production.&lt;/p&gt;

&lt;p&gt;Then a security researcher emails you: "Hey, I found your Firebase keys hardcoded in your app."&lt;/p&gt;

&lt;h2&gt;
  
  
  What Attackers See in a Built Flutter App
&lt;/h2&gt;

&lt;p&gt;When you compile a Flutter app, you're creating a package that contains more than just your UI code. Here's what can leak:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Hardcoded Secrets
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;API keys baked into Dart code&lt;/li&gt;
&lt;li&gt;Firebase credentials (database URLs, API keys, project IDs)&lt;/li&gt;
&lt;li&gt;OAuth client secrets&lt;/li&gt;
&lt;li&gt;Third-party service tokens&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These survive compilation and end up in your final build, readable by anyone who decompiles your app.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Firebase Misconfigurations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Unrestricted database rules&lt;/li&gt;
&lt;li&gt;Public storage buckets&lt;/li&gt;
&lt;li&gt;Missing auth requirements&lt;/li&gt;
&lt;li&gt;Admin SDK credentials in client code&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Dangerous Permissions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;INTERNET&lt;/code&gt; (required but often paired with risky perms)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;READ_EXTERNAL_STORAGE&lt;/code&gt; / &lt;code&gt;WRITE_EXTERNAL_STORAGE&lt;/code&gt; without justification&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ACCESS_FINE_LOCATION&lt;/code&gt; when unnecessary&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CAMERA&lt;/code&gt; / &lt;code&gt;MICROPHONE&lt;/code&gt; that raise privacy flags&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Debug Builds in Production
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Leaving &lt;code&gt;debuggable=true&lt;/code&gt; in AndroidManifest.xml&lt;/li&gt;
&lt;li&gt;Exposing dev endpoints&lt;/li&gt;
&lt;li&gt;Verbose error messages with stack traces&lt;/li&gt;
&lt;li&gt;Debug symbols that make reverse engineering easier&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why This Happens
&lt;/h2&gt;

&lt;p&gt;Flutter's compilation process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Dart code → compiled native code&lt;/li&gt;
&lt;li&gt;Assets, configs, manifests → bundled as-is&lt;/li&gt;
&lt;li&gt;Strings, URLs, keys → often remain in readable form&lt;/li&gt;
&lt;li&gt;Tree-shaking doesn't remove hardcoded secrets&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You think you're safe because the code is compiled. But decompilation tools can extract:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Asset files&lt;/li&gt;
&lt;li&gt;Android manifest permissions&lt;/li&gt;
&lt;li&gt;Compiled string literals&lt;/li&gt;
&lt;li&gt;Resource files and configs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Catch These Before Release
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Pre-release security checklist:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Never hardcode secrets—use environment variables or secure vaults&lt;/li&gt;
&lt;li&gt;Audit Firebase rules (assume your keys are public)&lt;/li&gt;
&lt;li&gt;Review AndroidManifest.xml for debug flags and excessive permissions&lt;/li&gt;
&lt;li&gt;Strip debug symbols from production builds&lt;/li&gt;
&lt;li&gt;Test your own app with decompilation tools&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Or scan it automatically:&lt;/strong&gt;&lt;br&gt;
I built &lt;a href="https://flutterguard.dev/" rel="noopener noreferrer"&gt;FlutterGuard&lt;/a&gt; after I shipped my Firebase key in production (true story—security researcher found it). It decompiles your Flutter app and shows you exactly what an attacker sees:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hardcoded secrets/URLs/Firebase configs&lt;/li&gt;
&lt;li&gt;Dangerous permissions and debug builds&lt;/li&gt;
&lt;li&gt;Clear, actionable report in ~3 minutes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Offer:&lt;/strong&gt; 3 free scans/day, no card required → &lt;a href="https://flutterguard.dev/" rel="noopener noreferrer"&gt;flutterguard.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you try it, tell me one thing to improve—I ship fixes same-day.&lt;/p&gt;




&lt;p&gt;Stay safe. Ship secure. 🔒&lt;/p&gt;




</description>
      <category>flutter</category>
      <category>security</category>
      <category>tooling</category>
      <category>saas</category>
    </item>
  </channel>
</rss>
