<?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: Sadiqur Rahman</title>
    <description>The latest articles on DEV Community by Sadiqur Rahman (@sadiqbd).</description>
    <link>https://dev.to/sadiqbd</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%2F3947778%2F93d79c39-4956-40fc-a321-eb3c3b14cba2.png</url>
      <title>DEV Community: Sadiqur Rahman</title>
      <link>https://dev.to/sadiqbd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sadiqbd"/>
    <language>en</language>
    <item>
      <title>Your Password Strategy Is Probably Broken. Here's What Actually Works.</title>
      <dc:creator>Sadiqur Rahman</dc:creator>
      <pubDate>Wed, 17 Jun 2026 15:44:38 +0000</pubDate>
      <link>https://dev.to/sadiqbd/your-password-strategy-is-probably-broken-heres-what-actually-works-45en</link>
      <guid>https://dev.to/sadiqbd/your-password-strategy-is-probably-broken-heres-what-actually-works-45en</guid>
      <description>&lt;p&gt;Let me guess your password strategy.&lt;/p&gt;

&lt;p&gt;You have a "base" password — something memorable, maybe with a capital letter and a number at the end — and you reuse it across most sites with minor variations. &lt;code&gt;MyDog2019!&lt;/code&gt; here, &lt;code&gt;MyDog2019#&lt;/code&gt; there. Maybe you add the site name somewhere: &lt;code&gt;MyDogNetflix2019!&lt;/code&gt;. Feels secure because it's complex. Feels manageable because you can actually remember it.&lt;/p&gt;

&lt;p&gt;This strategy is broken. Not "slightly suboptimal" broken. Actually broken, in ways that have real consequences.&lt;/p&gt;

&lt;p&gt;Here's why — and more importantly, here's what the alternative actually looks like in practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem With Memorable Passwords
&lt;/h2&gt;

&lt;p&gt;Memorable passwords have one fatal flaw: they're guessable. Not necessarily by someone who knows you personally, but by the automated systems that attackers use to crack passwords at scale.&lt;/p&gt;

&lt;p&gt;When a database gets breached — and breaches happen constantly, to companies you've definitely used — the stolen password hashes get fed into cracking tools that try billions of combinations per second. These tools don't guess randomly. They use wordlists, common patterns, known password formats, and permutations of all of the above.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;MyDog2019!&lt;/code&gt; isn't in a wordlist literally. But "common word + year + symbol" is absolutely a pattern these tools know about. They'll try every word in a dictionary combined with every year from 1950 to 2030 combined with every common symbol. Your password gets cracked. And because you reused variations of it, multiple accounts go down at once.&lt;/p&gt;

&lt;p&gt;The other problem: sites you used five years ago that got breached five years ago are still circulating in credential dumps. Your old password — even if you've changed it on the big sites — might still be working credentials on some forum you signed up for once and forgot about. Attackers try those credentials against every major service automatically. This is called credential stuffing, and it works surprisingly often.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "Actually Secure" Looks Like
&lt;/h2&gt;

&lt;p&gt;A genuinely secure password has three properties:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Long.&lt;/strong&gt; Length beats complexity every time. &lt;code&gt;correct-horse-battery-staple&lt;/code&gt; is harder to crack than &lt;code&gt;P@ssw0rd!&lt;/code&gt; despite being easier to type, purely because of length. The math on brute force attacks makes longer passwords exponentially harder to crack regardless of character set. Most security researchers now recommend 16+ characters as a minimum for anything important.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Random.&lt;/strong&gt; Not "random-ish" — actually random. Human-generated "random" passwords have patterns. We gravitate toward certain characters, avoid others, put numbers at the end, capitalize the first letter. Real randomness comes from a cryptographically secure random number generator, not from a human trying to think of something unpredictable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unique.&lt;/strong&gt; One password per site, no exceptions. This is the one people resist most because it seems impossible to manage. It's not impossible — it just requires a password manager, which we'll get to.&lt;/p&gt;

&lt;h2&gt;
  
  
  Generate One Right Now
&lt;/h2&gt;

&lt;p&gt;The free Password Generator at &lt;a href="https://sadiqbd.com/developer/password-generator" rel="noopener noreferrer"&gt;sadiqbd.com/developer/password-generator&lt;/a&gt; creates cryptographically random passwords instantly — you set the length, choose which character types to include (uppercase, lowercase, numbers, symbols), and it generates a genuinely random password client-side in your browser. Nothing gets sent to a server. Nothing gets logged.&lt;/p&gt;

&lt;p&gt;Try generating a few 20-character passwords and notice something: they look completely different from anything you'd ever come up with yourself. No recognizable words, no patterns, no structure your brain would naturally produce. That's exactly the point. That randomness is what makes them secure.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Character Set Question
&lt;/h2&gt;

&lt;p&gt;People agonize over which characters to include and the answer is: as many as the site allows, within reason.&lt;/p&gt;

&lt;p&gt;Uppercase + lowercase + numbers gives you a character set of 62. Add symbols and you're at 94+. Every character you add multiplies the total possible combinations. For a 16-character password, the difference between a 62-character set and a 94-character set is massive — billions of times more combinations.&lt;/p&gt;

&lt;p&gt;The practical caveat: some sites have terrible password policies that limit length (anything under 16 characters is a red flag in 2026) or ban certain symbols (another red flag — it often means they're storing passwords in a way that makes certain characters problematic, which suggests their password handling is suspect). Work with what the site allows, but if a site caps you at 8 characters or bans symbols, that's worth noting as a signal about their security practices.&lt;/p&gt;

&lt;h2&gt;
  
  
  You Need a Password Manager. Full Stop.
&lt;/h2&gt;

&lt;p&gt;Here's the part people always push back on: "I can't remember random unique passwords for every site."&lt;/p&gt;

&lt;p&gt;Correct. You're not supposed to. That's what a password manager is for.&lt;/p&gt;

&lt;p&gt;A password manager stores all your passwords encrypted behind one master password. You remember one strong passphrase — something long and memorable, like &lt;code&gt;correct-horse-battery-staple&lt;/code&gt; style — and the manager handles everything else. It generates passwords, stores them, and autofills them. You never have to type &lt;code&gt;MyDog2019!&lt;/code&gt; again.&lt;/p&gt;

&lt;p&gt;Good options that are widely used: Bitwarden (open source, free tier is genuinely good), 1Password (excellent UX, paid), KeePassXC (fully local, nothing in the cloud). Each has tradeoffs but all of them are dramatically better than the alternative.&lt;/p&gt;

&lt;p&gt;The common objection is "what if the password manager gets breached?" It's a fair concern. The answer: reputable password managers store an encrypted vault, not plain-text passwords. Even if their servers get breached, what attackers get is your encrypted vault, which is useless without your master password. Bitwarden has had a security audit. 1Password has had security audits. Compare this to your current strategy, where a breach of one site potentially exposes variations of your password across dozens of others.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two-Factor Authentication Changes the Math
&lt;/h2&gt;

&lt;p&gt;Even a weak password becomes dramatically harder to exploit if you have 2FA enabled. Even a strong password benefits from 2FA as a backup.&lt;/p&gt;

&lt;p&gt;The hierarchy, roughly:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Unique strong password + 2FA (authenticator app, not SMS) — excellent&lt;/li&gt;
&lt;li&gt;Unique strong password, no 2FA — good&lt;/li&gt;
&lt;li&gt;Reused password + 2FA — mediocre (credential stuffing still works until 2FA catches it)&lt;/li&gt;
&lt;li&gt;Reused password, no 2FA — what most people are actually doing, what attackers rely on&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;SMS 2FA is better than nothing but has real weaknesses — SIM swapping attacks can intercept SMS codes. An authenticator app (Google Authenticator, Authy, or built into your password manager) is meaningfully more secure than SMS.&lt;/p&gt;

&lt;h2&gt;
  
  
  For Developers Specifically
&lt;/h2&gt;

&lt;p&gt;If you're building something, a few things that matter here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Never roll your own password hashing.&lt;/strong&gt; Use bcrypt, Argon2, or scrypt. Not SHA-256, not MD5, not any fast hashing algorithm — those are designed to be fast, which is exactly wrong for password hashing. You want slow. The sadiqbd toolkit has a &lt;a href="https://sadiqbd.com/developer/bcrypt-generator" rel="noopener noreferrer"&gt;Bcrypt Generator&lt;/a&gt; if you need to test hash outputs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enforce reasonable password policies without being annoying.&lt;/strong&gt; Minimum 12 characters, allow all printable ASCII, don't force regular rotation (forced rotation leads to weaker passwords, not stronger ones — NIST updated their guidelines on this years ago). Don't cap length at 20 or 32 characters — there's no technical reason to do this and it penalizes password managers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check against known breached passwords.&lt;/strong&gt; The HaveIBeenPwned API (haveibeenpwned.com/API) lets you check if a password appears in known breach data without sending the actual password. It uses a k-anonymity model — you send the first 5 characters of the password's SHA-1 hash, get back a list of matching hashes, and check locally. Integrating this into your signup flow costs maybe an hour of work and meaningfully improves your users' security posture.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;Password security isn't complicated in theory. Long, random, unique passwords managed by a password manager, with 2FA on everything that supports it. That's the whole strategy.&lt;/p&gt;

&lt;p&gt;The gap between knowing this and actually doing it is mostly inertia. The password manager setup takes an afternoon. Migrating your existing passwords happens gradually as you visit sites. Within a month you're essentially fully migrated without it feeling like a big project.&lt;/p&gt;

&lt;p&gt;Start by generating a few passwords at &lt;a href="https://sadiqbd.com/developer/password-generator" rel="noopener noreferrer"&gt;sadiqbd.com/developer/password-generator&lt;/a&gt; to see what genuinely random looks like. Then pick a password manager and set it up this week. Future you — especially future you dealing with a compromised account at the worst possible time — will appreciate it.&lt;/p&gt;

</description>
      <category>security</category>
      <category>webdev</category>
      <category>programming</category>
      <category>developer</category>
    </item>
    <item>
      <title>Stop Guessing Your Regex — Test It Live in the Browser</title>
      <dc:creator>Sadiqur Rahman</dc:creator>
      <pubDate>Sat, 23 May 2026 14:24:08 +0000</pubDate>
      <link>https://dev.to/sadiqbd/stop-guessing-your-regex-test-it-live-in-the-browser-20p2</link>
      <guid>https://dev.to/sadiqbd/stop-guessing-your-regex-test-it-live-in-the-browser-20p2</guid>
      <description>&lt;p&gt;Regular expressions are one of those things every developer knows they need but nobody enjoys writing blind. You craft a pattern, drop it into your code, run it, and it either matches nothing or matches everything. Then you tweak it, run it again, and repeat until something works.&lt;/p&gt;

&lt;p&gt;There is a faster way.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem With Writing Regex in Your Code Editor
&lt;/h2&gt;

&lt;p&gt;When you write regex directly in your code, you have no feedback loop. You write the pattern, write a test string, run the whole program, and check the output. If it is wrong, you tweak and repeat. This loop is slow, especially for complex patterns matching emails, URLs, dates, or log formats.&lt;/p&gt;

&lt;p&gt;What you actually need is a live sandbox — type a pattern, type a string, and see matches highlighted in real time. That is exactly what a browser-based regex tester gives you.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tool: &lt;a href="https://sadiqbd.com/developer/regex-tester" rel="noopener noreferrer"&gt;Regex tester&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;The Regex Tester at &lt;a href="https://sadiqbd.com/developer/regex-tester" rel="noopener noreferrer"&gt;sadiqbd.com/developer/regex-tester&lt;/a&gt; is a free, instant, browser-based tool that gives you live feedback as you type — no setup, no login, no ads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live match highlighting.&lt;/strong&gt; As you type your pattern and test string, matches are highlighted instantly. You see exactly what your regex captures in real time, not after running a script.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flag support.&lt;/strong&gt; Toggle common regex flags directly in the tool — &lt;code&gt;g&lt;/code&gt; for global, &lt;code&gt;i&lt;/code&gt; for case-insensitive, &lt;code&gt;m&lt;/code&gt; for multiline, &lt;code&gt;s&lt;/code&gt; for dotall. No need to remember the syntax for each language.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Match details.&lt;/strong&gt; The tool shows you each match, its position in the string, and any captured groups. This is invaluable when debugging complex patterns with multiple capture groups.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Runs entirely in the browser.&lt;/strong&gt; No data is sent to any server. Paste sensitive log data or real strings without worry.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Regex Use Cases You Can Test Right Now
&lt;/h2&gt;

&lt;p&gt;Here are patterns worth testing in the tool:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Email validation&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,}$
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;URL matching&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_+.~#?&amp;amp;/=]*)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Extract dates in YYYY-MM-DD format&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\d{4}-\d{2}-\d{2}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Match IP addresses&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Remove extra whitespace&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\s{2,}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paste any of these into &lt;a href="https://sadiqbd.com/developer/regex-tester" rel="noopener noreferrer"&gt;sadiqbd.com/developer/regex-tester&lt;/a&gt; and test them against your own strings instantly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Regex Flags Explained
&lt;/h2&gt;

&lt;p&gt;If you have ever been confused by regex flags, here is a quick reference:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Flag&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;g&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Global — find all matches, not just the first&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;i&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Case-insensitive — &lt;code&gt;A&lt;/code&gt; matches &lt;code&gt;a&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;m&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Multiline — &lt;code&gt;^&lt;/code&gt; and &lt;code&gt;$&lt;/code&gt; match start/end of each line&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;s&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Dotall — &lt;code&gt;.&lt;/code&gt; matches newline characters too&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The sadiqbd regex tester lets you toggle these with checkboxes so you can see the difference immediately without rewriting your pattern.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decoding vs. Debugging Regex
&lt;/h2&gt;

&lt;p&gt;There are two things a regex tester helps you with that are easy to confuse.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Testing&lt;/strong&gt; means checking if a pattern matches a string. You have a pattern in mind and you want to confirm it works on your input.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Debugging&lt;/strong&gt; means figuring out why a pattern is not matching what you expect. This is where live highlighting is critical — you can see exactly where the match stops and why.&lt;/p&gt;

&lt;p&gt;Both are equally important, and both are faster with a visual tool than with trial-and-error in code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other Developer Tools on sadiqbd.com
&lt;/h2&gt;

&lt;p&gt;The Regex Tester is part of a broader free developer toolkit at &lt;a href="https://sadiqbd.com/developer" rel="noopener noreferrer"&gt;sadiqbd.com/developer&lt;/a&gt;. A few others worth bookmarking:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sadiqbd.com/developer/jwt-decoder" rel="noopener noreferrer"&gt;JWT Decoder&lt;/a&gt; — decode and inspect JSON Web Tokens instantly, with expiry status&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sadiqbd.com/developer/json-formatter" rel="noopener noreferrer"&gt;JSON Formatter&lt;/a&gt; — prettify and validate JSON in one click&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sadiqbd.com/developer/base64" rel="noopener noreferrer"&gt;Base64 Encoder/Decoder&lt;/a&gt; — encode or decode Base64 strings without a terminal&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sadiqbd.com/developer/hash-generator" rel="noopener noreferrer"&gt;Hash Generator&lt;/a&gt; — generate MD5, SHA-1, SHA-256, SHA-512 hashes instantly&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sadiqbd.com/developer/timestamp-converter" rel="noopener noreferrer"&gt;Timestamp Converter&lt;/a&gt; — convert Unix timestamps to human-readable dates and back&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sadiqbd.com/developer/uuid-generator" rel="noopener noreferrer"&gt;UUID Generator&lt;/a&gt; — generate RFC 4122-compliant UUIDs on demand&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sadiqbd.com/developer/cron-explainer" rel="noopener noreferrer"&gt;Cron Explainer&lt;/a&gt; — paste a cron expression and get a plain-English explanation&lt;/p&gt;

&lt;p&gt;All free, all instant, no account required. Full collection at &lt;a href="https://sadiqbd.com" rel="noopener noreferrer"&gt;sadiqbd.com&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;Next time you are writing a regex pattern, do not test it blind inside your code. Open &lt;a href="https://sadiqbd.com/developer/regex-tester" rel="noopener noreferrer"&gt;sadiqbd.com/developer/regex-tester&lt;/a&gt;, paste your pattern and test string, and see matches highlighted live.&lt;/p&gt;

&lt;p&gt;It takes ten seconds and saves you from a debugging loop that could take ten minutes.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
