Manual Testing Techniques

Manual Testing Techniques

Understanding manual testing methods provides foundational knowledge for security header validation:

Browser Developer Tools Testing

// Browser console security header checker
(function checkSecurityHeaders() {
    const securityHeaders = [
        'content-security-policy',
        'x-content-type-options',
        'x-frame-options',
        'strict-transport-security',
        'referrer-policy',
        'permissions-policy',
        'x-xss-protection'
    ];
    
    fetch(window.location.href)
        .then(response => {
            console.log('Security Headers Report for:', window.location.href);
            console.log('=====================================');
            
            securityHeaders.forEach(header => {
                const value = response.headers.get(header);
                if (value) {
                    console.log(`✓ ${header}: ${value}`);
                } else {
                    console.warn(`✗ ${header}: NOT SET`);
                }
            });
            
            // Check cookies for security attributes
            console.log('\nCookie Security:');
            document.cookie.split(';').forEach(cookie => {
                console.log(`Cookie: ${cookie.trim()}`);
            });
        })
        .catch(error => console.error('Error checking headers:', error));
})();

Command-Line Testing with cURL

#!/bin/bash
# security-headers-test.sh

URL=$1
if [ -z "$URL" ]; then
    echo "Usage: ./security-headers-test.sh <URL>"
    exit 1
fi

echo "Security Headers Test for: $URL"
echo "======================================="

# Fetch headers
HEADERS=$(curl -s -I -X GET "$URL")

# Check individual headers
check_header() {
    HEADER_NAME=$1
    HEADER_PATTERN=$2
    
    if echo "$HEADERS" | grep -i "^$HEADER_PATTERN" > /dev/null; then
        echo "✓ $HEADER_NAME: $(echo "$HEADERS" | grep -i "^$HEADER_PATTERN" | cut -d' ' -f2-)"
    else
        echo "✗ $HEADER_NAME: NOT SET"
    fi
}

check_header "Content-Security-Policy" "content-security-policy:"
check_header "X-Content-Type-Options" "x-content-type-options:"
check_header "X-Frame-Options" "x-frame-options:"
check_header "Strict-Transport-Security" "strict-transport-security:"
check_header "Referrer-Policy" "referrer-policy:"
check_header "Permissions-Policy" "permissions-policy:"

# Check for problematic headers
echo -e "\nProblematic Headers:"
if echo "$HEADERS" | grep -i "^server:" > /dev/null; then
    echo "⚠ Server header exposes version: $(echo "$HEADERS" | grep -i "^server:" | cut -d' ' -f2-)"
fi

if echo "$HEADERS" | grep -i "^x-powered-by:" > /dev/null; then
    echo "⚠ X-Powered-By header present: $(echo "$HEADERS" | grep -i "^x-powered-by:" | cut -d' ' -f2-)"
fi