python - 在 Django Web 应用程序中保护 GET 请求

标签 python django api rest

如何保护特定的 GET 请求(例如:^api/...)?

我想让这个 View (API 调用)只对我的 Django 网络应用程序可用。

它只能由 Django web 应用程序调用,不能直接调用。

使用 CSRF 中间件生成的散列 key 是一种好习惯吗?有没有更好的方法?

最佳答案

恐怕没有可靠的方法可以实现这一点。我能想到的最好方法是在您的 javascript 客户端中生成某种私钥,然后使用代码。这会让“攻击者”很难使用你的方法。也许使用 HMAC 或类似的东西。

一个例子。您想要进行以下调用:/api/users/1/vote_up。您可以使用一些代码来生成您的私钥:

<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-sha256.js">

var hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, generatePassphraseObfuscated());
hmac.update("/api/users/1/vote_up");
var hash = hmac.finalize();
$.ajax(
    /api/users/1/vote_up,
    {hash: hash}
)
</script>

generatePassphraseObfuscated 函数是关键。你需要让它真的很难复制。此外,您可以在每个请求中更改它并添加一个 cookie 来识别您发送的“版本”。例如,您可以有两个版本:

function generatePassphraseObfuscated(){
    return 1;
}

function generatePassphraseObfuscated(){
    return 2;
}

并随机提供给他们,并用 cookie 进行识别。所以你知道在你的 Django View 中使用哪个。

同样,它不可靠,没有万无一失的方法来做你想做的事。这只是一种愚蠢的方式,让其他人难以复制。

关于python - 在 Django Web 应用程序中保护 GET 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14661714/

相关文章:

python - 从两个现有的字典创建一个字典

python - django,显示管理站点上不在模型中的字段

python - 如何从 Django 中的另一个模型获取一个模型的计数?

python - Django:检查对象是否最后一个链接到另一个

rest - 保护移动应用程序无需登录即可访问的 REST-API

python - 如何使用API​​从速卖通获取产品描述?

python ORM 允许创建表和批量插入吗?

python - response.meta.get() 中的多个参数

android - 如何获得像Linkedin这样的技能列表?

python - 3g 覆盖 map - 可视化纬度、经度、ping 数据