BlazorFrame 2.1.2
dotnet add package BlazorFrame --version 2.1.2
NuGet\Install-Package BlazorFrame -Version 2.1.2
<PackageReference Include="BlazorFrame" Version="2.1.2" />
<PackageVersion Include="BlazorFrame" Version="2.1.2" />
<PackageReference Include="BlazorFrame" />
paket add BlazorFrame --version 2.1.2
#r "nuget: BlazorFrame, 2.1.2"
#:package BlazorFrame@2.1.2
#addin nuget:?package=BlazorFrame&version=2.1.2
#tool nuget:?package=BlazorFrame&version=2.1.2
<h1> <div align="center" style="margin:0; padding:0;"> <img src="https://github.com/Tim-Maes/BlazorFrame/blob/master/assets/BlazorFrameLogo.png" alt="BlazorFrame Logo" width="600" /> </div> </h1>
A security-first Blazor iframe component with automatic resizing, cross-frame messaging, and comprehensive Content Security Policy integration.
Features
- Security-First Design - Built-in origin validation, message filtering, and sandbox isolation
- Content Security Policy - Comprehensive CSP integration with fluent configuration API
- Cross-Frame Messaging - Secure postMessage communication with validation
- Sandbox Support - Multiple security levels from permissive to paranoid isolation
- Environment-Aware - Different configurations for development vs production
- Automatic Resizing - Smart height adjustment based on iframe content
Documentation
- Quick Start Guide
- Security Features
- Configuration Guide
- Real-world Examples
- API Reference
- Troubleshooting
🚀 Quick Start
Installation
dotnet add package BlazorFrame
Basic Usage
@using BlazorFrame
<BlazorFrame Src="https://example.com" />
<BlazorFrame Src="https://widget.example.com"
SecurityOptions="@securityOptions"
OnValidatedMessage="HandleMessage"
OnSecurityViolation="HandleViolation" />
@code {
private readonly MessageSecurityOptions securityOptions = new MessageSecurityOptions()
.ForProduction() // Strict security settings
.WithBasicSandbox() // Enable iframe sandboxing
.RequireHttps(); // Enforce HTTPS transport
private Task HandleMessage(IframeMessage message)
{
Console.WriteLine($"Received message from {message.Origin}: {message.Data}");
return Task.CompletedTask;
}
private Task HandleViolation(IframeMessage violation)
{
Console.WriteLine($"Security violation: {violation.ValidationError}");
return Task.CompletedTask;
};
}
Configuration Examples
// Development environment - relaxed security
var devOptions = new MessageSecurityOptions()
.ForDevelopment()
.WithPermissiveSandbox();
// Production environment - strict security
var prodOptions = new MessageSecurityOptions()
.ForProduction()
.WithStrictSandbox()
.ValidateAndThrow();
// Payment widgets - maximum security
var paymentOptions = new MessageSecurityOptions()
.ForPaymentWidget();
Content Security Policy
<BlazorFrame Src="https://widget.example.com"
CspOptions="@cspOptions"
OnCspHeaderGenerated="HandleCspGenerated" />
@code {
private readonly CspOptions cspOptions = new CspOptions()
.ForProduction()
.AllowFrameSources("https://widget.example.com")
.WithScriptNonce("secure-nonce-123");
private Task HandleCspGenerated(CspHeader cspHeader)
{
// Apply CSP header to HTTP response
// HttpContext.Response.Headers.Add(cspHeader.HeaderName, cspHeader.HeaderValue);
return Task.CompletedTask;
}
}
Security
Content Security Policy
Comprehensive CSP integration for defense-in-depth security:
- Automatic header generation - CSP headers built from iframe requirements
- Environment-aware policies - Different rules for development vs production
- Fluent configuration API - Easy-to-use builder pattern for CSP rules
- Violation monitoring - Real-time CSP violation reporting and analysis
- Nonce and hash support - Modern CSP techniques for script security
Message Validation
All iframe messages are automatically validated for:
- Origin verification - Ensures messages come from allowed domains
- Content validation - JSON structure and size limits
- Security filtering - Blocks malicious patterns and script injection
- Custom validation - Extensible validation pipeline
Sandbox Security Levels
Level | Description | Use Case |
---|---|---|
None | No restrictions | Trusted content only |
Basic | Scripts + same-origin | Most trusted widgets |
Permissive | + forms + popups | Interactive widgets |
Strict | Scripts + same-origin only | Display widgets |
Paranoid | Scripts only | Untrusted content |
Demo
Interactive Demo - Try different security configurations live
Requirements
- .NET 8.0 or later
- Blazor Server or Blazor WebAssembly
- Modern browser with ES6 modules support
Browser Support
- Chrome 91+
- Firefox 90+
- Safari 15+
- Edge 91+
Support
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- NuGet: BlazorFrame Package
License
This project is licensed under the MIT License.
Built with ❤️ for the Blazor community
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- Microsoft.AspNetCore.Components.Web (>= 8.0.16)
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.16)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.