Php 使用htaccess拒绝从ip临时访问

Php 使用htaccess拒绝从ip临时访问,php,apache,.htaccess,security,Php,Apache,.htaccess,Security,我正在尝试创建一个小脚本,它可以防止(不是防止,而是减少影响)简单的ddos攻击。目前,我只是将ddosprotection.php文件包含在服务器的每个页面上。如果现在有人试图在网站上发送大量请求,脚本会检测到这一点,并将攻击者的IP写入htaccess文件 Deny from 1.2.3.4 这将减少DDOS攻击的影响,因为攻击者无法访问网站本身。(是的,我知道服务器仍然需要处理一些数据,但它仍在减少DDOS攻击的影响) 我现在的问题是:如果某个合法用户进入我的网站,而我的脚本无法检测到他

我正在尝试创建一个小脚本,它可以防止(不是防止,而是减少影响)简单的ddos攻击。目前,我只是将ddosprotection.php文件包含在服务器的每个页面上。如果现在有人试图在网站上发送大量请求,脚本会检测到这一点,并将攻击者的IP写入htaccess文件

Deny from 1.2.3.4
这将减少DDOS攻击的影响,因为攻击者无法访问网站本身。(是的,我知道服务器仍然需要处理一些数据,但它仍在减少DDOS攻击的影响)

我现在的问题是:如果某个合法用户进入我的网站,而我的脚本无法检测到他是合法用户,他将被永久禁止。有没有一种方法可以暂时禁止htaccess中的IP地址。当用户尝试连接到网站时,不应连接任何数据库,也不应请求任何php脚本(这将是胡说八道,攻击将更有效)例如:


数据库似乎是管理这一点最方便的方法

但是,您不必在每次请求时都运行php脚本并查询数据库:相反,您可以在阻塞数据库时向数据库添加一个条目,并定期运行php脚本(例如,在Linux上使用cron)来清理过期的条目并重新生成.htaccess文件。这还可以避免使用重复ip地址的不断增长的.htaccess文件


除此之外,您还应通过将规则直接写入防火墙而不是.htaccess文件来避免web服务器完全阻止条目。

使用mod_rewrite和服务器环境变量为您解决了这一问题:

Deny from 1.2.3.4
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REMOTE_ADDR} ^1\.2\.3\.4
    RewriteCond %{TIME} <20160827085500
    RewriteRule ^(.*)$ - [F,L]
</IfModule>
现在假设您想禁止ip 5分钟,您可以执行以下操作:

date('Ymdhis', strtotime('+5 minutes'))
并使用.htaccess中的输出


您可以阅读有关

的更多信息。您正在尝试做的事情正是您想要做的。@billynoah是的,但我只使用php和htaccess搜索解决方案,我了解。。这只是一个建议,以防你不知道。我会马上发布一个.htaccess解决方案,我完全同意这一点,这是一个比我在下面发布的更好的解决方案。。然而,我好奇地想知道,是否有可能将时间作为一种规则,其余的都是历史;-)
date('Ymdhis', strtotime('+5 minutes'))