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

标签 javascript json ajax flask

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

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/

相关文章:

javascript - 如何在javascript中将数据加载到特定的输入值?

Javascript:无法表示正弦图

javascript - 在网站的 javascript 完成页面构建后,如何运行 Chrome 扩展内容脚本?

javascript - 将 JSON 响应映射到 TypeScript 中的组件模型。

json - 如何将多个键值条目的 JSON 对象反序列化为 Rust 中的自定义结构

javascript - 当用户将鼠标悬停在图像上时,如何向用户实时显示图像上的 (x,y) 坐标?

javascript - 检查是否启用了第三方 cookie

javascript - 如何为 Dart 编写注释

javascript - 将数据加载到我不知道列的数据表中

javascript - 如何让服务器在普通 PHP/SQL 网站后面执行任务?