<?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: Andrew</title>
    <description>The latest articles on DEV Community by Andrew (@andrew_hayes).</description>
    <link>https://dev.to/andrew_hayes</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%2F3931358%2F65789c17-298b-4a3b-890c-6eb87047fcac.jpeg</url>
      <title>DEV Community: Andrew</title>
      <link>https://dev.to/andrew_hayes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/andrew_hayes"/>
    <language>en</language>
    <item>
      <title>Stop Guessing — 7 Signals That Prove Your Users Are Being Hacked</title>
      <dc:creator>Andrew</dc:creator>
      <pubDate>Thu, 14 May 2026 16:08:57 +0000</pubDate>
      <link>https://dev.to/andrew_hayes/stop-guessing-7-signals-that-prove-your-users-are-being-hacked-2cei</link>
      <guid>https://dev.to/andrew_hayes/stop-guessing-7-signals-that-prove-your-users-are-being-hacked-2cei</guid>
      <description>&lt;p&gt;You wake up to a support ticket: "I didn't make this purchase." Then another. Then five more.&lt;/p&gt;

&lt;p&gt;By the time you start investigating, the attacker has already changed the email, drained the balance, and disappeared. Account Takeover is fast, quiet, and increasingly automated.&lt;br&gt;
I've spent a lot of time dealing with these cases, and the pattern is usually the same: the warning signs were there, but nobody was paying attention to them.&lt;/p&gt;

&lt;p&gt;Here are the signals that matter most, along with practical ways to catch them.&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2F77bdwzy9jx1kfgp5kczl.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.amazonaws.com%2Fuploads%2Farticles%2F77bdwzy9jx1kfgp5kczl.png" alt="Attack Lifecycle" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Login patterns that don't make sense
&lt;/h2&gt;

&lt;p&gt;Most users are predictable. They log in from the same city, the same devices, and usually around the same time each day.&lt;/p&gt;

&lt;p&gt;So when an account suddenly shows up from another continent at 3 AM, it's probably not because the user is traveling.&lt;/p&gt;

&lt;p&gt;What to look for in your logs:&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fqolz5j6nej956f4yj1h0.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.amazonaws.com%2Fuploads%2Farticles%2Fqolz5j6nej956f4yj1h0.png" alt="Simple geo-anomaly check" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This check isn't perfect. VPNs, mobile networks, and corporate proxies can all create false positives.&lt;/p&gt;

&lt;p&gt;Still, impossible travel detection catches more real attacks than you'd expect, especially when combined with other signals. It's one of the simplest high-value checks you can add.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Failed logins that look automated
&lt;/h2&gt;

&lt;p&gt;People forget their passwords all the time. But there's a big difference between someone mistyping a password a few times and a bot trying thousands of leaked credentials.&lt;/p&gt;

&lt;p&gt;In your auth logs, automated attacks usually look like this:&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fl8ark5hp2ikr2y9sy0e4.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.amazonaws.com%2Fuploads%2Farticles%2Fl8ark5hp2ikr2y9sy0e4.png" alt="Real failed login pattern from a credential stuffing attack" width="800" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Humans don't behave like this.&lt;/p&gt;

&lt;p&gt;These patterns are a strong signal of credential stuffing: fast attempts, consistent timing, and multiple accounts targeted from the same source.&lt;/p&gt;

&lt;p&gt;The catch is that real attackers rarely stay this simple. They rotate IPs and spread attempts across proxy networks, so per-IP rate limiting quickly loses effectiveness.&lt;/p&gt;

&lt;p&gt;To catch this reliably, you need to look at behavior across time and traffic patterns, not just individual IPs.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The account suddenly changes behavior
&lt;/h2&gt;

&lt;p&gt;This one is subtle, but surprisingly reliable.&lt;/p&gt;

&lt;p&gt;A user spends months casually browsing products, then one day logs in and immediately goes to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Settings&lt;/li&gt;
&lt;li&gt;Change Email&lt;/li&gt;
&lt;li&gt;Change Password&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All within 90 seconds.&lt;/p&gt;

&lt;p&gt;That's usually not normal user behavior. It's often someone who just gained access and is trying to lock the real owner out before they're noticed.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. The device fingerprint doesn't add up
&lt;/h2&gt;

&lt;p&gt;Automated tools and fake browsers usually leave small inconsistencies behind.&lt;/p&gt;

&lt;p&gt;Maybe the browser claims to run on macOS, but the WebGL data looks like Linux. Or the session has no plugins, a suspiciously generic screen resolution, and other unusually “clean” signals.&lt;/p&gt;

&lt;p&gt;Common red flags:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Timezone doesn't match IP location&lt;/li&gt;
&lt;li&gt;WebGL data doesn't match the claimed OS&lt;/li&gt;
&lt;li&gt;No browser plugins at all&lt;/li&gt;
&lt;li&gt;Unrealistic screen resolution or color depth&lt;/li&gt;
&lt;/ul&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fwsh6bjyjm6e46zsnd3jn.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.amazonaws.com%2Fuploads%2Farticles%2Fwsh6bjyjm6e46zsnd3jn.png" alt="Real Browser vs Fake Browser" width="800" height="242"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;None of these mean much by themselves.&lt;/p&gt;

&lt;p&gt;But when multiple anomalies show up in the same session, it's usually a sign that something isn't right.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Someone is phishing your users first
&lt;/h2&gt;

&lt;p&gt;Account Takeover doesn't always start with a technical exploit. Sometimes it starts with a convincing email.&lt;/p&gt;

&lt;p&gt;A user gets a message that looks like it came from your platform:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Suspicious login detected. Verify your account."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;They click the link, enter their credentials on a fake page, and the attacker logs in normally.&lt;/p&gt;

&lt;p&gt;Things worth watching for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Password reset spikes you didn't expect&lt;/li&gt;
&lt;li&gt;Support tickets about emails your team never sent&lt;/li&gt;
&lt;li&gt;Users reporting suspicious calls or messages claiming to be from your company&lt;/li&gt;
&lt;li&gt;Security setting changes immediately after a password reset or suspicious login&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You probably won't stop phishing completely.&lt;/p&gt;

&lt;p&gt;But you can detect what happens next. If an account resets its password, changes the email, and disables 2FA within minutes, that's usually not normal recovery behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Transactions suddenly look different
&lt;/h2&gt;

&lt;p&gt;Once attackers get access, they usually move quickly.&lt;/p&gt;

&lt;p&gt;A user who normally makes one small purchase a month suddenly places several expensive orders within minutes. Or a new payment method gets added and all available credits are used immediately.&lt;/p&gt;

&lt;p&gt;Patterns worth flagging:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1. Payment method changes followed by immediate purchases&lt;/li&gt;
&lt;li&gt;2. Transaction amounts far outside the user's normal range&lt;/li&gt;
&lt;li&gt;3. Rapid use of credits, loyalty points, or gift balances&lt;/li&gt;
&lt;li&gt;4. Shipping address changes right before high-value orders&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Legitimate user behavior is usually gradual and predictable.&lt;/p&gt;

&lt;p&gt;Takeover activity tends to happen in short, aggressive bursts.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. The traffic doesn't look human
&lt;/h2&gt;

&lt;p&gt;Large-scale Account Takeover attacks usually run on infrastructure, not real user devices.&lt;/p&gt;

&lt;p&gt;That often leaves patterns behind: cloud provider IPs, rotating proxy networks, automated browsers, or request timing that looks too consistent to be human.&lt;/p&gt;

&lt;p&gt;Common signals:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logins from data center or cloud provider IPs&lt;/li&gt;
&lt;li&gt;IPs rotating unusually fast&lt;/li&gt;
&lt;li&gt;Browser headers that don't look like normal user traffic&lt;/li&gt;
&lt;li&gt;TLS fingerprints linked to automation tools&lt;/li&gt;
&lt;li&gt;Extremely consistent request timing&lt;/li&gt;
&lt;/ul&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2F22njnui1r7sjyvkwoeg3.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.amazonaws.com%2Fuploads%2Farticles%2F22njnui1r7sjyvkwoeg3.png" alt="Traffic flow diagram — Normal vs Attack" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;None of these signals prove an attack on their own.&lt;/p&gt;

&lt;p&gt;But together, they often point to automated traffic rather than real users.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you actually detect account takeover in real time?
&lt;/h2&gt;

&lt;p&gt;None of these signals work well on their own. A VPN login isn't suspicious by itself. Neither is a password reset. But combine a VPN login, an immediate password change, and a new payment method within 60 seconds, and you start seeing a clear pattern.&lt;/p&gt;

&lt;p&gt;The hard part is correlating everything in real time: login anomalies, device fingerprints, &lt;a href="https://botbye.com/blog/articles/signs-of-an-account-takeover-fraud" rel="noopener noreferrer"&gt;behavioral signals of account takeover&lt;/a&gt;, and bot patterns, across every request, without adding latency or friction for real users.&lt;/p&gt;

&lt;p&gt;These kinds of problems are often handled well by dedicated &lt;a href="https://botbye.com" rel="noopener noreferrer"&gt;bot protection platforms&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What's been your experience with Account Takeover? Any war stories? Drop them in the comments.&lt;/p&gt;

</description>
      <category>security</category>
      <category>webdev</category>
      <category>cybersecurity</category>
    </item>
  </channel>
</rss>
