同步请求指的是当用户请求时,直接返回论坛html内容。异步指的是当用户请求时,返回一个预先页面,项目使用js
的如xhr
请求网站的api,api返回数据,然后把数据渲染到页面当中
如何判别呢?
最简单的方法,你禁用js,如果页面有内容,就是同步。没有内容就是异步。异步的内容是通过js加载的
另外也可以打开开发者工具,如果请求方法来自*.js
的xhr
,返回的数据是json,json里面是帖子的内容,那么就是典型的异步了。
其实两种方法都有自己的优点
异步请求也有优势,那就是每次请求的都是api,而不是页面,可以减少每次返回请求的数据。异步请求减少了每次返回的数据量,能够提高部分提供性能
同步请求的论坛由于可以返回html页面,而html页面可以嵌入JavaScript代码,js
可以检查用户浏览器的环境和完整性。可以过滤掉黑客一些攻击。
而异步请求内容渲染的所有的请求都请求在/api/*接口上,而这个api只能返回纯数据。所以注意防护应该防护这里。
当黑客真正CC打/api/*接口接口的时候,才是最严重的攻击。
对与异步请求来说,分为预制html页面和json(api返回的动态页面),首先应该把主要精力放在api接口的防护,由于api无法返回js
执行校验请求。所以应该在上级请求的waf防护。
如果连针对预制html页面CC都防不住,而不是对api接口的攻击,那么真*****。
为了最大程度减少精力,可以采取这种方案:
对前端非api接口的html,css,js等资源,采取强行缓存的策略(一般1h就够了)。当攻击者打这些资源的时候,就相当于打在静态页面下。可以最大程度减少攻击。
nginx可以使用强行缓存实现。
对于api返回的动态页面,只能在上级nginx或者上级waf过滤。这是因为当请求到达api后端时,只能返回json,无法返回其他数据如(js
)要求浏览器客户端进行校验。所以api接口是最难防护的。
其实有几个简单的方法,可以过滤大部分脚本小子:
api的上级nginx或者上级waf设置校验Referer和同时校验Origin,由于现阶段大部分自动工具都不会同时带上Referer和同时带上Origin(少部分会带上Referer,但是基本上不会同时带上Referer和Origin),这个可以过滤掉大部分提供在线ddos网页就可以进行ddcc的小学生。
校验Cookie
flarum有一个特殊的Cookie,flarum_session=xxxxxxxxxxxxxx。而常见的cc工具可以设置cookie,但是一般都是随机Cookie,如:a8HG34Vhdhdf,不明所以。在前端可以过滤一份无效Cookie,减少服务端压力。
过滤UA的开头为Mozilla,大部分cc工具的默认配置都不带Mozilla,虽然可以改,都是总有小学生不会改的。可以直接过滤掉
ja3验证,浏览器会带出一个ja3指纹,把这个指纹和UA中的浏览器型号进行匹配,大多数浏览器都能匹配上。而对于攻击攻击工具,必须重新修改和重新编译源码才能实现,大部分黑客(脚本小子)都没有这样的技术。
最后,预制页面如html,css,js一定要缓存,异步论坛的内容
不会依赖与这些页面,而内容是由api返回的json渲染的,预制页面一般缓存1-2h就可以了。如果被打静态资源都被打爆了,那么真的可以当笑话了
另外,异步请求的网站的根目录“/”,也是默认也是预制页面。