redis 如何使用wagtail对URL路径进行费率限制?

72qzrwbm  于 5个月前  发布在  Redis
关注(0)|答案(2)|浏览(54)

我正在迁移一个现有的Django项目,以使用wagtail CMS。
我不清楚如何使用wagtail来限制费率,我在文档中没有看到任何关于它的内容。
举个例子:
在集成wagtail之前,我有一个返回隐私策略html页面的视图。

@ratelimit(
    key='ip',
    rate='15/m',
    block=True
)
def show_privacy_policy(request):
    context = base_context(request)
    return render(
        request,
        'pages/privacy_policy.html',
        context
    )

字符串
现在这个被删除了,我有一个更通用的wagtail Page,用于渲染条款和条件或隐私政策等页面,我称之为InfoPage。我唯一定义的是我的InfoPage模型,它有一个模板路径附加wagtail/info_page.html

class InfoPage(Page):

    template = "wagtail/info_page.html"
    last_modified_date = models.DateField("Last modified date")
    body = RichTextField(features=['bold', 'italic', 'link', 'ul', 'h3'])

    content_panels = Page.content_panels + [
        FieldPanel('last_modified_date'),
        FieldPanel('body')
    ]
    
    parent_page_types = ['news.Index']
    subpage_types = []


这只是工作,我所有的信息页都正确呈现。但是,我没有看到任何方法来限制对这些页面的访问。如果没有方法来限制访问,我很容易受到DDOS攻击等。我在这里错过了什么?是否有一种方法来限制访问,或者我需要采取不同的方法?

shyt4zoc

shyt4zoc1#

所有的Wagtail页面对象都实现了一个serve方法,这个方法的行为和Django视图一样,接受一个请求对象并返回一个响应。@ratelimit装饰器很可能在这里被应用。但是,这可能不是很有效,因为Wagtail必须执行大量的数据库查询才能找出哪个页面对应于给定的URL -当您到达页面对象时,该请求已经消耗了大量的服务器资源。
我建议在Web服务器层应用速率限制--例如,参见the Nginx documentation on rate limiting--或者像@cnk建议的那样,在外部使用Cloudflare这样的服务。这些选项几乎肯定会比在Django / Python应用层所做的任何事情更加安全,性能也更好。

rkue9o1l

rkue9o1l2#

而不是速率限制,我建议使用前端缓存,所以它是廉价的渲染页面。我使用Cloudflare与内置的enter link description here在缓存无效。有一些缓存无效包括股票Wagtail发行版或您可以使用CodeRedwagtail-cache

相关问题