我的第一个伦理 Open Redirect Scanner:从零到发布

发布: (2025年12月7日 GMT+8 09:39)
3 min read
原文: Dev.to

Source: Dev.to

Introduction

我用 Node.js 构建了一个伦理性的开放重定向漏洞扫描器。该工具能够自动检测开放重定向参数,支持异步并行扫描,加入限速以避免拒绝服务,并将结果导出为 JSON,便于日志记录。

Features

  • 批量测试 – 从文本文件读取 URL,提升扫描效率。
  • 异步并行扫描 – 在保持责任感的前提下最大化速度。
  • 限速 – 在请求之间添加延迟,防止意外的 DoS。
  • JSON 导出 – 自动生成 results.json,记录扫描结果。

Installation

git clone https://github.com/ethicals7s/ethicals7s-redirect-hunter
cd ethicals7s-redirect-hunter
npm install

Usage

  1. 创建一个 urls.txt 文件,每行放置一个 URL(仅使用安全且已获授权的目标)。示例:

    https://www.google.com/url?q=https://evil.com
    https://example.com
    https://www.koni-store.ru/bitrix/redirect.php?event1=&event2=&event3=&goto=https://google.com
  2. 运行扫描器:

    node index.js scan

Example Output

Scanning for open redirects (ethical tests only)...
https://www.google.com/url?q=https://evil.com is VULNERABLE.
https://example.com is SAFE.
https://www.koni-store.ru/bitrix/redirect.php?event1=&event2=&event3=&goto=https://google.com is VULNERABLE.

results.json(自动生成):

[
  "https://www.google.com/url?q=https://evil.com",
  "https://example.com",
  "https://www.koni-store.ru/bitrix/redirect.php?event1=&event2=&event3=&goto=https://google.com"
]

Code Snippet (index.js)

// index.js
const MALICIOUS_DOMAIN = 'evil.com';
const INPUT_FILE = 'urls.txt';
const fs = require('fs').promises;
const fetch = require('node-fetch');

async function checkForOpenRedirect(url) {
  try {
    const testUrl = `${url}?redirect=https://${MALICIOUS_DOMAIN}`;
    const response = await fetch(testUrl, { redirect: 'manual' });
    const isVulnerable = response.headers.get('location')?.includes(MALICIOUS_DOMAIN);
    return { url, status: isVulnerable ? 'VULNERABLE' : 'SAFE' };
  } catch (error) {
    console.error(`Error checking ${url}: ${error.message}`);
    return { url, status: 'ERROR' };
  }
}

async function main(file = INPUT_FILE) {
  try {
    const data = await fs.readFile(file, 'utf8');
    const urls = data.split('\n').filter(Boolean);
    const results = await Promise.all(urls.map(checkForOpenRedirect));
    console.log('Scanning for open redirects (ethical tests only)...');
    results.forEach(r => console.log(`${r.url} is ${r.status}.`));
    await fs.writeFile('results.json', JSON.stringify(urls, null, 2));
  } catch (err) {
    console.error(`Input file not found: ${file}`);
  }
}

// CLI handling
if (require.main === module) {
  const command = process.argv[2];
  if (command === 'scan') {
    main();
  } else {
    console.log('Usage: node index.js scan');
  }
}

Ethical Use

  • 仅限获得授权的测试 – 只对您拥有或已明确获得测试许可的域名进行扫描。
  • 负责任地向受影响方报告任何发现。
  • 未经适当授权,请勿在生产环境中使用此工具进行扫描。

Repository

https://github.com/ethicals7s/ethicals7s-redirect-hunter

Back to Blog

相关文章

阅读更多 »

别再买Mac来修复 CSS 了

“黑客”方式在 Windows 与 Linux 上调试 Safari 说实话:Safari 已经成了新的 Internet Explorer。作为网页开发者,我们主要使用 Chromium Chrome……