我有一个使用 Node.js 和 Express 4.x 构建的 Web 应用程序,其中一个典型的页面如下所示:
...
<script type="text/javascript" src="jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="d3-5.4.0.min.js"></script>
<script type="text/javascript">
$(loadData); // When the page is fully loaded, call loadData()
function loadData() {
d3.json('/data/purchases').then(generateCharts);
}
function generateCharts(data) { }
</script>
...
它只是调用d3.json()
从服务器读取数据,然后用它们生成一些图表。
与服务器通信的方式d3.json()
是使用对指定 URL 的 GET 请求,在示例中是 /data/purchases。如果有人在浏览器中键入相同的 URL,他们显然会得到与 JSON 数据相同的响应。这就是我想要阻止的。
有什么方法可以检查请求是否来自d3.json()
电话?
我想X-Requested-With
用 Express 属性检查标题req.xhr
,但它设置为 false。显然d3-fetch
不使用 XMLHttpRequest 来加载数据,而是使用新的 Fetch API。
我也尝试过req.is('application/json')
......但它返回null。
还有什么我可以尝试的吗?
PS:我已经有一个简单的授权系统,它检查当前用户是否应该有权访问任何请求的 URL,包括页面和 API 调用。但它需要一些额外的配置数据存储在我的数据库中,使应用程序更难维护。因此,鉴于我们实际上没有任何敏感数据,我想我可以放弃对 API 调用的授权检查,而只允许通过d3.json()
而不是手动进行它们。相反,我可以完全允许它们......我只是不想:),这提供了一个了解更多关于 Express 和 D3.js 的机会。