最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

节点:检查URL是否可以安全地请求

IT培训 admin 5浏览 0评论

节点:检查URL是否可以安全地请求

我正在从我的网站的访问者收集URL,然后我(按需)从我的后端请求。但是,我一直坚持对URL的验证。

在以下情况下,可以安全地请求URL:

  • 这是一个有效的URL
  • 它是明确的(在RFC 1918术语中,它是公开的)

到目前为止我发现了什么:

  • URL接口(验证URL)
  • ipaddr.js库(验证IP)
  • is-valid-domain库(看起来很糟糕,因为它为256.256.256.256返回true)

然而,这些似乎都没有做到我需要它 - 甚至它们的组合也没有。

有什么我忽略的吗?

回答如下:

我解决了自己的问题。我用了:

  • URL验证的URL接口
  • hostname-is-private NPM module

首先,我使用new URL(input)验证输入,然后在该URL.hostname上使用require('hostname-is-private').isPrivate(这是一个异步函数)。这也适用于IP地址(即使名称没有提示)。

代码看起来像这样:

let isPrivate = require('hostname-is-private').isPrivate;

function validateURL(urlstr, cb) {
  try {
    let url = new URL(urlstr);
    isPrivate(url.hostname, (err, res) => {
      if (err) {cb(false)}
      cb(!res);
    })
  } catch (e) {
    return cb(false);
  }
}

节点:检查URL是否可以安全地请求

我正在从我的网站的访问者收集URL,然后我(按需)从我的后端请求。但是,我一直坚持对URL的验证。

在以下情况下,可以安全地请求URL:

  • 这是一个有效的URL
  • 它是明确的(在RFC 1918术语中,它是公开的)

到目前为止我发现了什么:

  • URL接口(验证URL)
  • ipaddr.js库(验证IP)
  • is-valid-domain库(看起来很糟糕,因为它为256.256.256.256返回true)

然而,这些似乎都没有做到我需要它 - 甚至它们的组合也没有。

有什么我忽略的吗?

回答如下:

我解决了自己的问题。我用了:

  • URL验证的URL接口
  • hostname-is-private NPM module

首先,我使用new URL(input)验证输入,然后在该URL.hostname上使用require('hostname-is-private').isPrivate(这是一个异步函数)。这也适用于IP地址(即使名称没有提示)。

代码看起来像这样:

let isPrivate = require('hostname-is-private').isPrivate;

function validateURL(urlstr, cb) {
  try {
    let url = new URL(urlstr);
    isPrivate(url.hostname, (err, res) => {
      if (err) {cb(false)}
      cb(!res);
    })
  } catch (e) {
    return cb(false);
  }
}
发布评论

评论列表 (0)

  1. 暂无评论