Key Takeaways

  • Input validation and output encoding prevent most injection attacks.
  • Use parameterized queries—never concatenate SQL.
  • Implement proper session management and authentication.
  • Defense in depth—multiple security layers.
  • Security testing should be continuous, not just pre-release.
  • Keep frameworks and dependencies updated.

1. Web Security Fundamentals

Web application security protects web applications from attacks that exploit vulnerabilities in code, configuration, or design. With web applications handling sensitive data and business logic, security failures can lead to data breaches, financial loss, and reputational damage.

The core principle is: never trust user input. All data from users, APIs, and external sources should be validated, sanitized, and encoded before use.

2. OWASP Top 10 (2021)

#VulnerabilityDescription
A01Broken Access ControlUsers acting outside permissions
A02Cryptographic FailuresWeak/missing encryption
A03InjectionSQL, NoSQL, OS command, LDAP injection
A04Insecure DesignMissing security in design phase
A05Security MisconfigurationInsecure defaults, incomplete configs
A06Vulnerable ComponentsOutdated libraries/frameworks
A07Auth FailuresWeak authentication/session management
A08Software/Data IntegrityCI/CD tampering, insecure deserialization
A09Logging FailuresInsufficient logging and monitoring
A10SSRFServer-side request forgery

3. Injection Prevention

3.1 SQL Injection Prevention

# VULNERABLE - Never do this
query = "SELECT * FROM users WHERE id = " + user_input

# SAFE - Parameterized query (Python/SQLAlchemy)
result = db.execute(
    text("SELECT * FROM users WHERE id = :id"),
    {"id": user_input}
)

# SAFE - Prepared statement (PHP/PDO)
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$user_input]);

3.2 XSS Prevention

# Output encoding (context-specific)
# HTML context:
< → &lt;
> → &gt;
& → &amp;

# JavaScript context requires different encoding
# URL context requires URL encoding

# Use framework auto-escaping:
# React: automatically escaped
# Django: {{ variable }} auto-escaped
# Rails: <%= variable %> auto-escaped
Context Matters

XSS encoding must match the context. HTML encoding in a JavaScript context doesn't prevent XSS. Use Content Security Policy (CSP) as defense-in-depth against XSS that escapes encoding.

4. Authentication & Sessions

4.1 Best Practices

4.2 Cookie Security

# Secure cookie settings
Set-Cookie: session=abc123; 
    HttpOnly;     // No JavaScript access
    Secure;       // HTTPS only
    SameSite=Strict;  // CSRF protection
    Path=/;       // Scope
    Max-Age=3600  // 1 hour

5. Security Headers

# Essential security headers
Content-Security-Policy: default-src 'self'; script-src 'self'
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Strict-Transport-Security: max-age=31536000; includeSubDomains
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: geolocation=(), microphone=()

6. Security Testing

TypeWhenTools
SASTDevelopmentSonarQube, Semgrep, CodeQL
DASTStaging/ProdOWASP ZAP, Burp Suite, Nikto
SCACI/CDSnyk, Dependabot, OWASP Dependency-Check
Pen TestPre-releaseManual testing by experts

7. Web Application Firewalls

WAFs filter malicious traffic based on rules. They provide defense-in-depth but don't replace secure coding.

Defense in Depth

Layer security controls: secure coding + input validation + WAF + security headers + monitoring. No single control is sufficient. Defense in depth means an attacker must bypass multiple layers to succeed.

8. Frequently Asked Questions

Do frameworks prevent all vulnerabilities?
Frameworks prevent many common vulnerabilities when used correctly, but developers can still introduce issues by bypassing protections, misconfiguring security features, or writing vulnerable business logic. Frameworks are tools, not guarantees.
Is a WAF enough for web security?
No. WAFs are defense-in-depth, not primary security. They can be bypassed with sophisticated attacks. Secure coding is the foundation; WAFs catch attacks that slip through and protect against zero-days while you patch.

Conclusion

Web application security starts with secure coding practices—validate input, encode output, use parameterized queries, and implement proper authentication. Layer defenses with security headers, WAFs, and continuous testing. Stay current with OWASP guidelines and keep dependencies updated. Security is an ongoing process, not a one-time effort.

Continue Learning:
XSS Prevention SQL Injection