本頁說明如何使用 reCAPTCHA 偵測及防範帳戶盜用 (ATO) 行為。
發生帳戶盜用攻擊時,攻擊者通常會使用從資料侵害事件取得的憑證 (也稱為密碼傾印),向 API 端點傳送登入要求。即使密碼傾印來自不相關的網站,這類攻擊仍可能成功,因為使用者往往會在多個帳戶中重複使用密碼。只要使用者養成良好的密碼習慣 (例如使用密碼管理工具),就不會受到這類攻擊影響。
事前準備
偵測並防範帳戶盜用
您可以透過 reCAPTCHA 偵測及防範帳戶盜用,方法如下:
使用「我不是機器人」核取方塊
在網站上新增「我不是機器人」核取方塊,是防範帳戶盜用的最快速簡單方法,不必整合簡訊或電子郵件驗證等額外功能。攻擊者必須付出代價才能破解這項防護機制,因此對某些網站來說,這個選項可能就已足夠。
在網頁上新增「我不是機器人」核取方塊。
以下程式碼是受核取方塊保護的登入頁面即時範例:
function onSuccess(token) {
// The token is included in the POST data in the g-recaptcha-response
// parameter. The backend must create an Assessment with the token
// and verify the token is valid.
console.log(token);
}<form id="loginForm" action="?" method="POST">
Username: <input type="text" name="username"/><br/>
Password: <input type="password" name="password"/><br/>
<div class="g-recaptcha" data-sitekey="reCATCHA_sitekey"
data-action="account_login" data-callback="onSuccess"></div>
</form><script src="https://www.google.com/recaptcha/enterprise.js" async defer></script>
您可以按一下程式碼視窗右上角的 <> 圖示,在 JSFiddle 中測試這個程式碼。
<html>
<head>
<title>Account Login - Checkbox</title>
<script src="https://www.google.com/recaptcha/enterprise.js" async defer></script>
<script>
function onSuccess(token) {
// The token is included in the POST data in the g-recaptcha-response
// parameter. The backend must create an Assessment with the token
// and verify the token is valid.
console.log(token);
}
</script>
</head>
<body>
<form id="loginForm" action="?" method="POST">
Username: <input type="text" name="username"/><br/>
Password: <input type="password" name="password"/><br/>
<div class="g-recaptcha" data-sitekey="6LeAkOgUAAAAACcy3uY6N9H9SJMS27n3Zx2OOnYK"
data-action="account_login" data-callback="onSuccess"></div>
</form>
</body>
</html>使用分數和自訂挑戰
如要防範 ATO,請使用 reCAPTCHA 評分機制金鑰,並採用多重驗證 (MFA) 挑戰,例如電子郵件和簡訊挑戰,系統會將一次性密碼 (OTP) 傳送給使用者。
如要使用以分數為依據的金鑰和自訂挑戰,請考慮下列選項:
安裝計分金鑰,偵測大規模帳戶盜用事件中的自動化行為。
如要在網頁中安裝分數制金鑰,請參閱「在網頁中安裝分數制金鑰」。
如要在行動應用程式中安裝評分型金鑰,請參閱「將 reCAPTCHA 整合至 Android 應用程式」或「將 reCAPTCHA 整合至 iOS 應用程式」。
在登入或執行敏感操作時,使用多重驗證來驗證帳戶擁有權。
詳情請參閱「設定多重驗證」。
視用途而定,您可以單獨使用 MFA,也可以搭配根據分數的密鑰。舉例來說,您可能只想針對低於特定門檻的分數使用多重驗證挑戰,以減少阻力。
以下範例說明如何在登入情境中整合以分數為準的索引鍵。
function submitForm() {
grecaptcha.enterprise.ready(function() {
grecaptcha.enterprise.execute(
'reCAPTCHA_site_key', {action: 'account_login'}).then(function(token) {
document.getElementById("token").value = token;
document.getElementByID("loginForm").submit();
});
});
}<form id="loginForm" action="?" method="POST"> Username: <input type="text" name="username"/><br/> Password: <input type="password" name="password"/><br/> <input type="hidden" id="token" name="recaptcha_token"/> <button onclick="submitForm()">Login</button> </form>
<script src="https://www.google.com/recaptcha/enterprise.js" async defer></script>
您可以按一下程式碼視窗右上角的 <> 圖示,在 JSFiddle 中測試這個程式碼。
<html>
<head>
<title>Account Login - Score</title>
<script src="https://www.google.com/recaptcha/enterprise.js" async defer></script>
<script>
function submitForm() {
grecaptcha.enterprise.ready(function() {
grecaptcha.enterprise.execute(
'reCAPTCHA_site_key', {action: 'account_login'}).then(function(token) {
document.getElementById("token").value = token;
document.getElementByID("loginForm").submit();
});
});
}
</script>
</head>
<body>
<form id="loginForm" action="?" method="POST">
Username: <input type="text" name="username"/><br/>
Password: <input type="password" name="password"/><br/>
<input type="hidden" id="token" name="recaptcha_token"/>
<button onclick="submitForm()">Login</button>
</form>
</body>
</html>後續步驟
- 如要瞭解其他帳戶保護功能,請參閱「使用者帳戶保護功能」。