<?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: Jaime David Martinez</title>
    <description>The latest articles on DEV Community by Jaime David Martinez (@jaimedmartinezh).</description>
    <link>https://dev.to/jaimedmartinezh</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%2F4058124%2F98901480-8717-42b3-8ca7-ffc02afbb09f.jpg</url>
      <title>DEV Community: Jaime David Martinez</title>
      <link>https://dev.to/jaimedmartinezh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jaimedmartinezh"/>
    <language>en</language>
    <item>
      <title>Why 90% of CMS Hacks Happen Through Plugins (And How We Solved It With OS Process Isolation)</title>
      <dc:creator>Jaime David Martinez</dc:creator>
      <pubDate>Sat, 01 Aug 2026 14:55:19 +0000</pubDate>
      <link>https://dev.to/jaimedmartinezh/why-90-of-cms-hacks-happen-through-plugins-and-how-we-solved-it-with-os-process-isolation-951</link>
      <guid>https://dev.to/jaimedmartinezh/why-90-of-cms-hacks-happen-through-plugins-and-how-we-solved-it-with-os-process-isolation-951</guid>
      <description>&lt;p&gt;If you have managed websites or web applications for any length of time, you know the single most common vector for security breaches: &lt;strong&gt;untrusted or outdated third-party plugins&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;According to security research across the WordPress ecosystem and traditional CMS architectures, over &lt;strong&gt;90% of all CMS vulnerabilities&lt;/strong&gt; originate in third-party add-ons, themes, and plugins — not in the core framework itself.&lt;/p&gt;

&lt;p&gt;Why does this happen? And how can modern JavaScript architectures fix it at the operating-system level?&lt;/p&gt;




&lt;h2&gt;
  
  
  💥 The Fundamental Flaw of Traditional CMS Architectures
&lt;/h2&gt;

&lt;p&gt;In almost every traditional CMS (WordPress, Ghost, Strapi, Payload):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+-------------------------------------------------------------+
|                      HOST PROCESS                           |
|  +------------------+  +------------------+                 |
|  |   Core CMS DB    |  |  Environment     |  Full Trust    |
|  |   Credentials    |  |  Secrets (.env)  |  ============== |
|  +------------------+  +------------------+                 |
|                             ^                               |
|                             | (Unchecked Direct Heap Access)|
|                             v                               |
|                     +---------------+                       |
|                     | Plugin Code   |                       |
|                     +---------------+                       |
+-------------------------------------------------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you install an add-on or plugin:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The plugin runs inside the host runtime process.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;It shares the host memory heap and permissions.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It gets the keys to your entire infrastructure:&lt;/strong&gt; your database passwords, &lt;code&gt;.env&lt;/code&gt; files, filesystem, customer session cookies, and network access.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If a plugin author makes a mistake — or if their npm package/vendor dependency is compromised — the attacker inherits &lt;strong&gt;full host privileges&lt;/strong&gt;. A simple slider plugin can read your &lt;code&gt;.env&lt;/code&gt; file, exfiltrate your API keys, or turn your server into a botnet.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛡️ The WordJS Solution: OS-Enforced Plugin Isolation
&lt;/h2&gt;

&lt;p&gt;When building &lt;a href="https://github.com/jaimemartinez/wordjs" rel="noopener noreferrer"&gt;WordJS&lt;/a&gt; (an open-source website builder built on Node.js and SQLite), we decided to rethink plugin execution from scratch.&lt;/p&gt;

&lt;p&gt;Instead of trusting plugins by default, WordJS treats every third-party plugin like an &lt;strong&gt;untrusted app on a mobile operating system&lt;/strong&gt; (like Android or iOS).&lt;/p&gt;

&lt;p&gt;Here is how the isolation architecture works:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+------------------------------------------------------------------------+
|                          HOST PROCESS                                  |
|   +----------------------------------------------------------------+   |
|   | Core Engine (Secrets, Core DB Tables, User Auth, HTTPS)        |   |
|   +----------------------------------------------------------------+   |
|                               ^                                        |
|                               | RPC Bridge (Permission-Checked)        |
|                               v                                        |
|   +----------------------------------------------------------------+   |
|   | Capability Guard (Verifies requested vs granted capabilities)  |   |
|   +----------------------------------------------------------------+   |
+-------------------------------+----------------------------------------+
                                | (IPC Pipe Only - No Shared Heap)
                                v
+------------------------------------------------------------------------+
|                       CHILD PROCESS (OS Sandbox)                        |
|   +----------------------------------------------------------------+   |
|   | Plugin Heap &amp;amp; Event Loop (`child_process.fork`)                 |   |
|   | - Egress Socket Trap (Blocks Private IPs &amp;amp; Cloud Metadata)     |   |
|   | - Filesystem Scoped View                                        |   |
|   | - Database Scoped View (`wjp_&amp;lt;slug&amp;gt;_` tables only)             |   |
|   +----------------------------------------------------------------+   |
+------------------------------------------------------------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ⚙️ How It Works (Grounded in Code)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Separate OS Processes per Plugin (&lt;code&gt;child_process.fork&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Plugins do not execute in the host heap or inside shared thread memory. Each plugin is spawned into its own isolated process:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// backend/src/core/plugin-isolate.ts&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;child&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;fork&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;workerPath&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;pluginSlug&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;execArgv&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--max-old-space-size=128&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// Enforced OS memory cap&lt;/span&gt;
  &lt;span class="na"&gt;stdio&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ignore&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pipe&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pipe&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ipc&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;secureEnvironment&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;// Strips host secrets &amp;amp; .env credentials&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If a plugin suffers a memory leak, infinite loop, or heap exploit, &lt;strong&gt;only that child process dies&lt;/strong&gt;. The host server and all other plugins continue running uninterrupted.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Default-Deny Android-Style Capability Grants
&lt;/h3&gt;

&lt;p&gt;When a plugin is installed, its &lt;code&gt;manifest.json&lt;/code&gt; must explicitly declare the capabilities it requires:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sample-plugin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"capabilities"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"database"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"users:read"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By default, &lt;strong&gt;all capabilities are denied&lt;/strong&gt;. An admin must explicitly approve what each plugin is allowed to access:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// backend/src/core/plugin-permissions.ts&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;verifyPluginPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;pluginSlug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
  &lt;span class="nx"&gt;capability&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;CapabilityName&lt;/span&gt;
&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;granted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getGrantedCapabilities&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pluginSlug&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;granted&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;capability&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Strict default-deny check&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Plugins cannot access core system tables (&lt;code&gt;users&lt;/code&gt;, &lt;code&gt;sessions&lt;/code&gt;, &lt;code&gt;options&lt;/code&gt;). Database queries are automatically constrained to dedicated &lt;code&gt;wjp_&amp;lt;slug&amp;gt;_&lt;/code&gt; table prefixes.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Egress Network Trap (Anti-Exfiltration)
&lt;/h3&gt;

&lt;p&gt;One of the most dangerous plugin exploits is silent data exfiltration. WordJS traps socket connections at the low-level binding layer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// backend/src/core/egress-guard.ts&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;checkEgressTarget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;host&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;isPrivateIP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nf"&gt;isCloudMetadataEndpoint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`[Security Egress Trap] Blocked attempt to reach private destination: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ip&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Even if a plugin is granted the &lt;code&gt;network&lt;/code&gt; capability to call an external API, it &lt;strong&gt;cannot reach internal loopback services&lt;/strong&gt;, local subnet IPs (RFC1918), or cloud metadata services (&lt;code&gt;169.254.169.254&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Install-Time AST Code Scanner
&lt;/h3&gt;

&lt;p&gt;Before a plugin is activated, WordJS parses its source code using &lt;code&gt;acorn&lt;/code&gt; to detect forbidden patterns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// backend/src/core/plugins.ts&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ast&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;acorn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sourceCode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;ecmaVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;latest&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;walk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;full&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ast&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CallExpression&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;callee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;eval&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SecurityViolation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Forbidden use of eval() detected.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If dynamic code generation (&lt;code&gt;eval&lt;/code&gt;, &lt;code&gt;Function()&lt;/code&gt;, obfuscated &lt;code&gt;require&lt;/code&gt;) is detected, the plugin installation fails closed.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎨 Beyond Security: Modern Web Building
&lt;/h2&gt;

&lt;p&gt;Security shouldn't come at the cost of developer experience or usability. WordJS ships with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎨 &lt;strong&gt;Visual Drag-and-Drop Editor:&lt;/strong&gt; Native page builder in core powered by &lt;a href="https://puckeditor.com/" rel="noopener noreferrer"&gt;Puck&lt;/a&gt; with 30+ responsive blocks.&lt;/li&gt;
&lt;li&gt;⚡ &lt;strong&gt;Zero-Config SSR:&lt;/strong&gt; Server-side rendered pages with built-in metadata, OpenGraph cards, RSS, and &lt;code&gt;sitemap.xml&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;📦 &lt;strong&gt;Single-Process Deployment:&lt;/strong&gt; Run your whole site on Node.js + SQLite in one command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx create-wordjs@latest my-site
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🚀 Try WordJS &amp;amp; Explore the Code
&lt;/h2&gt;

&lt;p&gt;WordJS is 100% free and open-source under the MIT license.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⭐️ &lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/jaimemartinez/wordjs" rel="noopener noreferrer"&gt;github.com/jaimemartinez/wordjs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🏗️ &lt;strong&gt;Architecture Documentation:&lt;/strong&gt; &lt;a href="https://github.com/jaimemartinez/wordjs/blob/main/POSITIONING.md" rel="noopener noreferrer"&gt;read the security specs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We would love to hear your thoughts on process sandboxing, capability-based security models, and the future of web building in Node.js!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>security</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
