节点:检查网址是否可以安全请求

时间:2019-02-15 09:05:15

标签: javascript node.js validation url

我正在从我的网站访问者那里收集URL,然后我(按需)从我的后端请求。但是,我被困在URL的验证中。

在以下情况下可以安全地请求网址

  • 这是一个有效的网址
  • 它是明确的(以RFC 1918的术语来说是公开的)

到目前为止我发现的东西:

  • URL界面(验证URL)
  • ipaddr.js库(验证IP)
  • is-valid-domain库(可能会中断,因为它对于256.256.256.256返回true)

但是,这些似乎都无法满足我的需要-甚至没有它们的组合。

有什么我忽略的东西吗?

1 个答案:

答案 0 :(得分:0)

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

首先,我使用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);
  }
}