Mendeteksi dan mencegah pengambilalihan akun

Halaman ini menjelaskan cara mendeteksi dan mencegah pengambilalihan akun (ATO) menggunakan reCAPTCHA Enterprise.

Serangan ATO biasanya terjadi saat penyerang mengirim permintaan untuk login ke endpoint API menggunakan kredensial yang diperoleh dari pelanggaran data, yang juga dikenal sebagai password dump. Jenis serangan ini dapat berhasil, meskipun file dump sandi berasal dari situs yang tidak terkait, karena manusia cenderung menggunakan sandi yang sama di beberapa akun. Jenis serangan ini tidak memengaruhi pengguna yang mempraktikkan kebersihan sandi yang benar, seperti menggunakan pengelola sandi.

Sebelum memulai

Siapkan lingkungan Anda untuk reCAPTCHA Enterprise.

Mendeteksi dan mencegah ATO

Dengan reCAPTCHA Enterprise, Anda dapat mendeteksi dan mencegah ATO menggunakan salah satu opsi berikut:

Gunakan kotak centang Saya bukan robot

Menambahkan kotak centang Saya bukan robot ke situs Anda adalah cara tercepat dan termudah untuk memberikan perlindungan terhadap ATO tanpa harus mengintegrasikan fitur tambahan, seperti SMS atau verifikasi email. Penyerang menimbulkan biaya untuk merusak perlindungan ini dan opsi ini mungkin cukup untuk beberapa situs.

Tambahkan kotak centang "Saya bukan robot" di halaman web Anda.

Kode berikut adalah contoh langsung halaman login sederhana yang dilindungi oleh kotak centang:

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>

Anda dapat bereksperimen dengan kode ini di JSFiddle dengan mengklik ikon <> di sudut kanan atas jendela kode.

<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>

Gunakan skor dan tantangan khusus

Agar terlindung dari ATO, gunakan kunci berbasis skor reCAPTCHA dan gunakan tantangan autentikasi Multi-faktor (MFA), seperti verifikasi email dan SMS saat kode sekali pakai (OTP) dikirim kepada pengguna.

Untuk menggunakan kunci berbasis skor dan tantangan kustom, pertimbangkan opsi berikut:

Bergantung pada kasus penggunaan, Anda dapat menggunakan MFA sendiri atau dengan kunci berbasis skor. Misalnya, Anda mungkin lebih suka menggunakan tantangan MFA hanya untuk skor di bawah nilai minimum tertentu guna mengurangi hambatan.

Contoh berikut menunjukkan cara mengintegrasikan kunci berbasis skor dalam skenario login.

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>

Anda dapat bereksperimen dengan kode ini di JSFiddle dengan mengklik ikon <> di sudut kanan atas jendela kode.

<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>

Langkah selanjutnya