gpt4 book ai didi

javascript - 如何防止用户从查询参数访问 JSON 数据?

转载 作者:行者123 更新时间:2023-12-03 16:13:14 26 4
gpt4 key购买 nike

我正在开发一个非常简单的网络应用程序来搜索公司的股票。

JS代码如下(使用AJAX从服务器获取公司股票):

document.getElementById("requestQuoteBtn").addEventListener("click", function createQuoteRequest(){
var quoteSymbol = document.getElementById("requestedSymbol").value;
var quoteRequest = createAJAX();

quoteRequest.open('GET', '/quote?sym='+quoteSymbol);
quoteRequest.send();

quoteRequest.onload = function getQuoteRequest(){
if(quoteRequest.status == 200){ // SUCCESSFUL
displayQuoteData(false, JSON.parse(quoteRequest.response)); // basically shows a hidden div with the data
}
else // NO COMPANY W/ THIS SYMBOL FOUND
displayQuoteData(true, null);
};
});

这是 Flask 代码:

@app.route("/quote", methods=["GET"])
@login_required
def quote():
requestedSymbol = request.args.get("sym")
if not requestedSymbol:
return "no symbol"

quoteData = lookup(requestedSymbol) # USES AN API TO FETCH COMPANY'S STOCK

if quoteData is None:
return "NONE", 404
else:
return quoteData

问题是,如果用户访问,例如,这个 URL:

www.mywebsite.com/quote?sym=AAPL

它会直接显示带有 JSON 数据的原始 HTML,而不是带有数据的我的网站:

{"name":"Apple, Inc.","price":"$245.18","symbol":"AAPL"}

我怎样才能避免这种情况?

最佳答案

如果您只是想确保用户在尝试访问您的网站时不会意外访问您的 api 端点(也就是关于用户体验,您不关心向您的 API 端点添加身份验证)

最简单的方法是为您的 api 和客户端路由创建单独的路由

更新:

@app.route("/api/quote", methods=["GET"])

同样更新:

quoteRequest.open('GET', '/api/quote?sym='+quoteSymbol);

您的客户端路由仍然是:

@app.route("/quote", methods=["GET"])

如果您想确保没有人可以访问您的 api 端点,那么您需要向您的端点添加某种授权。

如果您没有通过某种授权来保护您的 API,那么任何人都可以通过访问路由来访问您从服务器 API 返回的数据。

无论哪种方式,为您的 API 端点和客户端路由设置单独的路由都应该可以解决访问时显示 API 数据而不是您的客户端模板的问题:

mywebsite.com/quote?sym=AAPL

关于javascript - 如何防止用户从查询参数访问 JSON 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58563984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com