PHP安全程式設計之暴力破解攻擊

2021-07-16 12:27:39 字數 2410 閱讀 5773

暴力攻擊是一種不使用任何特殊手段而去窮盡各種可能性的攻擊方式。它的更正式的叫法是窮舉攻擊——窮舉各種可能性的攻擊。

對於訪問控制,典型的暴力攻擊表現為攻擊者通過大量的嘗試去試圖登入系統。在多數情況下,使用者名稱是已知的,而只需要猜測密碼。

儘管暴力攻擊沒有技巧性可言,但詞典攻擊似乎有一定的技巧性。最大的區別是在進行猜測時的智慧型化。詞典攻擊只會最可能的情況列表中進行窮舉,而不像暴力攻擊一樣去窮舉所有的可能情況。

防止進行驗證嘗試或限制允許錯誤的次數還算是乙個比較有效的安全手段,但是這樣做的兩難之處在於如何在不影響合法使用者使用的情況下識別與阻止攻擊者。

在這種情況下,對一致性的判定可以幫助你區分二者。這個方法與前面所述的防止會話劫持的做法很相似,但區別是你要確定的是乙個攻擊者而不是乙個合法使用者。

考慮下面的html表單:

攻擊者會察看這個表單並建立一段指令碼來post合法的資料給

?>使這段指令碼,攻擊者還可以簡單地加入乙個迴圈來繼續嘗試不同的密碼,並在每次嘗試後檢查$http_response變數。一旦$http_response變數有變化,就可以認為猜測到了正確的密碼。

你可以通過很多安全措施去防止此類攻擊。我們注意到,在暴力攻擊中每次的http請求除了密碼是不同的,其他部分完全相同,這一點是很有價值的。

儘管在超過一定數量的失敗嘗試後臨時凍結帳號是一種有效的防範手段,但你可能會去考慮採用更確定的方式去凍結帳號,以使攻擊者更少地影響合法使用者對你的應用的正常使用。

還有一些流程也可以增大暴力攻擊的難度,使它不太可能成功。乙個簡單的遏制機制就能有效地做到這一點:

<?php  

/* mysql_connect() */

/* mysql_select_db() */

$clean = array();

$mysql = array();

$now = time();

$max = $now - 15;

$salt = 'shiflett';

if (ctype_alnum($_post['username']))

else

$clean['password'] = md5($salt . md5($_post['password'] . $salt));

$mysql['username'] = mysql_real_escape_string($clean['username']);

$sql = "select last_failure, password

from users

where username = ''";

if ($result = mysql_query($sql))

elseif ($record['password'] == $clean['password'])

else

'";

mysql_query($sql);

} } else

} else

?>

上例會限制在上次驗證失敗後對同一使用者再試嘗試的頻率。如果在一次嘗試失敗後的15秒內再次嘗試,不管密碼是否正確,驗證都會失敗。這就是這個方案的關鍵點。但簡單地在一次失敗嘗試後15秒內阻止訪問還是不夠的——在此時不管輸入是什麼,輸出也會是一致的,只有在登入成功後才會不同。否則,攻擊者只要簡單地檢查不一致的輸出即可確定登入是否成功。

來自:

暴力破解漏洞攻擊

一 暴力破解漏洞原理 暴力破解漏洞的產生來自於伺服器並沒有對輸入引數的內容,輸入引數次數進行限制。導致攻擊者可以通過暴力的手段進行破解所需要的資訊。二 暴力破解例項 注釋 演示環境dvwa測試環境,安全等級 low 暴力破解工具burpsuite,2.1 解析 isset 函式 檢測變數是否已經設定...

防禦暴力破解SSH攻擊

託管在idc的機器我們通常都用ssh方式來遠端管理.但是經常可以發現log watch的日誌中有大量試探登入的 資訊,為了我們的主機安全,有必要想個方法來阻擋這些可恨的 hacker 1 vi etc ssh sshd config port 22 預設埠為22,為了避免被掃瞄,去掉 改成乙個其他的...

Web安全之暴力破解

暴力破解,顧名思義簡單粗暴直接,我理解為將所有的 答案 都進行嘗試直到找到正確的 答案 當然我們不可能將所有的 答案 都進行嘗試,所以我們只能將所有最有可能是正確的 答案 進行嘗試即可 工具 burpsuite 平台 pikachu 首先開啟pikachu網頁中暴力破解的基於表單的暴力破解一欄。同時...