<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Portreeve — Writing</title>
    <link>https://portreeve.com/blog</link>
    <description>Notes on abuse, fraud, and the gate: what Portreeve sees screening signups, trials, checkouts, and logins for software businesses.</description>
    <language>en</language>
    <item>
      <title>x402 middleware fraud: screening the payer wallet in Hono</title>
      <link>https://portreeve.com/blog/x402-middleware-fraud</link>
      <guid isPermaLink="true">https://portreeve.com/blog/x402-middleware-fraud</guid>
      <description>x402 middleware fraud screening in Hono: decode the payer wallet from PAYMENT-SIGNATURE, score velocity, and block bad payments before they settle on Base.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>WorkOS AuthKit in Next.js 15: middleware, callback, and the cookie error</title>
      <link>https://portreeve.com/blog/workos-authkit-next-js</link>
      <guid isPermaLink="true">https://portreeve.com/blog/workos-authkit-next-js</guid>
      <description>WorkOS AuthKit Next.js 15 setup: env vars, authkitMiddleware, the /callback route, sign-out, and the exact fix for the cookies-can-only-be-modified error.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Subscription fraud: stolen cards, trial churn, shared seats</title>
      <link>https://portreeve.com/blog/subscription-fraud</link>
      <guid isPermaLink="true">https://portreeve.com/blog/subscription-fraud</guid>
      <description>Subscription fraud is three attacks with one name. How stolen-card trials, trial-to-chargeback and shared seats differ, and which event exposes each one.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Stripe webhook signature verification without the raw-body bug</title>
      <link>https://portreeve.com/blog/stripe-webhook-signature-verification</link>
      <guid isPermaLink="true">https://portreeve.com/blog/stripe-webhook-signature-verification</guid>
      <description>Stripe webhook signature verification fails when a body parser rewrites the bytes. Raw-body fix for Express and Next.js, plus replay and retry handling.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Stripe test mode: cards, clocks, disputes, and webhooks</title>
      <link>https://portreeve.com/blog/stripe-test-mode</link>
      <guid isPermaLink="true">https://portreeve.com/blog/stripe-test-mode</guid>
      <description>A working sequence for Stripe test mode: which test card fires which decline, how to land a dispute, advance a trial with a test clock, forward webhooks.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Stripe SetupIntent trials and the $0 auth that leaks</title>
      <link>https://portreeve.com/blog/stripe-setupintent</link>
      <guid isPermaLink="true">https://portreeve.com/blog/stripe-setupintent</guid>
      <description>Save a card at trial start with a Stripe SetupIntent, charge it off-session when the trial ends, and stop the card testing a card-on-file form invites.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Writing Stripe Radar rules for a small SaaS</title>
      <link>https://portreeve.com/blog/stripe-radar-rules</link>
      <guid isPermaLink="true">https://portreeve.com/blog/stripe-radar-rules</guid>
      <description>Stripe Radar rules syntax, evaluation order, and the traps that make a rule match nothing, with paste-ready block and review rules for a SaaS product.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Stripe metadata: link every PaymentIntent to your records</title>
      <link>https://portreeve.com/blog/stripe-metadata</link>
      <guid isPermaLink="true">https://portreeve.com/blog/stripe-metadata</guid>
      <description>Stripe metadata is the join key between your database and Stripe. Write your ids at creation time, read them back in webhooks, and refund the right charge.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Stripe idempotency keys: what they dedupe and how to derive them</title>
      <link>https://portreeve.com/blog/stripe-idempotency-key</link>
      <guid isPermaLink="true">https://portreeve.com/blog/stripe-idempotency-key</guid>
      <description>A Stripe idempotency key dedupes one request for 24 hours, not one order. Derive it from the attempt, handle the mismatch error, and stop double charges.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Turn a Stripe dispute webhook into fraud feedback</title>
      <link>https://portreeve.com/blog/stripe-dispute-webhook-fraud-feedback</link>
      <guid isPermaLink="true">https://portreeve.com/blog/stripe-dispute-webhook-fraud-feedback</guid>
      <description>A Stripe dispute webhook that becomes fraud feedback: verify the signature, resolve the charge to a user, report the chargeback, and stop the next signup.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Stripe decline codes, and which ones mean card testing</title>
      <link>https://portreeve.com/blog/stripe-decline-codes</link>
      <guid isPermaLink="true">https://portreeve.com/blog/stripe-decline-codes</guid>
      <description>A lookup table of Stripe decline codes, what each means, what to show the customer, and the code mix that signals card testing rather than plain bad luck.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Return fraud: why the same person returns as a new account</title>
      <link>https://portreeve.com/blog/return-fraud</link>
      <guid isPermaLink="true">https://portreeve.com/blog/return-fraud</guid>
      <description>Return fraud is an identity problem dressed as a policy problem. How wardrobing, empty-box claims and serial returners work, and how to link the repeaters.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Resend API from Node: verify, send, don&apos;t send twice</title>
      <link>https://portreeve.com/blog/resend-api</link>
      <guid isPermaLink="true">https://portreeve.com/blog/resend-api</guid>
      <description>Wire the Resend API into Node: DNS records that verify a domain, a raw fetch send, idempotency keys so retries don&apos;t duplicate, and signed bounce webhooks.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Refund abuse in SaaS: write the policy first</title>
      <link>https://portreeve.com/blog/refund-abuse</link>
      <guid isPermaLink="true">https://portreeve.com/blog/refund-abuse</guid>
      <description>Refund abuse in SaaS is usually a policy problem, not a detection one. How to bound a money-back guarantee and spot the same person on their second pass.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Real time fraud detection: what fits in 100 ms at checkout</title>
      <link>https://portreeve.com/blog/real-time-fraud-detection</link>
      <guid isPermaLink="true">https://portreeve.com/blog/real-time-fraud-detection</guid>
      <description>Real time fraud detection is a latency budget plus a fail-open policy. What you can compute in under 100 ms, what belongs in a queue, and how to wire it.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Promo code abuse: why single-use codes don&apos;t stop it</title>
      <link>https://portreeve.com/blog/promo-code-abuse</link>
      <guid isPermaLink="true">https://portreeve.com/blog/promo-code-abuse</guid>
      <description>Promo code abuse is a multi-account problem: why single-use codes, per-email limits and card gates fail, and how to link the accounts behind the farming.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Hono middleware: the onion model, with a screening example</title>
      <link>https://portreeve.com/blog/hono-middleware</link>
      <guid isPermaLink="true">https://portreeve.com/blog/hono-middleware</guid>
      <description>How Hono middleware works: what await next() does to the response, where per-request state lives, why a Map counter lies on Workers, and safe timeouts.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>First-party fraud: when the fraudster is your real customer</title>
      <link>https://portreeve.com/blog/first-party-fraud</link>
      <guid isPermaLink="true">https://portreeve.com/blog/first-party-fraud</guid>
      <description>First-party fraud is your own customer abusing your product with their real name, real card, and real device. Why fraud scores miss it and what stops it.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Fake accounts: mostly one person, many identities</title>
      <link>https://portreeve.com/blog/fake-accounts</link>
      <guid isPermaLink="true">https://portreeve.com/blog/fake-accounts</guid>
      <description>Most fake accounts are not bots. They are one person on their eleventh identity. How the three populations separate, and the queries that tell them apart.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Express rate limit: from the memory store to Redis</title>
      <link>https://portreeve.com/blog/express-rate-limit</link>
      <guid isPermaLink="true">https://portreeve.com/blog/express-rate-limit</guid>
      <description>Set up an express rate limit in five lines, move the counter to Redis so it survives multiple instances, and key it on the API key instead of the raw IP.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Drizzle migrations on Railway Postgres, from generate to deploy</title>
      <link>https://portreeve.com/blog/drizzle-migrations</link>
      <guid isPermaLink="true">https://portreeve.com/blog/drizzle-migrations</guid>
      <description>How drizzle migrations really work, where to run drizzle-kit migrate on Railway, why a redeploy skips your new SQL, and how to roll back with no down file.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>How to detect card testing on Stripe before the PaymentIntent is created</title>
      <link>https://portreeve.com/blog/detect-card-testing-stripe</link>
      <guid isPermaLink="true">https://portreeve.com/blog/detect-card-testing-stripe</guid>
      <description>Detect card testing on Stripe with a server-side check on the card fingerprint before you create the PaymentIntent, plus the webhook that refunds a deny.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Detect account takeover at login without locking users out</title>
      <link>https://portreeve.com/blog/detect-account-takeover-login</link>
      <guid isPermaLink="true">https://portreeve.com/blog/detect-account-takeover-login</guid>
      <description>Detect account takeover at login with a Node risk check that steps up MFA on suspicious sign-ins and blocks only high-confidence attempts, not travelers.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>How to add Cloudflare Turnstile to a signup form (and what it won&apos;t stop)</title>
      <link>https://portreeve.com/blog/cloudflare-turnstile</link>
      <guid isPermaLink="true">https://portreeve.com/blog/cloudflare-turnstile</guid>
      <description>Add Cloudflare Turnstile to a signup form in an hour: widget modes, React render, siteverify in Node, the error codes, and the fake signups it cannot see.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>A chargeback for fraud usually isn&apos;t: what Visa 10.4 means</title>
      <link>https://portreeve.com/blog/chargeback-for-fraud</link>
      <guid isPermaLink="true">https://portreeve.com/blog/chargeback-for-fraud</guid>
      <description>A chargeback for fraud means the cardholder tapped &apos;I didn&apos;t authorize this.&apos; What Visa 10.4 lets you argue, and the logging that decides it months ahead.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>A card testing attack example: 75,000 cards, 28 days, zero sales</title>
      <link>https://portreeve.com/blog/card-testing-attack-example</link>
      <guid isPermaLink="true">https://portreeve.com/blog/card-testing-attack-example</guid>
      <description>A card testing attack example from a public Hacker News thread: 75,000 tokens created in 28 days, no sales, no alert, and where the Radar bill comes from.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>How to add device fingerprinting to a signup form</title>
      <link>https://portreeve.com/blog/add-device-fingerprinting-signup</link>
      <guid isPermaLink="true">https://portreeve.com/blog/add-device-fingerprinting-signup</guid>
      <description>Add device fingerprinting to a signup form: collect a short-lived token in the browser, pass it through on the server, and prove the device key landed.</description>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>How to stop free trial abuse in a Next.js app</title>
      <link>https://portreeve.com/blog/stop-free-trial-abuse-next-js</link>
      <guid isPermaLink="true">https://portreeve.com/blog/stop-free-trial-abuse-next-js</guid>
      <description>Stop free trial abuse in a Next.js app: screen the signup in an App Router route handler, collect a device token, and revoke denied accounts by webhook.</description>
      <pubDate>Sun, 06 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Handle a fraud review webhook and revoke an account</title>
      <link>https://portreeve.com/blog/fraud-review-webhook-revoke-account</link>
      <guid isPermaLink="true">https://portreeve.com/blog/fraud-review-webhook-revoke-account</guid>
      <description>A fraud review webhook denies an account: verify the signature over the raw body, find the user, revoke idempotently, and answer 200 before the retry.</description>
      <pubDate>Sun, 06 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Express signup fraud middleware that fails open</title>
      <link>https://portreeve.com/blog/express-signup-fraud-middleware</link>
      <guid isPermaLink="true">https://portreeve.com/blog/express-signup-fraud-middleware</guid>
      <description>Build Express signup fraud middleware that screens every signup in under 100 ms, fails open on timeout, and hands allow, review or block to your route.</description>
      <pubDate>Sun, 06 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Stripe chargebacks: what happens after the dispute lands</title>
      <link>https://portreeve.com/blog/stripe-chargebacks</link>
      <guid isPermaLink="true">https://portreeve.com/blog/stripe-chargebacks</guid>
      <description>How Stripe chargebacks run from early fraud warning to lost funds, what the $15 fee covers, when evidence is worth it, and how to keep the disputer out.</description>
      <pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Shopify chargebacks: what the fraud analysis saw, and what it didn&apos;t</title>
      <link>https://portreeve.com/blog/shopify-chargebacks</link>
      <guid isPermaLink="true">https://portreeve.com/blog/shopify-chargebacks</guid>
      <description>How Shopify chargebacks work: the fee and when it comes back, which disputes you can win, what Shopify Protect covers, and how to stop the repeat offender.</description>
      <pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>PayPal chargebacks: what a seller can fight, and what they can&apos;t</title>
      <link>https://portreeve.com/blog/paypal-chargebacks</link>
      <guid isPermaLink="true">https://portreeve.com/blog/paypal-chargebacks</guid>
      <description>PayPal chargebacks for software sellers: dispute vs claim vs issuer chargeback, the $15 and $20 fees, Seller Protection for intangibles, and repeat buyers.</description>
      <pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Friendly fraud: why the customer disputes and how to win</title>
      <link>https://portreeve.com/blog/friendly-fraud</link>
      <guid isPermaLink="true">https://portreeve.com/blog/friendly-fraud</guid>
      <description>Friendly fraud is a customer disputing a charge they authorized. What Visa CE 3.0 requires, which logs win a SaaS dispute, and how to stop the repeat.</description>
      <pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Before you launch a free tier: the abuse checklist</title>
      <link>https://portreeve.com/blog/free-tier-abuse-checklist</link>
      <guid isPermaLink="true">https://portreeve.com/blog/free-tier-abuse-checklist</guid>
      <description>Free tier abuse checklist for launch: meter expensive endpoints, capture identity keys, review before you block, fail open, and plan for the first attack.</description>
      <pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Ecommerce fraud detection: match the signal to the attack</title>
      <link>https://portreeve.com/blog/ecommerce-fraud-detection</link>
      <guid isPermaLink="true">https://portreeve.com/blog/ecommerce-fraud-detection</guid>
      <description>Ecommerce fraud detection is six different attacks. Name yours from the first loss, learn which signal catches it, and decide whether to build or buy it.</description>
      <pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>What credit card fraud detection datasets can&apos;t teach you</title>
      <link>https://portreeve.com/blog/credit-card-fraud-detection-datasets</link>
      <guid isPermaLink="true">https://portreeve.com/blog/credit-card-fraud-detection-datasets</guid>
      <description>The public credit card fraud detection datasets model the bank&apos;s problem, not a SaaS checkout. What is in each one, and how to build the dataset you need.</description>
      <pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>BIN attacks: when card testers bring their own numbers</title>
      <link>https://portreeve.com/blog/bin-attack</link>
      <guid isPermaLink="true">https://portreeve.com/blog/bin-attack</guid>
      <description>A BIN attack is card testing with generated numbers. How the Luhn check makes it cheap, why your decline codes help the attacker, and what stops it early.</description>
      <pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Behavioral fraud detection: what a session can and can&apos;t prove</title>
      <link>https://portreeve.com/blog/behavioral-fraud-detection</link>
      <guid isPermaLink="true">https://portreeve.com/blog/behavioral-fraud-detection</guid>
      <description>Behavioral fraud detection scores what a session does, not what it says. Which signals are cheap, which need a script, where behavior stops being proof.</description>
      <pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>x402 and the abuse problem nobody has priced in yet</title>
      <link>https://portreeve.com/blog/x402</link>
      <guid isPermaLink="true">https://portreeve.com/blog/x402</guid>
      <description>x402 lets any script with a wallet pay your API per request. What the protocol does, what sellers lose without the card, and how to count abuse per wallet.</description>
      <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Velocity checks: what to count, and what to key it on</title>
      <link>https://portreeve.com/blog/velocity-checks</link>
      <guid isPermaLink="true">https://portreeve.com/blog/velocity-checks</guid>
      <description>Velocity checks are counts per key per window. Which keys to use at signup, checkout, and login, why per-IP can only review, and a Redis sliding window.</description>
      <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Stripe Radar: what it catches, what it misses, what to add</title>
      <link>https://portreeve.com/blog/stripe-radar</link>
      <guid isPermaLink="true">https://portreeve.com/blog/stripe-radar</guid>
      <description>What Stripe Radar screens by default, what the paid tiers add, the rules worth writing, and the signup, trial, and login abuse it structurally cannot see.</description>
      <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Free trial abuse: why blocking emails fails and what works</title>
      <link>https://portreeve.com/blog/free-trial-abuse</link>
      <guid isPermaLink="true">https://portreeve.com/blog/free-trial-abuse</guid>
      <description>Free trial abuse explained from the abuser&apos;s side: why email blocklists, IP limits and card gates each fail, and how identity linking stops repeat trials.</description>
      <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Free tier abuse: how credit farming works and how to stop it</title>
      <link>https://portreeve.com/blog/free-tier-abuse</link>
      <guid isPermaLink="true">https://portreeve.com/blog/free-tier-abuse</guid>
      <description>Free tier abuse explained: how scripted signups farm AI credits for resale, what each fake account costs you, and why to meter new clusters, not the door.</description>
      <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Fraud detection API options for SaaS: Radar, Sift, Fingerprint, and the self-serve gap</title>
      <link>https://portreeve.com/blog/fraud-detection-api</link>
      <guid isPermaLink="true">https://portreeve.com/blog/fraud-detection-api</guid>
      <description>A fraud detection API landscape for small SaaS: what Stripe Radar, Sift, Fingerprint, Castle, hCaptcha and WorkOS Radar cover, what they cost, and the gap.</description>
      <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Disposable email domains: what a blocklist misses</title>
      <link>https://portreeve.com/blog/disposable-email-domains</link>
      <guid isPermaLink="true">https://portreeve.com/blog/disposable-email-domains</guid>
      <description>Blocklists of disposable email domains catch the lazy tier and miss $1 catch-all domains and Gmail alts. Score email quality without blocking customers.</description>
      <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Device fingerprinting for fraud: what it can and can&apos;t do</title>
      <link>https://portreeve.com/blog/device-fingerprinting</link>
      <guid isPermaLink="true">https://portreeve.com/blog/device-fingerprinting</guid>
      <description>How device fingerprinting works, where browsers break it, what the law requires, and why the device key lets you block card testing at ordinary amounts.</description>
      <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Chargeback fraud in SaaS: three kinds, one repeat offender</title>
      <link>https://portreeve.com/blog/chargeback-fraud</link>
      <guid isPermaLink="true">https://portreeve.com/blog/chargeback-fraud</guid>
      <description>Chargeback fraud in SaaS: true fraud vs friendly fraud vs first-party abuse, Stripe fees, network thresholds, evidence that wins, and stopping repeats.</description>
      <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>What is card testing? The fraud behind the $1 charges</title>
      <link>https://portreeve.com/blog/card-testing</link>
      <guid isPermaLink="true">https://portreeve.com/blog/card-testing</guid>
      <description>Card testing is how criminals validate stolen cards on your checkout. How the probes work, what they cost in fees and disputes, and how to detect them.</description>
      <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Agent payments: abuse control when your customer is a bot</title>
      <link>https://portreeve.com/blog/agent-payments</link>
      <guid isPermaLink="true">https://portreeve.com/blog/agent-payments</guid>
      <description>Agent payments break bot detection because the buyer is a bot. Use identity, reputation, velocity and price to tell paying agents from abusive scripts.</description>
      <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Account takeover detection that doesn&apos;t lock out real users</title>
      <link>https://portreeve.com/blog/account-takeover</link>
      <guid isPermaLink="true">https://portreeve.com/blog/account-takeover</guid>
      <description>How account takeover happens at a SaaS login, which signals separate a stolen credential from a traveling customer, and why a challenge beats a block.</description>
      <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
    <item>
      <title>Card testing on Stripe: how the attack works and how to stop it</title>
      <link>https://portreeve.com/blog/card-testing-stripe</link>
      <guid isPermaLink="true">https://portreeve.com/blog/card-testing-stripe</guid>
      <description>Card testing on Stripe explained from the attacker&apos;s side: why your checkout is the target, what declines and disputes cost, and what to change tonight.</description>
      <pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate>
      <author>Portreeve</author>
    </item>
  </channel>
</rss>
