节点:检查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);
}
}