2

我正在寻找 Apache Web 服务器的替代安全注意事项。我通常使用 PHP 和 MySQL。

对于用户登录等进程,我将 IP 地址、尝试次数和上次尝试时间保存在数据库中,因此如果有人在过去 n 分钟或秒内尝试超过 x 次,我只需阻止 IP 地址。

当有很多不同的过程(如用户登录)时,将 IP 地址保留在数据库中听起来并不正确(因为会降低性能并且要做很多事情)。我知道如果你想要安全,你需要牺牲一些性能,但是有没有更好的方法来阻止用户发出过多的请求?也许是 Apache 的一个模块?还是对服务器的较低级别的警告?我特别想避免不必要的数据库工作。

我考虑过使用 CAPTCHA,但将它用于每种形式都会扼杀用户体验。在 n 分钟内的 x 请求后使用它仍然需要我提到的第一种技术。

缓存系统可能会有所帮助,但我看不出它如何防止暴力攻击或用垃圾填充数据库。AFAIK 它只有助于从数据库中读取(如果我错了,请纠正我)。

4

2 回答 2

1

您应该尝试 CloudFlare,保护您的网站免受各种机器人/黑客的攻击。请记住,stackoverflow 是针对有关编程的问题,而不是针对有关安全问题或托管问题的问题。

于 2013-01-27T14:20:21.423 回答
1

除了上面@ranty 的评论(这很合适,除非你真的同时有很多用户),你可以使用内存缓存系统,比如memcached。它有一个漂亮的 php 界面,并且非常易于使用。

将每次登录尝试转储到内存缓存(使用 ip 地址作为键和尝试计数作为值,由时间跨度清除)。它速度很快,不应该在性能或开发工作上花费太多。

伪代码如下所示:

$memcache_obj = memcache_connect('memcache_host', 11211);
$ip = $_SERVER('REMOTE_ADDR');
$trycount = memcache_get($memcache_obj, $ip);
if ( $trycount == null ) $trycount=0;
if ( $trycount > 3 ) die('bad user');
memcache_set($memcache_obj, $ip, $trycount++ , 0, 30);
于 2013-01-27T14:27:39.077 回答