<?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: Bright Asare Bediako</title>
    <description>The latest articles on DEV Community by Bright Asare Bediako (@bright_asarebediako_a70d).</description>
    <link>https://dev.to/bright_asarebediako_a70d</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4070217%2Fca6f79d4-d531-43e9-912c-7f8bb404f7fa.png</url>
      <title>DEV Community: Bright Asare Bediako</title>
      <link>https://dev.to/bright_asarebediako_a70d</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bright_asarebediako_a70d"/>
    <language>en</language>
    <item>
      <title>I tested my security extension against 20 real sites and found three bugs - in my own tool</title>
      <dc:creator>Bright Asare Bediako</dc:creator>
      <pubDate>Sun, 09 Aug 2026 20:26:22 +0000</pubDate>
      <link>https://dev.to/bright_asarebediako_a70d/i-tested-my-security-extension-against-20-real-sites-and-found-three-bugs-in-my-own-tool-36nn</link>
      <guid>https://dev.to/bright_asarebediako_a70d/i-tested-my-security-extension-against-20-real-sites-and-found-three-bugs-in-my-own-tool-36nn</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpj2xzlnwje9jgxcsb07m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpj2xzlnwje9jgxcsb07m.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;I built 'QuickAudit', a browser extension that runs ten OWASP-style security checks on whatever web page you're currently viewing (headers, cookie flags, mixed content, vulnerable JS libraries via OSV.dev, exposed files).&lt;/p&gt;

&lt;p&gt;Before publishing, I pointed it at a corpus of 20 real-world websites- ten major security vendor sites and ten older enterprise properties - expecting a quick validation exercise to confirm everything worked. &lt;/p&gt;

&lt;p&gt;Instead, it turned into a bug hunt. And the bugs were all mine.&lt;/p&gt;

&lt;p&gt;Here are the three biggest false-positive traps I uncovered in my own code, and how testing against a live corpus changed the architecture.&lt;/p&gt;

&lt;p&gt;Bug 1: I was auditing Cloudflare's challenge page and calling it your website&lt;/p&gt;

&lt;p&gt;During the corpus test, QuickAudit reported 'sourceforge.net' as missing HTTP Strict Transport Security (HSTS). &lt;/p&gt;

&lt;p&gt;Surprised, I opened terminal and ran 'curl -I &lt;a href="https://sourceforge.net" rel="noopener noreferrer"&gt;https://sourceforge.net&lt;/a&gt;'. The header was right there: 'strict-transport-security: max-age=31536000; includeSubDomains; preload'.&lt;/p&gt;

&lt;p&gt;Why was my extension flagging it?&lt;/p&gt;

&lt;p&gt;It turned out my automated scan had been served a Cloudflare bot-protection interstitial page in 44ms. The extension was faithfully auditing the challenge page’s headers, not Sourceforge's actual production application.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The Lesson: Any security tool that programmatically fetches a URL rather than inspecting a real, fully completed browser navigation inherits this bug — and it fails toward confident wrongness, which is the worst direction for a security tool.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Fix: I added a 'detectChallenge()' check that inspects headers like 'cf-mitigated', 'x-amzn-waf-action', and interstitial page titles. When triggered, QuickAudit now explicitly skips header-dependent checks with an explanation rather than presenting false findings about a page that isn't yours.&lt;/p&gt;

&lt;p&gt;Bug 2: I misread a web spec I’d have sworn I knew by heart&lt;/p&gt;

&lt;p&gt;My Referrer-Policy auditor initially flagged 'origin-when-cross-origin' as a high-risk failure, bucketing it with 'unsafe-url' for "leaking full path and query parameters cross-origin."&lt;/p&gt;

&lt;p&gt;Except it doesn't. &lt;/p&gt;

&lt;p&gt;According to the W3C spec, 'origin-when-cross-origin' sends the full URL (origin + path + query) for 'same-origin' requests, but strips the path and sends 'only the origin' for cross-origin requests.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The Lesson: When you encode web security standards into lookup tables or regex rules, your own misconceptions get frozen into code and shipped to users.&lt;br&gt;
'The Fix: I updated the policy matrix to reflect the exact spec table. 'origin-when-cross-origin` now passes cleanly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Bug 3: Pedantry disguised as a security finding&lt;/p&gt;

&lt;p&gt;In my original code, any site using 'X-Frame-Options: SAMEORIGIN' without a modern CSP 'frame-ancestors' directive generated a warning. &lt;/p&gt;

&lt;p&gt;Technically, CSP 'frame-ancestors' is the modern standard. But in practice, 'every major current browser honors X-Frame-Options'. Flagging this on sites like 'stripe.com', 'python.org', and 'nasa.gov' was pure pedantry.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The Lesson: A tool that warns you "technically you could be more fashionable" trains developers to ignore warnings. Then, when a real severity-1 finding occurs, they ignore that too.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Fix: 'X-Frame-Options' now passes with a neutral informational note rather than a warning.&lt;/p&gt;

&lt;p&gt;The Part I’d Repeat on Any Project: The Catch-All SPA Trap&lt;/p&gt;

&lt;p&gt;One of the checks in QuickAudit checks for exposed sensitive files ('/.env', '/.git/HEAD', '/.htpasswd'). &lt;/p&gt;

&lt;p&gt;If you write a naive check that just requests '/.env' and checks for HTTP 200, 'every Single Page Application (SPA) with a catch-all route will report 14 critical security vulnerabilities.' Why? Because SPAs return 'HTTP 200 OK' with 'index.html' for 'any' requested path.&lt;/p&gt;

&lt;p&gt;To solve this, QuickAudit performs a two-step fingerprint:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Requests a random nonexistent path (e.g. '/random-a8f92z') to baseline how the server handles garbage requests.&lt;/li&gt;
&lt;li&gt;Requires the response body to match a strict content signature for that file type ('/.git/HEAD' must match '^ref:\s+refs/', '/.env' must match 'KEY=value' lines and 'must not be HTML').&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Evidence snippets are also redacted in local storage so a screenshot of a report never leaks the secret it found.&lt;/p&gt;

&lt;p&gt;Summary &amp;amp; Try It Out&lt;/p&gt;

&lt;p&gt;Running against 20 real sites took an afternoon and completely refactored three core checks. If you're building any tool that renders a verdict on someone else's system, real-world corpus testing isn't optional and handling the edge cases gracefully is what builds developer trust.&lt;/p&gt;

&lt;p&gt;QuickAudit is 100% free, privacy-first (runs locally, no accounts or telemetry), and available on all major stores:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌐 Chrome Web Store: &lt;a href="https://chromewebstore.google.com/search/QuickAudit" rel="noopener noreferrer"&gt;https://chromewebstore.google.com/search/QuickAudit&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🌐 Microsoft Edge Add-ons: &lt;a href="https://microsoftedge.microsoft.com/addons/detail/0RDCKBGQ6TZM" rel="noopener noreferrer"&gt;https://microsoftedge.microsoft.com/addons/detail/0RDCKBGQ6TZM&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🦊 Firefox AMO: &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/quickaudit-web-security/" rel="noopener noreferrer"&gt;https://addons.mozilla.org/en-US/firefox/addon/quickaudit-web-security/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💻 Source Code: &lt;a href="https://github.com/BAB78/quickaudit" rel="noopener noreferrer"&gt;https://github.com/BAB78/quickaudit&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'd love to hear feedback or edge cases from other web &amp;amp; security engineers!&lt;/p&gt;

</description>
      <category>security</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
