欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

阻止除前端以外的任何其他資源的API訪問

我有一個路由api/v1/track,我想通過給定的track ID發(fā)送一些數(shù)據(jù)(JSON ),但我想只為我的前端請求或我的移動應(yīng)用程序發(fā)送響應(yīng),而不是來自任何地方的任何其他請求!

我正在使用節(jié)點JS和Express,我實現(xiàn)了一些JWT配置,用于使用令牌對用戶進(jìn)行身份驗證,但我不知道如何在沒有任何預(yù)先創(chuàng)建的令牌的情況下限制對此路由的訪問

app.get("/track/:ID" , (req , res) => {

    // Block forbidden requests ... 

    // If request is from my specific resource ( Frontend or App ) then : 
    res.json(something)
})

我只是不想讓人們使用我的API信息,我也需要在用戶被驗證發(fā)送數(shù)據(jù)到我的Vue SPA之前

謝謝你

沒有一種通用的方法可以將API的使用限制在您自己的網(wǎng)頁上。網(wǎng)絡(luò)上的API是& quot在網(wǎng)絡(luò)上& quot網(wǎng)絡(luò)上的任何編程工具都可以訪問它。

正如其他人所說的,你可以實現(xiàn)CORs保護(hù),但這只能阻止人們在他們自己的網(wǎng)頁中從他們自己的Javascript訪問你的API——它不能阻止其他腳本或編程工具(如curl)訪問你的API。CORs是一種客戶端保護(hù),只在現(xiàn)代瀏覽器中實施。CORs不適用于其他訪問API的方式,例如通過腳本或其他編程工具。

這里唯一真正的解決方案是為所有API請求實現(xiàn)認(rèn)證,然后保護(hù)您的服務(wù)器免受API的濫用。身份驗證背后的想法是,在API提供任何結(jié)果之前,您需要某種經(jīng)過身份驗證的登錄/帳戶。為了在您自己的web頁面中使用,您可能有某種可用于身份驗證的登錄名。

然后,在服務(wù)器上,您需要每個API調(diào)用來檢查登錄憑證的存在,比如經(jīng)過驗證的登錄cookie、經(jīng)過驗證的JWT令牌等...

這阻止了對API的開放使用,但是顯然人們?nèi)匀豢梢栽谀愕恼军c上創(chuàng)建一個帳戶,然后使用這些憑證以編程方式使用你的API。控制這種情況的唯一方法是實現(xiàn)服務(wù)器端保護(hù),例如速率限制,以防止濫用API,這可能會影響服務(wù)器的質(zhì)量或響應(yīng)能力。

對于像Google這樣的地方的API服務(wù)器,它們通常會要求你注冊某種開發(fā)人員帳戶,并獲得一些API訪問憑證,然后你就可以使用這些API了。作為其中的一部分,您必須同意他們的服務(wù)條款,如果您違反了這些服務(wù)條款,他們可以撤銷您的API證書。他們還會主動控制你的訪問速率限制,在某些情況下,帶寬的使用。

您可以使用CORS來限制對服務(wù)器的訪問,換句話說,您可以& quot告訴應(yīng)用程序從哪個網(wǎng)址可以獲得訪問和哪些方法& quot。它有很好的文檔。 在手機(jī)上,它只能用于混合應(yīng)用程序(Cordova/Ionic/Phonegap等)。)因為他們用的是瀏覽器。

我也有同樣的問題,我想在我的前端生成某種令牌,服務(wù)器驗證并且只能使用一次,所以假設(shè)攻擊者想要使用以前使用的令牌攻擊端點,我的服務(wù)器會檢測到它已經(jīng)被使用,從而阻止請求。換句話說,每次發(fā)出請求時,我的前端都會生成一個特殊的令牌。

正如@Marcos Molina的回復(fù)中提到的,你必須在你的API中使用CORS設(shè)置

快遞文件可以在這里找到

下面是Github上一個隨機(jī)人物項目的基本樣本

*可以替換為您想要的前端客戶端域

這里是關(guān)于CORS的通用文檔

import http from 'http';
import bodyParser from 'body-parser';
import express from 'express';
import logging from './config/logging';
import config from './config/config';
import sampleRoutes from './routes/sample';

const NAMESPACE = 'Server';
const router = express();

// ...

/** Rules of our API */
router.use((req, res, next) => {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization');

    if (req.method == 'OPTIONS') {
        res.header('Access-Control-Allow-Methods', 'PUT, POST, PATCH, DELETE, GET');
        return res.status(200).json({});
    }

    next();
});

/** Routes go here */
router.use('/api/sample', sampleRoutes);

// ...

const httpServer = http.createServer(router);

httpServer.listen(config.server.port, () => logging.info(NAMESPACE, `Server is running ${config.server.hostname}:${config.server.port}`));

這是一個我經(jīng)常問自己的問題,基本上我每次進(jìn)入一個大公司的網(wǎng)站(ebay,facebook等)時都會這么做...),我打開chrome devtools的網(wǎng)絡(luò)標(biāo)簽,看到那里正在發(fā)生什么,并從中獲得靈感,但很難理解正在發(fā)生什么(至少對我來說)。 我實現(xiàn)的另一個解決方案是在我的前端使用Google reCaptchaV2(假設(shè)您只為POST/ PATCH請求調(diào)用api),所以在我的服務(wù)器上,我總是檢查reCaptcha令牌是否存在和有效,如果不存在,請求就會被拒絕。

我猜想,一個選擇可能是將后端限制為只接收前端的IP請求。例如,如果前端的IP為& quot1 . 2 . 3 . 4 quot;那么應(yīng)該阻止來自其他IP的所有請求。