首页 前端知识 ”检测到目标网站存在无效链接“ 终极解决方案

”检测到目标网站存在无效链接“ 终极解决方案

2024-08-23 20:08:23 前端知识 前端哥 241 707 我要收藏

1. 问题   

   项目部署后,经常收到 '**检测到目标网站存在无效链接漏洞**'漏洞,虽然是低危漏洞,但是让我无比头疼,由于项目比较老, 找起来非常麻烦,有没有更方便的方式那? 最后写了个工具,分享给大家,方案很简单,希望能解决大家问题 ~ ~ ~
    

2. 解决方案

通过node 配合 axios + cheerio 


1. 首先使用访问项目地址,获取html内容,
2. 然后使用cheerio抓取网页数据 
3. 找到a、link、script 等标签,读取src 或者 href属性拿到引入地址
4. 然后拼接当前项目 url。
5. 最后进行访问,就能知道那个是无效的链接了!!!


具体代码如下:
    
前置工作:

mkdir myLink
cd myLink
npm init -y 
npm install axios cheerio

新建 myLink.js:

const axios = require('axios');
const cheerio = require('cheerio');

// 你的网站地址
const baseURL = 'xxx'; 

// 获取 HTML 内容函数
async function acquireHTML(url) {
  try {
    const { data } = await axios.get(url, {
        // 请求头
      headers: {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
      },
      httpsAgent: new (require('https').Agent)({
        rejectUnauthorized: false,
      }),
    });
    return data;
  } catch (error) {
    console.error(`错误 ${url}: ${error.message}`);
    return null;
  }
}


// 解析标签
function analyzeLinks(html) {
  const $ = cheerio.load(html);
  const links = [];
  $('a').each((index, element) => {
    const link = $(element).attr('href');
    if (link && link.startsWith('http')) {
      links.push(link);
    } else if (link && link.startsWith('/')) {
      links.push(baseURL + link);
    }
  });

  $('link').each((index, element) => {
    const link = $(element).attr('href');
    if (link && link.startsWith('http')) {
      links.push(link);
    } else if (link && link.startsWith('/')) {
      links.push(baseURL + link);
    }

    
  $('script').each((index, element) => {
    const link = $(element).attr('src');
    if (link && link.startsWith('http')) {
      links.push(link);
    } else if (link && link.startsWith('/')) {
      links.push(baseURL + link);
    }
  });
    //   ... 这里可以加你自己想要检测的标签
  });

  console.log(links); // 打印解析的地址
  return links;
}


// 检测是否无效
async function verifyLink(url) {
  try {
    const response = await axios.head(url, {
        headers: {
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
          },
      httpsAgent: new (require('https').Agent)({
        rejectUnauthorized: false,
      }),
    });
    if (response.status >= 400) {
      console.log(`无效链接: ${url} (Status: ${response.status})`);
    }
  } catch (error) {
    console.log(`无效链接: ${url} (Error: ${error.message})`);
  }
}

// 入口
async function main() {
  const html = await acquireHTML(baseURL);
  if (!html) return;

  const links = analyzeLinks(html);
  console.log(`找到 ${links.length}链接`);

  for (const link of links) {
    await verifyLink(link);
  }

  console.log('完毕.');
}


// 入口
main();

最后执行命令

node myLink.js

输入结果

最后, 不放心的挨个访问下就可以了~~~


3. 总结

谢谢大家,希望对大家有帮助
 

转载请注明出处或者链接地址:https://www.qianduange.cn//article/16675.html
标签
评论
发布的文章

HTML5 基本框架

2024-09-01 23:09:50

HTML5取消边框的方法

2024-09-01 23:09:50

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!