URL normalization validation - URI resolution, dangerous protocols
npm install @bernierllc/validators-url-normalizationURL normalization validation - URI resolution, dangerous protocols, and format validation.
``bash`
npm install @bernierllc/validators-url-normalization
This package provides comprehensive URL validation covering format validation, dangerous protocol detection, relative URL resolution, malformed URL detection, and protocol consistency checking. Built on the BernierLLC validators framework with a focus on security and correctness.
- URL Format Validation - Validates that URLs conform to standard URL format
- Dangerous Protocol Detection - Detects XSS-prone protocols (javascript:, data:, vbscript:, file:)
- Relative URL Resolution - Validates that relative URLs can be resolved against a base URL
- Malformed URL Detection - Detects common URL malformations and issues
- Protocol Consistency - Ensures consistent use of protocols (HTTP vs HTTPS)
- Configurable Rules - Each rule can be customized with options
- High Performance - Optimized for validating large numbers of URLs
- Security Focused - Designed to prevent XSS and other URL-based attacks
`typescript
import { urlNormalizationValidator } from '@bernierllc/validators-url-normalization';
// The validator includes all URL normalization rules
console.log(urlNormalizationValidator.name);
// => '@bernierllc/validators-url-normalization'
console.log(urlNormalizationValidator.rules.length);
// => 5
// List all rules
urlNormalizationValidator.rules.forEach(rule => {
console.log(${rule.meta.id}: ${rule.meta.title});`
});
`typescript
import { createRuleContext } from '@bernierllc/validators-core';
import { createSharedUtils } from '@bernierllc/validators-utils';
import {
validateUrlFormat,
validateDangerousProtocols,
validateRelativeUrlResolution,
validateMalformedUrls,
validateProtocolConsistency,
} from '@bernierllc/validators-url-normalization';
// Create a context for collecting problems
const problems = [];
const ctx = createRuleContext('url-format', {}, problems, createSharedUtils());
// Create validator from rule
const validator = validateUrlFormat.create(ctx);
// Validate URLs
validator('https://example.com'); // No problems
validator('not a url'); // Reports problem
console.log(problems);
// => [{ ruleId: 'url-format', message: 'Invalid URL format...', severity: 'error', ... }]
`
`typescript
import { createRuleContext } from '@bernierllc/validators-core';
import { createSharedUtils } from '@bernierllc/validators-utils';
import { validateDangerousProtocols } from '@bernierllc/validators-url-normalization';
const problems = [];
const ctx = createRuleContext(
'dangerous-protocols',
{
dangerousProtocols: ['javascript:', 'data:', 'vbscript:', 'file:'],
severity: 'error',
},
problems,
createSharedUtils()
);
const validator = validateDangerousProtocols.create(ctx);
// XSS attempts
validator('javascript:alert("XSS")'); // Reports error
validator('data:text/html,'); // Reports error
// Safe URLs
validator('https://example.com'); // No problems
validator('mailto:test@example.com'); // No problems
`
`typescript
import { createRuleContext } from '@bernierllc/validators-core';
import { createSharedUtils } from '@bernierllc/validators-utils';
import { validateRelativeUrlResolution } from '@bernierllc/validators-url-normalization';
const problems = [];
const ctx = createRuleContext(
'relative-url-resolution',
{
baseUrl: 'https://example.com',
requireAbsolute: false,
},
problems,
createSharedUtils()
);
const validator = validateRelativeUrlResolution.create(ctx);
validator('/api/users'); // Resolves fine with base URL
validator('./images/logo.png'); // Resolves fine
validator('../parent/path'); // Resolves fine
// Without base URL, would report problems
`
`typescript
import { createRuleContext } from '@bernierllc/validators-core';
import { createSharedUtils } from '@bernierllc/validators-utils';
import { validateMalformedUrls } from '@bernierllc/validators-url-normalization';
const problems = [];
const ctx = createRuleContext('malformed-urls', {}, problems, createSharedUtils());
const validator = validateMalformedUrls.create(ctx);
// Common malformations
validator('https://example.com//double//slashes'); // Reports warning
validator('https://example.com/path with spaces'); // Reports error
validator('https://example.com/path