दुरुपयोग-रोधी और कोड सुरक्षा

प्रीव्यू में

कोड एक रहस्य है। हम इसे वैसा ही मानते हैं।

इसमें सेट अप करें:
Cursor

एक वन-टाइम कोड उतना ही अच्छा होता है जितना उसे जेनरेट, स्टोर और रेट-लिमिट करने का तरीका। Bird Verify कोड को क्रिप्टोग्राफिक स्रोत से जेनरेट करता है, केवल एक hash स्टोर करता है, कॉन्स्टेंट टाइम में तुलना करता है, और सेंड तथा अनुमान दोनों को सीमित करता है — ताकि लीक हुआ log या ब्रूट-फोर्स लूप किसी हमलावर को कहीं न पहुँचाए। Fraud स्कोरिंग इसी नींव पर आगे बनती है।

verify.ts
200 · pending
import { BirdClient } from "@messagebird/sdk";

const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });

// Send the code, then check it by recipient.
await bird.verify.verifications.create({
  to: { phone_number: "+15551234567" },
}).safe();

const { data } = await bird.verify.verifications.check({
  to:   { phone_number: "+15551234567" },
  code: userInput,
}).safe();

सुरक्षा जो डिफ़ॉल्ट रूप से चालू है, कोई ऐड-ऑन नहीं।

Bird Verify API पर हर वेरिफ़िकेशन में एक जैसी सुरक्षा होती है: कोड सर्वर-साइड जेनरेट होता है, कभी लौटाया नहीं जाता, और केवल hash के रूप में स्टोर होता है; जाँच कॉन्स्टेंट टाइम में और एक सीमित अटेम्प्ट बजट के भीतर चलती है; और सेंड प्रति-प्राप्तकर्ता तथा प्रति-workspace सीमित होते हैं। आपको इन्हें ऑप्ट-इन या वायर करने की जरूरत नहीं — API ऐसे ही व्यवहार करती है, चाहे आप इसे two-factor login के रूप में चलाएं या passwordless sign-in के रूप में।

हर वेरिफ़िकेशन पर पाँच सुरक्षाएँ।

कोई सेटअप स्टेप नहीं, कोई ऐड-ऑन SKU नहीं।

  1. 01

    क्रिप्टोग्राफिक जेनरेशन।

    कोड एक क्रिप्टोग्राफिक रैंडम स्रोत से लिए जाते हैं, कोड स्पेस में समान रूप से वितरित, न कि किसी पूर्वानुमानित काउंटर या टाइमस्टैम्प से।

  2. 02

    आराम की स्थिति में hash, वायर पर कभी बाहर नहीं।

    प्रत्येक कोड का केवल एक HMAC-SHA256 स्टोर होता है; plaintext कभी API द्वारा लौटाया नहीं जाता और न ही आपके स्टैक या हमारे logs में लिखा जाता है।

  3. 03

    कॉन्स्टेंट-टाइम तुलना।

    सबमिट किए गए कोड की तुलना कॉन्स्टेंट टाइम में होती है, इसलिए किसी हमलावर को इससे कुछ पता नहीं चलता कि जाँच में कितना समय लगा।

  4. 04

    अटेम्प्ट लॉकआउट।

    प्रत्येक सेशन में जाँच की एक सीमित संख्या होती है (डिफ़ॉल्ट रूप से 5)। एक बार ये खत्म होने पर सेशन विफल हो जाता है, इसलिए अनुमान लगाना हमेशा नहीं चल सकता।

  5. 05

    सेंड कैप और कोटा।

    एक प्रति-प्राप्तकर्ता सेंड कैप, एक रीसेंड कूलडाउन, और एक प्रति-workspace दैनिक कोटा खर्च और दुरुपयोग की सतह को सीमित करते हैं, हर एक Retry-After के साथ 429।

अनुमान आपके उपयोगकर्ताओं से पहले खत्म हो जाते हैं।

गलत कोड एक परिणाम के रूप में शेष अटेम्प्ट के साथ वापस आता है, और बजट खत्म होते ही सेशन विफल हो जाता है, इसलिए ब्रूट-फोर्स लूप एक खुले दरवाजे के बजाय एक दीवार से टकराता है।

lockout.ts
200
const { data } = await bird.verify.verifications.check({
  to:   { phone_number: "+15551234567" },
  code: guess,
}).safe();

// wrong code, attempts left → { result: "invalid", attempts_remaining: 2 }
// budget spent, session done → { result: "failed", attempts_remaining: null }
आगे आने वाला

आगे आने वाला: fraud सिग्नल और SMS-पंपिंग सुरक्षा।

Verify आज जो प्रति-सेंड इतिहास रिकॉर्ड करता है, वह उस fraud लेयर की नींव है जिसे हम अभी बना रहे हैं। यह उन्हीं create और check कॉल्स पर चलती है — इसलिए बाद में इसे अपनाना एक config बदलाव है, न कि फिर से इंटीग्रेशन।

Create पर रिस्क सिग्नल। किसी वेरिफ़िकेशन पर device, IP और request context पास करें, और हाई-रिस्क अटेम्प्ट को कोड भेजे जाने से पहले ही blocked परिणाम मिल जाता है — ताकि आप किसी हमलावर को मैसेज करने का भुगतान न करें।

SMS-पंपिंग और AIT सुरक्षा। प्रति-देश और प्रति-prefix सेंड कैप साथ ही प्रति-workspace खर्च सीमा उस artificially-inflated-traffic हमले को रोकती है जो carrier राजस्व हिस्सेदारी के लिए OTP को प्रीमियम नंबर रेंज तक पहुँचाता है।

जो पहले से मौजूद है उसी पर बना। रिस्क निर्णय उस अटेम्प्ट इतिहास को पढ़ता है जिसे Verify पहले दिन से रखता है, और blocked परिणाम पहले से ही status मॉडल का हिस्सा है — इसलिए fraud लेयर आपके इंटीग्रेशन को दोबारा आकार दिए बिना आ जाती है।

वेरिफ़िकेशन सुरक्षा FAQ

वन-टाइम कोड कहाँ स्टोर होता है?+
केवल एक HMAC-SHA256 hash के रूप में। Bird कोड को एक क्रिप्टोग्राफिक रैंडम स्रोत से जेनरेट करता है, उसे भेजता है, और तुलना के लिए hash रखता है — plaintext कभी API द्वारा लौटाया नहीं जाता या logs में लिखा जाता।
आप किसी को कोड ब्रूट-फोर्स करने से कैसे रोकते हैं?+
प्रत्येक सेशन में जाँच की एक सीमित संख्या होती है (डिफ़ॉल्ट रूप से 5), और प्रत्येक की तुलना कॉन्स्टेंट टाइम में होती है ताकि टाइमिंग से कुछ लीक न हो। एक बार बजट खत्म होने पर सेशन विफल हो जाता है, इसलिए हमलावर अनुमान लगाना जारी नहीं रख सकता।
SMS पंपिंग और artificially inflated traffic के बारे में क्या?+
प्रति-प्राप्तकर्ता सेंड कैप और एक प्रति-workspace दैनिक कोटा आज खर्च को सीमित करते हैं। समर्पित fraud स्कोरिंग और SMS-पंपिंग सुरक्षा आगे आ रही है, जो उस प्रति-सेंड इतिहास पर बनी है जिसे Verify पहले से रिकॉर्ड करता है।
क्या इन सुरक्षाओं की अतिरिक्त लागत लगती है?+
नहीं। क्रिप्टोग्राफिक जेनरेशन, hashed स्टोरेज, कॉन्स्टेंट-टाइम जाँच, अटेम्प्ट लॉकआउट, और सेंड कैप हर वेरिफ़िकेशन के व्यवहार का हिस्सा हैं — खरीदने के लिए कोई सुरक्षा टियर नहीं है।
मेरे उपयोगकर्ता किसकी ओर से कोड देखते हैं?+
Authifly, Bird का वेरिफ़िकेशन ब्रांड। यह हर उस कोड की पहचान है जो आपके उपयोगकर्ता प्राप्त करते हैं: email otp@verify.authifly.com या आपके अपने verified डोमेन से आता है, और SMS तथा WhatsApp Authifly-ब्रांडेड होते हैं। authifly.com एक सार्वजनिक पेज है जो प्राप्तकर्ताओं को आश्वस्त करता है कि Authifly किसी बिज़नेस की ओर से वैध वन-टाइम कोड भेजता है। Bird वह प्लेटफ़ॉर्म है जिस पर आप बनाते हैं; Authifly वह है जो प्राप्तकर्ता देखता है।

कोड जिस तरह जेनरेट, स्टोर और रेट-लिमिट होने चाहिए, उसी तरह होते हैं।

सुरक्षा Bird Verify में बिल्ट-इन है, ऊपर से बेची नहीं जाती: चैनल, कोड और लिमिट वही दो endpoints हैं।

एक चैनल से शुरुआत करें।
तैयार होने पर बाकी जोड़ें।

एक test API key तुरंत आपकी है। जब आप payment method जोड़ते हैं और sender verify करते हैं, तब production अनलॉक हो जाता है।

Claude Code, Cursor या Codex इस्तेमाल कर रहे हैं? एक setup prompt कॉपी करें और आपका agent आपके लिए Bird CLI और skills इंस्टॉल कर देगा। अपना चुनें:

Cursor