Bird
Raised Fist0
Postmantesting~8 mins

Security header validation in Postman - Framework Patterns

Choose your learning style10 modes available
Framework Mode - Security header validation
Folder Structure
postman-security-header-validation/
├── collections/
│   └── security-headers.postman_collection.json
├── environments/
│   ├── dev.postman_environment.json
│   ├── staging.postman_environment.json
│   └── prod.postman_environment.json
├── tests/
│   └── security-header-tests.js
├── scripts/
│   └── pre-request-scripts.js
├── reports/
│   └── test-report.html
└── README.md
Test Framework Layers
  • Collections: Store API requests grouped by functionality, here focused on security headers.
  • Environments: Define variables like base URLs and credentials for different deployment stages.
  • Tests: JavaScript files with test scripts that validate security headers in API responses.
  • Scripts: Pre-request or setup scripts to prepare requests or environment variables.
  • Reports: Generated test execution reports showing pass/fail results.
Configuration Patterns
  • Environment Variables: Use Postman environment files to switch between dev, staging, and prod URLs and credentials.
  • Global Variables: Store common values like expected security header names and values.
  • Collection Variables: Define variables specific to the security header tests, such as expected header values.
  • Pre-request Scripts: Dynamically set or update variables before sending requests if needed.
  • Secure Storage: Keep sensitive data like API keys in environment variables, not hardcoded in tests.
Test Reporting and CI/CD Integration
  • Postman Test Results: View pass/fail status directly in Postman after running collections.
  • Newman CLI: Run Postman collections from command line and generate reports in formats like HTML, JSON.
  • CI/CD Integration: Integrate Newman runs in pipelines (e.g., GitHub Actions, Jenkins) to automate security header validation on deployments.
  • Report Storage: Save generated reports as build artifacts or upload to dashboards for team visibility.
Framework Design Principles
  1. Modular Collections: Keep security header tests in dedicated collections for clarity and reuse.
  2. Use Environment Variables: Avoid hardcoding URLs or credentials to enable easy switching between environments.
  3. Clear Assertions: Write simple, readable tests that check for presence and correctness of security headers.
  4. Automate with Newman: Use Newman CLI to run tests automatically and generate consistent reports.
  5. Secure Secrets: Never store sensitive data in code or collections; use environment variables with restricted access.
Self Check

Where in this framework structure would you add a new test to verify the Content-Security-Policy header?

Key Result
Organize Postman security header tests with modular collections, environment configs, and automated reporting via Newman.

Practice

(1/5)
1. Which HTTP header is commonly used to prevent clickjacking attacks by controlling if a page can be displayed in a frame or iframe?
easy
A. Strict-Transport-Security
B. Content-Security-Policy
C. X-Frame-Options
D. Cache-Control

Solution

  1. Step 1: Understand clickjacking protection

    Clickjacking is prevented by restricting framing of pages.
  2. Step 2: Identify the header for frame control

    The X-Frame-Options header controls if a page can be framed.
  3. Final Answer:

    X-Frame-Options -> Option C
  4. Quick Check:

    Clickjacking protection = X-Frame-Options [OK]
Hint: Remember: Frame control = X-Frame-Options header [OK]
Common Mistakes:
  • Confusing Content-Security-Policy with frame control
  • Thinking Strict-Transport-Security controls framing
  • Ignoring the role of X-Frame-Options
2. Which Postman test script correctly checks if the Content-Security-Policy header exists in the response?
easy
A. pm.test('CSP header present', () => pm.expect(pm.response.headers.get('Content-Security-Policy') !== null).to.be.true);
B. pm.test('CSP header present', () => pm.response.headers.has('content-security-policy') === false);
C. pm.test('CSP header present', () => pm.response.headers.get('Content-Security-Policy') === undefined);
D. pm.test('CSP header present', () => pm.response.headers.has('Content-Security-Policy'));

Solution

  1. Step 1: Understand Postman header methods

    pm.response.headers.get() returns the header value or null if missing.
  2. Step 2: Check for header existence correctly

    Checking if the value is not null confirms header presence.
  3. Final Answer:

    pm.test('CSP header present', () => pm.expect(pm.response.headers.get('Content-Security-Policy') !== null).to.be.true); -> Option A
  4. Quick Check:

    Header exists if get() !== null [OK]
Hint: Use get() !== null to check header presence [OK]
Common Mistakes:
  • Using headers.has() which returns boolean but not tested properly
  • Checking for undefined instead of null
  • Negating the condition incorrectly
3. Given this Postman test code, what will be the test result if the response header X-Content-Type-Options is missing?
pm.test('X-Content-Type-Options header is set', () => {
  pm.response.to.have.header('X-Content-Type-Options');
});
medium
A. Test passes because header check is optional
B. Test passes but logs a warning
C. Test throws a syntax error
D. Test fails because header is missing

Solution

  1. Step 1: Understand the assertion used

    pm.response.to.have.header() asserts the header must exist.
  2. Step 2: Analyze missing header effect

    If the header is missing, the assertion fails and test fails.
  3. Final Answer:

    Test fails because header is missing -> Option D
  4. Quick Check:

    Missing required header = test failure [OK]
Hint: Required header missing causes test failure [OK]
Common Mistakes:
  • Assuming test passes if header is missing
  • Confusing syntax error with assertion failure
  • Thinking warnings are logged instead of failure
4. Identify the error in this Postman test script that checks if the Strict-Transport-Security header includes max-age=31536000:
pm.test('HSTS max-age check', () => {
  pm.expect(pm.response.headers.get('Strict-Transport-Security')).to.include('max-age=31536000');
});
medium
A. Not checking if header exists before calling get()
B. Using to.include instead of to.have.string
C. Incorrect header name casing
D. Missing semicolon after pm.test

Solution

  1. Step 1: Understand get() behavior when header missing

    If header is missing, get() returns null, causing error on to.include.
  2. Step 2: Identify missing existence check

    Test should first check header exists before checking content.
  3. Final Answer:

    Not checking if header exists before calling get() -> Option A
  4. Quick Check:

    Check header presence before content check [OK]
Hint: Always verify header exists before content assertions [OK]
Common Mistakes:
  • Assuming get() never returns null
  • Ignoring null causing test errors
  • Focusing on casing or semicolons instead
5. You want to write a Postman test to ensure the Content-Security-Policy header disallows inline scripts by including script-src 'self'. Which test script correctly validates this?
hard
A. pm.test('CSP disallows inline scripts', () => { pm.expect(pm.response.headers.get('Content-Security-Policy')).to.equal("script-src 'self'"); });
B. pm.test('CSP disallows inline scripts', () => { const csp = pm.response.headers.get('Content-Security-Policy'); pm.expect(csp).to.include("script-src 'self'"); });
C. pm.test('CSP disallows inline scripts', () => { pm.expect(pm.response.headers.has('Content-Security-Policy')).to.be.true; });
D. pm.test('CSP disallows inline scripts', () => { pm.expect(pm.response.headers.get('Content-Security-Policy')).to.include('unsafe-inline'); });

Solution

  1. Step 1: Understand CSP header content

    The header can contain multiple directives; we check if it includes script-src 'self'.
  2. Step 2: Validate correct assertion method

    Using to.include checks if the string contains the directive, allowing other parts.
  3. Final Answer:

    pm.test('CSP disallows inline scripts', () => { const csp = pm.response.headers.get('Content-Security-Policy'); pm.expect(csp).to.include("script-src 'self'"); }); -> Option B
  4. Quick Check:

    Use include() to check partial CSP directive [OK]
Hint: Use include() to check CSP directives inside header string [OK]
Common Mistakes:
  • Using to.equal which requires exact match
  • Only checking header presence without content
  • Checking for 'unsafe-inline' which allows inline scripts
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard