这是我的情况:
我的问题是:如何将来自外部站点的任何Java POST请求列入白名单?例如,我想在表单确认页面上添加Javascript发布请求。我该怎么做,以使我的DRF应用程序仅接受来自此站点的请求?我正在尝试不使用服务器站点代码。只是Java语言,因此很容易应用。
我担心的是,任何查看源代码的人都将能够查看API终结点并能够提交POST请求。
答案 0 :(得分:0)
您可以通过创建自定义权限类来实现白名单,这是docs中的示例。
from rest_framework import permissions
class BlacklistPermission(permissions.BasePermission):
"""
Global permission check for blacklisted IPs.
"""
def has_permission(self, request, view):
ip_addr = request.META['REMOTE_ADDR']
blacklisted = Blacklist.objects.filter(ip_addr=ip_addr).exists()
return not blacklisted
对于白名单实现,您需要从传入请求中获取REMOTE_HOST
,并将其与预定义的url列表进行比较,这些URL可以存储在数据库中或类的列表中。它可能看起来像这样:
# Model
class Whitelist(models.Model):
host = models.CharField()
# Permission
class WhitelistPermission(permissions.BasePermission):
"""
Global permission check for whitelisted IPs.
"""
def has_permission(self, request, view):
domain = request.META['REMOTE_HOST']
whitelisted = Whitelist.objects.filter(host=domain).exists()
return whitelisted
或者您可以基于IP的白名单将REMOTE_HOST
替换为REMOTE_ADDR
答案 1 :(得分:0)
也许您可以在Web服务器中进行配置。因此,该请求在入口级别本身被阻止。
如果您使用的是nginx,则类似https://support.hypernode.com/knowledgebase/blocking-allowing-ip-addresses-in-nginx/