<?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: Khaled Hani</title>
    <description>The latest articles on DEV Community by Khaled Hani (@muslimkh09).</description>
    <link>https://dev.to/muslimkh09</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%2F4005995%2F9a10ea3b-1153-4a7d-ac24-4bc2f25aae37.jpg</url>
      <title>DEV Community: Khaled Hani</title>
      <link>https://dev.to/muslimkh09</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/muslimkh09"/>
    <language>en</language>
    <item>
      <title>How My Open-Source Scanner Caught a Crypto Scammer Exposing Their Own Keys</title>
      <dc:creator>Khaled Hani</dc:creator>
      <pubDate>Sat, 11 Jul 2026 06:37:35 +0000</pubDate>
      <link>https://dev.to/muslimkh09/how-my-open-source-scanner-caught-a-crypto-scammer-exposing-their-own-keys-2pkl</link>
      <guid>https://dev.to/muslimkh09/how-my-open-source-scanner-caught-a-crypto-scammer-exposing-their-own-keys-2pkl</guid>
      <description>&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&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%2Fm95cyzha4p1anz5xqmun.jpg" alt="GitHub Issue" width="800" height="1559"&gt;&lt;/th&gt;
&lt;th&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%2Fivzlpob107nysxershy4.jpg" alt="Phishing Site UI" width="800" height="1563"&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;Exposing the keys in the GitHub Issue&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;The Phishing Site (Notice the Spotify option)&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  There is a golden rule in cybersecurity: the weakest link is almost always human error. But what happens when that human error comes from a malicious actor trying to orchestrate a crypto phishing scam? The result is surprisingly comedic.
&lt;/h2&gt;

&lt;p&gt;Here is the story of how my newly built open-source secret scanner, Sentinel, accidentally neutralized a Tether (USDT) phishing operation during a routine benchmark.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Setup: Testing in the Wild
&lt;/h2&gt;

&lt;p&gt;I recently released &lt;strong&gt;Sentinel&lt;/strong&gt;, a statically compiled, context-aware Git secret scanner and pre-commit hook written in Go. After fine-tuning its engine to achieve near-zero false positives, I decided to benchmark it "in the wild" by scanning random, recently updated repositories on GitHub.&lt;br&gt;
The goal was to see if Sentinel could catch edge-case credentials that traditional, regex-heavy tools often miss or drown in noise. During the scan, Sentinel instantly flagged a critical severity finding in a rather suspicious repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Catch: AI Copy-Paste Gone Wrong
&lt;/h2&gt;

&lt;p&gt;Upon inspecting the flagged file, the issue was immediately apparent: a fully exposed, hardcoded Firebase configuration object containing the API key, project ID, and messaging sender ID.&lt;br&gt;
It was a textbook case of a script kiddie asking an AI for a web login template and blindly copy-pasting the frontend code into a public repository. They had effectively handed over the administrative keys to their backend infrastructure before the project even launched.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Phishing Site: Logging into Crypto with Spotify?
&lt;/h2&gt;

&lt;p&gt;Out of professional curiosity, I checked the Vercel deployment linked to the repository. The project was attempting to impersonate Tether (USDT), the world's largest stablecoin. It featured the official logo, a catchy slogan, and a login prompt designed to harvest credentials.&lt;br&gt;
However, because the scammer had blindly copied a generic consumer application template, the authentication options presented to the victims were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Continue with Google&lt;/li&gt;
&lt;li&gt;Continue with Phone&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Continue with Spotify&lt;/strong&gt;
Yes, the threat actor was attempting to steal cryptocurrency wallets by asking victims to authenticate via their music streaming accounts. It was a masterpiece of absolute incompetence.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Confrontation
&lt;/h2&gt;

&lt;p&gt;I could not let this slide. I navigated to the scammer's GitHub repository, opened a public Issue, and left them a piece of professional advice.&lt;br&gt;
&lt;strong&gt;Issue Title:&lt;/strong&gt; &lt;em&gt;If you want to scam someone, you must first learn how to protect yourself.&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;Comment:&lt;/strong&gt; &lt;em&gt;"Ask the AI you used about the dangers of leaving this information public, you fool. Learn first before you experiment."&lt;/em&gt;&lt;br&gt;
By exposing their keys publicly in the issue and highlighting the flaw, their Firebase project was flagged, effectively neutralizing the phishing attempt before it could claim any victims.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Technical Takeaway
&lt;/h2&gt;

&lt;p&gt;While the story provides a good laugh, it highlights a severe reality in modern software development:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;AI Code Generation is a Double-Edged Sword:&lt;/strong&gt; The blind reliance on AI-generated code without understanding environment variables (.env) is causing a massive spike in leaked secrets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Standard Tools Miss Context:&lt;/strong&gt; Many traditional scanners rely heavily on mathematical entropy and might ignore loosely structured configurations if they do not match strict regular expressions.
This architectural flaw is exactly why I built &lt;strong&gt;Sentinel&lt;/strong&gt;. It does not just look for random strings; it utilizes lexical context-awareness to catch hardcoded assignments. This ensures that whether you are a senior engineer making a late-night mistake or a clueless scammer copying code, your secrets are caught before they enter the version control history.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Secure Your Code (Don't be like our Tether guy)
&lt;/h2&gt;

&lt;p&gt;If you want to ensure you never accidentally push your API keys, AWS credentials, or database connection strings to GitHub, take a look at Sentinel. It installs in seconds as a pre-commit hook and runs silently in the background, utilizing a three-tier detection pipeline built for speed.&lt;br&gt;
🔗 &lt;strong&gt;&lt;a href="https://github.com/sentinel-cli/sentinel" rel="noopener noreferrer"&gt;Check out Sentinel on GitHub&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
If you enjoyed this case study, consider dropping a star on the repository, and let me know in the comments about the most absurd bug or leak you have ever encountered in the wild.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>productivity</category>
      <category>opensource</category>
      <category>security</category>
    </item>
    <item>
      <title>How to block API keys from leaking to Git with zero performance overhead</title>
      <dc:creator>Khaled Hani</dc:creator>
      <pubDate>Tue, 07 Jul 2026 15:05:21 +0000</pubDate>
      <link>https://dev.to/muslimkh09/how-to-block-api-keys-from-leaking-to-git-with-zero-performance-overhead-1167</link>
      <guid>https://dev.to/muslimkh09/how-to-block-api-keys-from-leaking-to-git-with-zero-performance-overhead-1167</guid>
      <description>&lt;p&gt;Hello everyone,&lt;/p&gt;

&lt;p&gt;I wanted to share Sentinel, an open-source, statically compiled Git pre-commit hook and credentials scanner written in Go.&lt;/p&gt;

&lt;p&gt;The project was born out of frustration with existing tools. Most secret scanners are either written in heavy runtime languages (Python, Node.js) that delay developer commit times, or they consume substantial memory footprints (sometimes over 150 MB RSS) just to scan a few staged lines of code.&lt;/p&gt;

&lt;p&gt;Our goal was simple: block credential leaks at the local commit stage with a tool that runs under 30ms and consumes less than 12 MB of RAM.&lt;/p&gt;

&lt;h3&gt;
  
  
  Technical Architecture &amp;amp; Optimization Decisions
&lt;/h3&gt;

&lt;p&gt;To keep the scan latency sub-30ms without sacrificing recall accuracy, we built a three-tier pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Flat DFA Trie Representation&lt;/strong&gt;: Rather than relying on pointer-heavy tree structures (&lt;code&gt;[256]*acNode&lt;/code&gt;) for the Aho-Corasick automaton, Sentinel compiles rule prefixes into a flat, contiguous, integer-indexed DFA table (&lt;code&gt;[128]uint16&lt;/code&gt;). This keeps the trie lookup memory footprint under 500 KB and limits total Resident Set Size (RSS) to ~11 MB (the baseline overhead of the Go runtime).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Buffer-Pooled Base64 Pipeline&lt;/strong&gt;: Staged assets often contain encoded configurations. To decode and scan inline Base64 data, we implemented a thread-safe &lt;code&gt;sync.Pool&lt;/code&gt; for reusable byte buffers. Reusing buffers across the scanning loop completely eliminates heap allocations on the hot path.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context-Aware Suppression&lt;/strong&gt;: To eliminate the developer-fatiguing false positives common in entropy-based scanners, Sentinel uses context validation. It checks assignment syntax (LHS vs. RHS), comments, file extensions, and variable names (e.g., ignoring variables prefixed with &lt;code&gt;mock&lt;/code&gt;, &lt;code&gt;fake&lt;/code&gt;, or &lt;code&gt;dummy&lt;/code&gt;) before raising an alert.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Performance Benchmarks
&lt;/h3&gt;

&lt;p&gt;Here is a performance snapshot comparing Sentinel v2.0.5 against Gitleaks and TruffleHog on standard hardware (octa-core ARM64 workstation):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Sentinel v2.0.5&lt;/th&gt;
&lt;th&gt;Gitleaks v8.30.1&lt;/th&gt;
&lt;th&gt;TruffleHog v3.95.7&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Binary Size&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;11.6 MB&lt;/td&gt;
&lt;td&gt;42.5 MB&lt;/td&gt;
&lt;td&gt;185.0 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Peak RAM (RSS)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;11.2 - 11.6 MB&lt;/td&gt;
&lt;td&gt;15.0 - 16.8 MB&lt;/td&gt;
&lt;td&gt;152.9 - 155.7 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Staged File Scan&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;30 - 40 ms&lt;/td&gt;
&lt;td&gt;210 - 220 ms&lt;/td&gt;
&lt;td&gt;7.13 - 11.41 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Git History Scan&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;60 - 140 ms&lt;/td&gt;
&lt;td&gt;160 - 260 ms&lt;/td&gt;
&lt;td&gt;6.32 - 9.05 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dependencies&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;None (Static)&lt;/td&gt;
&lt;td&gt;None (Static)&lt;/td&gt;
&lt;td&gt;Python Runtime&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Quick Start
&lt;/h3&gt;

&lt;p&gt;Sentinel is fully self-contained and has native support for Linux, macOS, and Android/Termux.&lt;/p&gt;

&lt;p&gt;You can install it directly via Go:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go &lt;span class="nb"&gt;install &lt;/span&gt;https://github.com/sentinel-cli/sentinel/v2/cmd/sentinel@latest

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or download the pre-compiled binary for your architecture from our releases page, then protect your repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Initialize the pre-commit hook in the current repository&lt;/span&gt;
sentinel &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# Or set it up globally for all future repositories&lt;/span&gt;
sentinel &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--global&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Looking for Feedback
&lt;/h3&gt;

&lt;p&gt;We would love to hear your feedback on the architecture, custom rule compiler, or general implementation. The repository is open-source under the AGPLv3 license.&lt;br&gt;
Project repository: &lt;a href="https://github.com/sentinel-cli/sentinel" rel="noopener noreferrer"&gt;https://github.com/sentinel-cli/sentinel&lt;/a&gt;&lt;br&gt;
Thank you for your time, and I look forward to your suggestions!&lt;/p&gt;

</description>
      <category>go</category>
      <category>performance</category>
      <category>security</category>
      <category>showdev</category>
    </item>
    <item>
      <title>.</title>
      <dc:creator>Khaled Hani</dc:creator>
      <pubDate>Mon, 06 Jul 2026 19:47:04 +0000</pubDate>
      <link>https://dev.to/muslimkh09/-3g00</link>
      <guid>https://dev.to/muslimkh09/-3g00</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/muslimkh09/i-built-sentinel-a-blazing-fast-regex-free-secret-scanner-in-go-3amm" class="crayons-story__hidden-navigation-link"&gt;I built Sentinel: A blazing fast, regex-free secret scanner in Go 🛡️&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/muslimkh09" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F4005995%2F9a10ea3b-1153-4a7d-ac24-4bc2f25aae37.jpg" alt="muslimkh09 profile" class="crayons-avatar__image" width="460" height="460"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/muslimkh09" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Khaled Hani
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Khaled Hani
                
              
              &lt;div id="story-author-preview-content-4009361" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/muslimkh09" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F4005995%2F9a10ea3b-1153-4a7d-ac24-4bc2f25aae37.jpg" class="crayons-avatar__image" alt="" width="460" height="460"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Khaled Hani&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/muslimkh09/i-built-sentinel-a-blazing-fast-regex-free-secret-scanner-in-go-3amm" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 28&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/muslimkh09/i-built-sentinel-a-blazing-fast-regex-free-secret-scanner-in-go-3amm" id="article-link-4009361"&gt;
          I built Sentinel: A blazing fast, regex-free secret scanner in Go 🛡️
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/showdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;showdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/go"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;go&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/performance"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;performance&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/security"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;security&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/muslimkh09/i-built-sentinel-a-blazing-fast-regex-free-secret-scanner-in-go-3amm" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt;&amp;nbsp;reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/muslimkh09/i-built-sentinel-a-blazing-fast-regex-free-secret-scanner-in-go-3amm#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            1 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Khaled Hani</dc:creator>
      <pubDate>Mon, 06 Jul 2026 07:58:25 +0000</pubDate>
      <link>https://dev.to/muslimkh09/-37ak</link>
      <guid>https://dev.to/muslimkh09/-37ak</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/muslimkh09/i-built-sentinel-a-blazing-fast-regex-free-secret-scanner-in-go-3amm" class="crayons-story__hidden-navigation-link"&gt;I built Sentinel: A blazing fast, regex-free secret scanner in Go 🛡️&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/muslimkh09" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F4005995%2F9a10ea3b-1153-4a7d-ac24-4bc2f25aae37.jpg" alt="muslimkh09 profile" class="crayons-avatar__image" width="460" height="460"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/muslimkh09" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Khaled Hani
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Khaled Hani
                
              
              &lt;div id="story-author-preview-content-4009361" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/muslimkh09" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F4005995%2F9a10ea3b-1153-4a7d-ac24-4bc2f25aae37.jpg" class="crayons-avatar__image" alt="" width="460" height="460"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Khaled Hani&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/muslimkh09/i-built-sentinel-a-blazing-fast-regex-free-secret-scanner-in-go-3amm" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 28&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/muslimkh09/i-built-sentinel-a-blazing-fast-regex-free-secret-scanner-in-go-3amm" id="article-link-4009361"&gt;
          I built Sentinel: A blazing fast, regex-free secret scanner in Go 🛡️
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/showdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;showdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/go"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;go&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/performance"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;performance&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/security"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;security&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/muslimkh09/i-built-sentinel-a-blazing-fast-regex-free-secret-scanner-in-go-3amm" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt;&amp;nbsp;reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/muslimkh09/i-built-sentinel-a-blazing-fast-regex-free-secret-scanner-in-go-3amm#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            1 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>I built Sentinel: A blazing fast, regex-free secret scanner in Go 🛡️</title>
      <dc:creator>Khaled Hani</dc:creator>
      <pubDate>Sun, 28 Jun 2026 02:55:34 +0000</pubDate>
      <link>https://dev.to/muslimkh09/i-built-sentinel-a-blazing-fast-regex-free-secret-scanner-in-go-3amm</link>
      <guid>https://dev.to/muslimkh09/i-built-sentinel-a-blazing-fast-regex-free-secret-scanner-in-go-3amm</guid>
      <description>&lt;p&gt;If you’ve ever used standard secret scanners (like Gitleaks or TruffleHog) in a heavy CI/CD pipeline, you’ve probably hit the "Catastrophic Backtracking" wall. A massive minified JS file slips in, the regex engine chokes, and your pipeline freezes.&lt;/p&gt;

&lt;p&gt;I got extremely frustrated with the performance bottlenecks and false positives, so I decided to rewrite the architecture from scratch.&lt;/p&gt;

&lt;p&gt;Meet &lt;strong&gt;&lt;a href="https://github.com/sentinel-cli/sentinel" rel="noopener noreferrer"&gt;Sentinel&lt;/a&gt;&lt;/strong&gt;, an enterprise-grade, ultra-fast pre-commit scanner written in Go.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔥 How it’s different:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Aho-Corasick Engine:&lt;/strong&gt; Instead of relying purely on Regex, the core engine uses an Aho-Corasick automaton. It scans massive payloads in strict &lt;code&gt;O(n)&lt;/code&gt; linear time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pre-Decoding Layer:&lt;/strong&gt; It detects Base64 strings in-memory, decodes them dynamically, and feeds them back into the entropy pipeline to catch nested K8s/GCP keys.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blob Aggregation:&lt;/strong&gt; Multi-line certs (like JKS or PEM) are aggregated into a single &lt;code&gt;CRITICAL&lt;/code&gt; alert instead of blasting you with 50 lines of fragmented noise.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;100% Silent:&lt;/strong&gt; Zero "skipping binary file" logs. It acts as a true silent guardian—natively using &lt;code&gt;git ls-files&lt;/code&gt; for traversal.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  📊 The Doomsday Benchmark
&lt;/h3&gt;

&lt;p&gt;I built a "Doomsday Payload" (15MB of compressed minified strings mixed with 100+ structural baits like &lt;code&gt;UPPER_SNAKE_CASE&lt;/code&gt; constants). &lt;br&gt;
&lt;strong&gt;Result:&lt;/strong&gt; Sentinel ripped through it in ~1.5s with a flawless 100% signal-to-noise ratio.&lt;/p&gt;

&lt;p&gt;It is fully open-source under the AGPL-3.0 license. I'd love for the community to try it out, read the code, and give me some harsh feedback!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repo:&lt;/strong&gt; &lt;a href="https://github.com/sentinel-cli/sentinel" rel="noopener noreferrer"&gt;https://github.com/sentinel-cli/sentinel&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>performance</category>
      <category>security</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
