Frameguard: X-Frame-Options Middleware

4.0.0 · active · verified Wed Apr 22

Frameguard is an Express.js middleware designed to enhance web application security by setting the `X-Frame-Options` HTTP header. This header primarily helps mitigate clickjacking attacks by restricting whether a browser can render a page in an `<frame>`, `<iframe>`, `<embed>`, or `<object>` tag. The current stable version is 4.0.0, and its release cadence is generally tied to the broader Helmet.js project, of which it is a part, receiving updates alongside Helmet's release cycle. While the `X-Frame-Options` header is largely superseded by the more robust `frame-ancestors` Content Security Policy (CSP) directive in modern browsers, Frameguard remains valuable for providing a layer of protection against clickjacking in older browser environments that may not fully support CSP. It differentiates itself by offering a simple, focused implementation for the most common and secure directives: `DENY` (preventing any framing) and `SAMEORIGIN` (allowing framing only from the same origin).

Common errors

Warnings

Install

Imports

Quickstart

Demonstrates applying `frameguard` middleware to an Express.js application with different `X-Frame-Options` actions: `deny` and `sameorigin`, and the default behavior.

import express from 'express';
import frameguard from 'frameguard';

const app = express();
const port = 3000;

// Option 1: Prevent all framing (most secure default)
app.use('/deny', frameguard({ action: 'deny' }));

// Option 2: Allow framing only from the same origin
app.use('/sameorigin', frameguard({ action: 'sameorigin' }));

// Option 3: Default to sameorigin (if no action specified)
app.use('/default', frameguard());

app.get('/deny', (req, res) => {
  res.send('This page cannot be framed.');
});

app.get('/sameorigin', (req, res) => {
  res.send('This page can only be framed by same origin.');
});

app.get('/default', (req, res) => {
  res.send('This page defaults to same origin framing.');
});

app.listen(port, () => {
  console.log(`Server listening at http://localhost:${port}`);
  console.log('Try visiting http://localhost:3000/deny in a frame from another origin.');
});

view raw JSON →