<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Security on Luis Sousa Blog</title>
    <link>https://89393b0c.nuvai-blog.pages.dev/tags/security/</link>
    <description>Recent content in Security on Luis Sousa Blog</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Sat, 07 Mar 2026 12:10:00 +0000</lastBuildDate>
    <atom:link href="https://89393b0c.nuvai-blog.pages.dev/tags/security/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Protecting EDD Downloads from URL Guessing</title>
      <link>https://89393b0c.nuvai-blog.pages.dev/posts/protecting-edd-downloads-from-url-guessing/</link>
      <pubDate>Sat, 07 Mar 2026 12:10:00 +0000</pubDate>
      <guid>https://89393b0c.nuvai-blog.pages.dev/posts/protecting-edd-downloads-from-url-guessing/</guid>
      <description>&lt;p&gt;We sell digital products on &lt;a href=&#34;https://joyofexploringtheworld.com/&#34;  class=&#34;external-link&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;joyofexploringtheworld.com&lt;/a&gt; using Easy Digital Downloads. By default, EDD stores files in &lt;code&gt;wp-content/uploads/&lt;/code&gt;—the same directory as every other WordPress upload. That means anyone who can guess the filename can download the file directly, bypassing purchase validation entirely.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-problem&#34;&gt;&#xA;  The problem&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#the-problem&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link to heading&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link to heading&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;EDD download URLs contain a token that validates the purchase. But the actual file sits in a publicly accessible directory. If someone guesses or discovers the file path (e.g. from a cached CDN URL or a predictable naming pattern), they can download it without paying.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
