Skip to main content

application-security

Securing applications through design, development, and deployment practices to prevent vulnerabilities and protect against attacks

Source facts

Repository
ffsshhttiikk/opencode-agents-skills
Last source activity
February 28, 2026 at 22:49
Detected SKILL.md language
English
Stars
3
Forks
2

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
Application Security
category
cybersecurity
description
Securing applications through design, development, and deployment practices to prevent vulnerabilities and protect against attacks
tags
["appsec","owasp","vulnerability","secure-development","threat-prevention"]
version
1.0
# Application Security ## What I Do I provide guidance on securing applications throughout the software development lifecycle. This includes identifying and mitigating common vulnerabilities (OWASP Top 10), implementing secure coding patterns, integrating security testing into CI/CD pipelines, and establishing defense-in-depth strategies that protect applications from injection attacks, broken authentication, data exposure, and other threats. ## When to Use Me - Designing a new application and need security architecture guidance - Reviewing code for common vulnerability patterns - Implementing input validation, output encoding, or authentication flows - Integrating SAST/DAST/SCA tools into your build pipeline - Remediating findings from a penetration test or vulnerability scan - Building middleware for security headers, CSRF protection, or rate limiting ## Core Concepts 1. **OWASP Top 10**: The most critical web application security risks including injection, broken authentication, sensitive data exposure, XXE, broken access control, misconfigurations, XSS, insecure deserialization, vulnerable components, and insufficient logging. 2. **Input Validation**: Verify all input on the server side using allowlists, type checks, length constraints, and range checks before processing. 3. **Output Encoding**: Context-aware encoding (HTML, JavaScript, URL, CSS) to prevent injection when rendering user-controlled data. 4. **Defense in Depth**: Layered security controls so that failure of one control does not compromise the entire system. 5. **Least Privilege**: Grant only the minimum permissions required for a function, user, or process to operate. 6. **Secure Session Management**: Use strong session IDs, enforce timeouts, regenerate tokens after authentication, and bind sessions to client attributes. 7. **Security Headers**: HTTP response headers (CSP, HSTS, X-Content-Type-Options, X-Frame-Options) that instruct browsers to enable built-in protections. 8. **Dependency Management**: Track and update third-party libraries to avoid inheriting known vulnerabilities (CVEs). 9. **Error Handling**: Return generic error messages to users while logging detailed diagnostics server-side to avoid information leakage. 10. **Security Testing Integration**: Embed SAST, DAST, and SCA scans in CI/CD to catch vulnerabilities before deployment. ## Code Examples ### 1. Parameterized Queries to Prevent SQL Injection (Python) ```python import sqlite3 from typing import Optional, Dict, Any def get_user_by_id(db_path: str, user_id: int) -> Optional[Dict[str, Any]]: """Fetch user with parameterized query to prevent SQL injection.""" conn = sqlite3.connect(db_path) conn.row_factory = sqlite3.Row cursor = conn.cursor() cursor.execute("SELECT id, username, email FROM users WHERE id = ?", (user_id,)) row = cursor.fetchone() conn.close() if row: return dict(row) return None ``` ### 2. Content Security Policy Middleware (Node.js/Express) ```javascript const helmet = require('helmet'); app.use( helmet.contentSecurityPolicy({ directives: { defaultSrc: ["'self'"], scriptSrc: ["'self'", "'nonce-{{nonce}}'"], styleSrc: ["'self'", "'unsafe-inline'"], imgSrc: ["'self'", "data:", "https://cdn.example.com"], connectSrc: ["'self'", "https://api.example.com"], fontSrc: ["'self'"], objectSrc: ["'none'"], frameAncestors: ["'none'"], upgradeInsecureRequests: [], }, }) ); app.use(helmet.hsts({ maxAge: 31536000, includeSubDomains: true, preload: true })); app.use(helmet.noSniff()); app.use(helmet.frameguard({ action: 'deny' })); ``` ### 3. CSRF Token Validation (Python/Flask) ```python import secrets from functools import wraps from flask import Flask, session, request, abort def generate_csrf_token() -> str: if "_csrf_token" not in session: session["_csrf_token"] = secrets.token_hex(32) return session["_csrf_token"] def csrf_protect(f): @wraps(f) def decorated(*args, **kwargs): if request.method in ("POST", "PUT", "DELETE", "PATCH"): token = request.form.get("_csrf_token") or request.headers.get("X-CSRF-Token") if not token or token != session.get("_csrf_token"): abort(403, description="CSRF token missing or invalid") return f(*args, **kwargs) return decorated ``` ### 4. Input Validation with Allowlists (Python) ```python import re from typing import Optional ALLOWED_USERNAME_PATTERN = re.compile(r"^[a-zA-Z0-9_]{3,30}$") ALLOWED_SORT_FIELDS = {"created_at", "updated_at", "username", "email"} def validate_username(username: str) -> Optional[str]: if not ALLOWED_USERNAME_PATTERN.match(username): return None return username def validate_sort_field(field: str) -> str: if field not in ALLOWED_SORT_FIELDS: return "created_at" return field ``` ### 5. Secure Password Hashing (Python) ```python import hashlib import secrets from typing import Tuple def hash_password(password: str) -> Tuple[str, str]: salt = secrets.token_hex(32) pwd_hash = hashlib.pbkdf2_hmac( "sha256", password.encode("utf-8"), salt.encode("utf-8"), iterations=600_000 ) return pwd_hash.hex(), salt def verify_password(password: str, stored_hash: str, salt: str) -> bool: pwd_hash = hashlib.pbkdf2_hmac( "sha256", password.encode("utf-8"), salt.encode("utf-8"), iterations=600_000 ) return secrets.compare_digest(pwd_hash.hex(), stored_hash) ``` ## Best Practices 1. **Validate all input server-side** using allowlists and strict type/length/range checks regardless of client-side validation. 2. **Use parameterized queries or ORMs** for all database interactions to prevent SQL injection. 3. **Encode output contextually** (HTML, JS, URL, CSS) when rendering user-controlled data. 4. **Set security headers** (CSP, HSTS, X-Content-Type-Options, X-Frame-Options, Referrer-Policy) on every response. 5. **Hash passwords with strong algorithms** (bcrypt, scrypt, Argon2, or PBKDF2 with high iteration counts) and unique salts. 6. **Implement CSRF protection** for all state-changing operations using synchronizer tokens or SameSite cookies. 7. **Keep dependencies updated** and run SCA scans to detect known vulnerabilities in third-party libraries. 8. **Log security events** (authentication failures, access denials, input validation failures) with enough context for investigation but without sensitive data. 9. **Fail securely** by denying access by default when errors occur rather than allowing access. 10. **Enforce HTTPS everywhere** and redirect HTTP to HTTPS with HSTS headers.
View on GitHub