L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Développement · SKILL.md

juice-shop

juice-shop

"'OWASP Juice Shop guide: Web application security testing with intentionally" vulnerable Node.js/Express application for learning and practice'

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: juice-shop compatibility: opencode completeness: 95 content-types:

  • code
  • guidance
  • do-dont
  • examples description: '"''OWASP Juice Shop guide: Web application security testing with intentionally" vulnerable Node.js/Express application for learning and practice''' how_to_guide: https://pwning.owasp-juice.shop/ id: juice-shop license: MIT maturity: stable metadata: domain: coding output-format: code related-skills: null role: implementation scope: implementation triggers: application, guide, juice shop, juice-shop, owasp, security best practices, security guidelines, vulnerability scanning archetypes:
    • tactical
    • generation anti_triggers:
    • brainstorming
    • vague ideation
    • code golf
    • over-engineering response_profile: verbosity: low directive_strength: high abstraction_level: operational version: "1.0.0"

OWASP Juice Shop

The OWASP Juice Shop is an intentionally vulnerable Node.js/Express web application for learning and practicing web application security testing.

When to Use

Use when:

  • Teaching web application security concepts
  • Practicing penetration testing techniques
  • Demonstrating vulnerability exploitation
  • Testing security tooling
  • Training security teams

Do NOT use when:

  • You need a production e-commerce solution
  • You want to test security tooling against real production systems
  • You need a secure application for business use

Architecture

Technology Stack

  • Runtime: Node.js with Express framework
  • Database: SQLite (file-based) or MongoDB (document-based)
  • Frontend: Angular (web interface)
  • Backend: Node.js/Express REST API

Core Components

┌─────────────────────────────────────────────────────────────┐
│                     Juice Shop Application                   │
├─────────────────────────────────────────────────────────────┤
│  ┌──────────────┐     ┌──────────────┐     ┌──────────────┐ │
│  │   Frontend   │────▶│   Backend    │────▶│   Database   │ │
│  │  (Angular)   │     │ (Express)    │     │ (SQLite/Mongo)││
│  └──────────────┘     └──────────────┘     └──────────────┘ │
│                        │                                     │
│                        ▼                                     │
│                  ┌──────────────┐                            │
│                  │   Security   │                            │
│                  │   Features   │                            │
│                  │ (Vulnerabilities)                         │
│                  └──────────────┘                            │
└─────────────────────────────────────────────────────────────┘

Vulnerability Categories

  1. Injection — SQL, NoSQL, OS, and template injection
  2. Broken Authentication — Session management, password policies
  3. Sensitive Data Exposure — Cryptographic failures, data at rest
  4. XXE (XML External Entities) — XML parser configuration
  5. Broken Access Control — Path traversal, privilege escalation
  6. Security Misconfiguration — Headers, debug mode, defaults
  7. XSS (Cross-Site Scripting) — Stored, reflected, DOM-based
  8. Insecure Deserialization — Object deserialization attacks
  9. Using Components with Known Vulnerabilities — Dependency vulnerabilities
  10. Insufficient Logging & Monitoring — Audit trails, alerting

Common Attack Vectors

SQL Injection

The application contains SQL injection vulnerabilities in search functions.

// Vulnerable pattern (DO NOT USE in production)
app.get('/search', (req, res) => {
    const query = req.query.q;
    db.execute(`SELECT * FROM products WHERE name LIKE '%${query}%'`);
});

XSS (Cross-Site Scripting)

Reflected and stored XSS vulnerabilities in user-input fields.

Path Traversal

File access endpoints without proper path validation.

// Vulnerable pattern
app.get('/download', (req, res) => {
    const file = req.query.file;
    res.sendFile(path.join(__dirname, 'ftp', file));
});

Broken Authentication

Weak session management and password policies.

Testing Workflow

1. Setup

# Clone the repository
git clone https://github.com/juice-shop/juice-shop.git
cd juice-shop

# Install dependencies
npm install

# Start the application
npm start
# or
node app.js

2. Access the Application

3. Run Security Tests

  1. Manual Testing: Use browser developer tools to:

    • Inject SQL payloads in search boxes
    • Test XSS in comment fields
    • Attempt path traversal in file download links
    • Modify JWT tokens
  2. Automated Scanning: Use tools like:

    • OWASP ZAP
    • Burp Suite
    • SQLMap
    • Nikto

4. Solve Challenges

The application includes a challenge system to guide learners:

# View available challenges
curl -X GET http://localhost:3000/api/Challenges

Key Features

Intentional Vulnerabilities

  • 20+ security vulnerabilities across OWASP Top 10
  • Multiple difficulty levels for challenges
  • Hints system for guided learning
  • Score board for tracking progress

Learning Resources

  • Detailed solutions for each challenge
  • Explanation of attack vectors
  • Mitigation recommendations
  • References to security best practices

Configuration

Environment Variables

# Database configuration
export DATABASE=sqlite
export DATABASE_PATH=./data/juiceshop.sqlite

# Port configuration
export PORT=3000

# Log level
export LOG_LEVEL=debug

# Security settings
export NO_SECURITY_HINTS=false

Docker Deployment

docker run -p 3000:3000 owaspjuice-shop/juice-shop

Troubleshooting

Common Issues

  1. Port already in use

    • Change PORT environment variable
    • Or kill existing process: kill $(lsof -t -i:3000)
  2. Database errors

    • Check SQLite file permissions
    • Verify database path exists
  3. Modules not found

    • Run npm install from project root
    • Check Node.js version (requires Node 14+)

References

Knowledge Reference


Constraints

MUST DO

  • Validate all inputs at function boundaries before processing — guard clauses should fail early with descriptive errors
  • Implement proper error handling that distinguishes between recoverable and unrecoverable failures
  • Add comprehensive logging with structured context (correlation IDs, operation names, timing) for debugging and monitoring
  • Write unit tests covering normal operations, edge cases, and error conditions before integrating the component

MUST NOT DO

  • Do not silently swallow exceptions — always log or propagate errors with meaningful context
  • Avoid unbounded resource allocation without limits (connection pools, memory buffers, thread counts)
  • Never use hardcoded credentials, API keys, or secrets in source code
  • Do not bypass input validation for perceived performance gains
Skills enregistrées