6 種類の CAPTCHA、1 つのプラットフォーム
業務シーンに合わせて検証方式を選択。すべての種類が同一 API・ダッシュボード・課金体系を共有します。
インビジブル
操作不要の検証です。低リスクのユーザーはチャレンジなしで通過します。
スライダーパズル
ピースを正しい位置までドラッグします。素早く直感的で、モバイルにも対応しています。
文字クリック
指定された文字を順番にタップ。OCR 系ボットに有効。
画像回転
写真を正しい向きまで回転させます。人には簡単で、ボットには困難です。
3D クリック
3D シーン内の対象をクリック。画像認識モデルに耐性。
図形クリック
重ね合わせ画像の指定図形や記号をクリック。
本番運用のための設計
大規模に安全な検証を運用するために必要なすべてを備えています。
スマートリスク制御
リアルタイムリスクスコアに応じて難度を自動調整。疑わしいセッションほど負荷が増えます。
グローバル CDN < 100ms
複数リージョンのエッジ配信で、世界中のユーザーに一貫した低レイテンシ体験。
マルチプラットフォーム SDK
Web、Android、iOS、Flutter、Electron に対応。プラットフォームごとにそのまま使えるコンポーネントを用意しています。
実ユーザーは無感通過
低リスクな訪問者はサイレントに通過。疑わしいトラフィックのみにチャレンジを表示。
自動化攻撃に強い
行動シグナル、デバイスフィンガープリント、進化し続けるチャレンジプールを組み合わせ。
分析と監査ログ
合格率・攻撃パターン・サイト別メトリクスを可視化する詳細ダッシュボード。
Private Access Tokens に対応
Web は、ユーザーを特定せずに実デバイスであることを保証する暗号的なアテステーショントークンへと移行しつつあります。CaptchaLa はこうしたトークンを信頼シグナルとして読み取ります。検証済みの訪問者はチャレンジなしで通過でき、それ以外の訪問者には引き続きリスクベースの検証を行います。これは追加的な仕組みであり、どちらか一方を選ぶ必要はありません。
CaptchaLa におけるアテステーションの仕組みプライバシー・バイ・デザイン
ユーザーを監視せずにサイトを守る検証です。CaptchaLa が収集したシグナルで何を行い、何を行わないかを明確にご説明します。
ファーストパーティのみ
すべてのリクエストは CaptchaLa 自社サーバーへ送られ、シグナルが Google や広告ネットワークと共有されることはありません。
トラッキング Cookie なし
Web SDK は Cookie を一切設定しないため、追跡される要素がありません。
クロスサイト追跡なし
デバイスシグナルはオリジン単位でサンドボックス化され、サイトを越えてユーザーを追跡できません。
GDPR フレンドリー
Cookie 不使用かつ厳密にセキュリティ目的のため、同意バナーは不要です。Google の広告グラフに供給する reCAPTCHA とは異なります。
必要最小限の設計
ボットを止めるのに必要な最小限のデバイス・行動シグナルのみを収集し、ファーストパーティでセキュリティ目的にのみ使用します。
比較してみる
主要な代替サービスと CaptchaLa の違い。
| 機能 | CaptchaLa | reCAPTCHA | hCaptcha |
|---|---|---|---|
| チャレンジ種類 | 6 種類 | 2 種類 | 2 種類 |
| インビジブル / 無摩擦モード | 対応 | 対応 | 対応 |
| ネイティブモバイル SDK | Android / iOS / Flutter | Android / iOS | Android / iOS |
| デスクトップ SDK(Electron) | 対応 | 非対応 | 非対応 |
| 自社ホスト / プライベートクラウド | エンタープライズ | 非対応 | 一部対応 |
| 透明な料金体系 | $0 から | クォータ課金 | フリーミアム |
数分で導入
ページにローダーを追加して init() を呼び出すと、保護が有効になります。
<!-- CaptchaLa ローダーを読み込む -->
<script src="https://cdn.captcha-cdn.net/captchala-loader.js"></script>
// CAPTCHA ウィジェットを初期化
Captchala.init({
appKey: 'YOUR_APP_KEY',
product: 'popup'
})
.appendTo('#captcha')
.onSuccess((result) => {
// サーバー側で token を検証
console.log('Token:', result.token);
});