2012-06-25 79 views
0

登錄嘗試失敗後,我想拒絕IP訪問服務器。我之前已經通過將IP或塊添加到/etc/apache2/httpd.conf文件中,從而拒絕訪問Web服務器。登錄嘗試失敗後拒絕apache2訪問

<Location "/"> 
    Order Allow,Deny 
    Allow from all 
    Deny from 1.2.3.4/30 3.4.5.6/15 
    Deny from 9.4.3.4 
</Location> 

人知道如何使用PHP編程方式做到這一點,或者是具有Apache2的查詢MySQL的一個以設定的間隔「IP-拒絕列表」?

謝謝!

編輯已完成的表格上澄清

提交,MySQL是用於查詢用戶名。如果找到用戶名,腳本繼續檢查pw,然後稍後檢查登錄失敗。如果登錄計數器失敗> = 4,則用戶的帳戶被鎖定,但他們仍然可以訪問服務器。

如果用戶名未找到,我查詢dif。用戶IP表。如果IP發現AND login_counter> = 4使用類似上面的apache2 httpd.conf的方法從服務器阻止IP。

* *最終編輯/想法

我怕我會打開一個更大的安全漏洞,如果我要奉獻www數據的用戶燙髮。編輯.htaccess文件,因爲沒有辦法參考。 .htaccess中的一個文件可能是www-data可寫的,這是我的解決方案。

如果用戶名不在db中,請將IP寫入數據庫並記錄每個IP的失敗嘗試次數。在站點重新訪問時,如果IP位於db並且嘗試> = 4,則登錄腳本die()。接下來,我將編寫一個外部腳本(不能通過www-data訪問),每天晚上輪詢db的IP地址,嘗試> = 4,並將它們添加到.htaccess。

+0

我傾向於在登錄頁面本身上使用login_log表執行此操作,並且每行都失敗或成功,如果嘗試失敗10次e在5分鐘內,我向他們展示了一個他們必須填寫的令人討厭的驗證碼,以證明他們並沒有打擊我的表格。雖然你必須更清楚,這是否應該阻止用戶登錄到您的網站或服務器? – Sammaye

回答

0

更新:原來你可以包含.htaccess裏面的文件,所以我做了一些修改。

所以這裏發生的是你拿.htaccess文件,刪除最後一行Allow from all然後附加新的拒絕規則,然後添加刪除的行。

.htaccess文件將是這樣的:

order Deny,Allow 
Deny from 9.4.3.4 
Allow from all 

當用戶超過登錄嘗試這樣做:

$file = file('.htaccess'); 
array_pop($file); 
$fh = fopen('.htaccess','w'); 
fwrite($fh, implode('',$file)); 
fclose($fh); 
$fh = fopen('.htaccess', 'a'); 
fwrite($fh, 'Deny from '.$_SERVER['REMOTE_ADDR']); 
fwrite($fh, 'Allow from all']); 
fclose($fh); 

好了,這是基本的想法,你可以把它和定製它並將其應用到您自己的環境中

+0

.htaccess = httpd.conf? – dan

+0

我並不是說我的評論有什麼不好的地方,我非常感謝你的幫助。我對apache2有點新,只是想知道.htaccess文件是否與httpd.conf文件是一樣的。 – dan

+0

好吧,然後我誤解了你(工作中的長日子)。那麼,'.htaccess'不是'httpd.conf',但有許多配置可以覆蓋甚至使用'.htaccess'文件添加。 – Adi