OWASP Top 10
OWASP stands for Open Web Application Security Project. It is a global, non-profit organisation focused on improving the security of software through community-driven standards, tools, and best practices.
OWASP Top 10 (2025 RC1)
Broken Access Control
Users acting outside their intended permissions
Detection Tools: Checkmarx, Burp Suite Pro, Veracode OWASP ZAP, SonarQube Community
Example: A regular user modifies the URL parameter acct=123 to acct=456 to access another user's account data or admin functionality.
- .NET: Use
[Authorize]attributes and policy-based authorisation - React: Implement protected routes with server-side authorisation checks
- Deny by default - only grant access when explicitly allowed
Security Misconfiguration
Insecure default settings or incomplete configs
Detection Tools: Tenable.io, Qualys ScoutSuite, OpenVAS
Example: Using default admin credentials (admin/admin), leaving debug mode enabled in production, or exposing unnecessary services and ports.
- .NET: Disable detailed error pages in Production
- React: Remove
console.logand debug code in production builds - Automate verification of configuration
Supply Chain Failures
Compromised dependencies, build systems, or distribution
Detection Tools: Sonatype, Checkmarx OWASP Dependency-Check, npm audit
Example: A malicious package in npm or a compromised build pipeline (like SolarWinds 2019) injects backdoors into your application.
- .NET: Use NuGet package signing and scan with OWASP Dependency-Check
- React: Run
npm auditregularly and usepackage-lock.json - Maintain an SBOM (Software Bill of Materials)
Cryptographic Failures
Weak encryption or exposed sensitive data
Detection Tools: Checkmarx, Veracode, Fortify Snyk Open Source, SSL Labs, Trivy
Example: Passwords stored in plain text or using MD5/SHA1 for hashing. Not enforcing TLS, allowing attackers to intercept traffic.
- .NET: Use Data Protection API, enforce HTTPS, use
bcrypt/Argon2for passwords - React: Never store secrets client-side; use HTTPS and secure cookies
- Use strong algorithms:
AES-256,TLS 1.2+,Argon2/bcrypt
Injection
Malicious code or commands in input fields
Detection Tools: Checkmarx, Burp Suite Pro, Fortify SQLMap, OWASP ZAP, SonarQube
Example: SQL Injection: Input ' OR 1=1-- bypasses authentication. XSS: Input <script>alert('XSS')</script> executes malicious JavaScript.
- .NET: Use Entity Framework with parameterized queries, never concatenate SQL
- React: Sanitize inputs, avoid
dangerouslySetInnerHTML, use DOMPurify - Use parameterized queries, ORMs, and input validation
Insecure Design
Flaws in logic and architectural design
Detection Tools: IriusRisk, Microsoft Threat Modeling OWASP Threat Dragon, Threagile
Example: An e-commerce app allows unlimited password reset attempts without rate limiting or CAPTCHA.
- .NET: Implement rate limiting middleware
- React: Add CAPTCHA and client-side validation
- Shift Left - Security at design phase
Authentication Failures
Weak confirmation of user identity
Detection Tools: Burp Suite Pro, Checkmarx OWASP ZAP, Hydra
Example: Allowing weak passwords like password123 or not implementing multi-factor authentication.
- .NET: Use ASP.NET Core Identity with MFA
- React: Implement
OAuth2/OpenID Connectwith secure token storage - Enforce strong password policies
Data Integrity Failures
Code or data tampering without verification
Detection Tools: Sonatype, Checkmarx Sigstore, npm audit, Git commit signing
Example: Unsigned updates allow attackers to inject malicious code. Insecure deserialisation lets attackers execute arbitrary code.
- .NET: Sign assemblies, verify signatures, avoid insecure deserialisation
- React: Use Subresource Integrity (SRI) for CDN resources
- Sign code and verify integrity; secure CI/CD pipelines
Logging & Alerting Failures
Inability to detect and respond to breaches
Detection Tools: Splunk, Datadog, New Relic ELK, Graylog
Example: Not logging failed login attempts or security events means you can't detect ongoing attacks or investigate breaches.
- .NET: Use Serilog/NLog with structured logging and alerting
- React: Send errors to monitoring services (Sentry, LogRocket)
- Log security events with alerting; ensure tamper-proof storage
Mishandling of Exceptions
Poor error handling leading to security issues
Detection Tools: Checkmarx, Veracode, Fortify SonarQube, Semgrep, ESLint, AFL Fuzzer
Example: Detailed error messages reveal database structure. Unhandled exceptions crash the app or expose system paths and configuration.
- .NET: Use global exception handlers; return generic error messages to users
- React: Implement Error Boundaries; log but don't expose errors
- Fail securely (closed); never expose sensitive information in errors