防止Django表单上的POST泛洪

时间:2016-03-19 21:36:02

标签: python django nginx

我有一个Django网络应用程序(使用nginx webserver),用户可以在其中发布有趣的状态消息。

有些用户正在使用脚本执行POST泛洪。我已经fail2ban实施了,所以这些很少持续超过2-3秒。但我需要知道是否有其他方法可以阻止非人类POSTer。就像想象中的文字突然出现在网站上一样:

6:07.371806+00 |                                                  | 0        | 2
 2772081 | Hfd                                                                                                                                 
                                                                                                 |           8322 |     11880 | 2016-03-14 09:0
7:01.909866+00 |                                                  | 0        | 2
 2772090 | ...                                                                                                                                 
                                                                                                 |           8322 |     11880 | 2016-03-14 09:0
7:11.392105+00 |                                                  | 0        | 2
 2772110 | .....                                                                                                                               
                                                                                                 |           8322 |     11880 | 2016-03-14 09:0
7:33.172462+00 |                                                  | 0        | 2
 2772119 | Kokjhd                                                                                                                              
                                                                                                 |           8322 |     11880 | 2016-03-14 09:0
7:43.189524+00 |                                                  | 0        | 2
 2772128 | Hfs                                                                                                                                 
                                                                                                 |           8322 |     11880 | 2016-03-14 09:0
7:52.209139+00 |                                                  | 0        | 2
 2772171 | Lloo                                                                                                                                
                                                                                                 |           8322 |     11880 | 2016-03-14 09:0
8:34.195006+00 |                                                  | 0        | 2
 2772178 | Kkjh                                                                                                                                
                                                                                                 |           8322 |     11880 | 2016-03-14 09:0
8:42.976177+00 |                                                  | 0        | 2
 2772211 | Kkkkkk                                                                                                                              
                                                                                                 |           8322 |     11880 | 2016-03-14 09:0
9:17.003594+00 |                                                  | 0        | 2
 2772230 | Kmkkkjhhf                                                                                                                           
                                                                                                 |           8322 |     11880 | 2016-03-14 09:0
9:33.680043+00 |                                                  | 0        | 2
 2772238 | Lkkk          

我的形式很香草。 E.g:

<form method="post" action="" enctype="multipart/form-data">
  {% csrf_token %}
  {{ form.description }}<br>
  <input class="button" type="submit" value="OK">
</form>

有什么办法可以在我的代码中取消这种行为吗?例如,我知道用于保留垃圾邮件机器人的蜜罐,但是设计用于淹没我的应用程序的恶意人工处理程序不会因此而失败。我可能会遗漏一些基本的东西吗?

请注意,许多次洪水都属于., .., ..., ...., ....., ......, .......类型(即重复字符,对我的逻辑进行微调更改,并且不允许用户将相同的内容发布两次) 。我可以设置一些限制POST请求的内容,其内容与来自同一用户的先前POST匹配,准确率为95%吗?有没有听过或尝试过类似的东西?请指教。

1 个答案:

答案 0 :(得分:0)

看起来您需要限制用户请求。看看Django Throttle Requests