Secure Text Entry — یہ کیا ہے، Android میں ان پٹ تحفظ اور پاس ورڈ

مصنف: IT Sectr اشاعت: 2026-07-07 مطالعے کا وقت: 9 منٹ

Secure Text Entry Android میں ایک ٹیکسٹ ان پٹ موڈ ہے جس میں درج کردہ کریکٹرز اصلی کریکٹرز کی بجائے پوشیدہ شکل میں (نقاط یا ستاروں) دکھائے جاتے ہیں۔ یہ موڈ پاس ورڈ فیلڈز، PIN کوڈز، CVV کوڈز اور دیگر خفیہ معلومات کے لیے استعمال ہوتا ہے۔ Secure Text Entry نہ صرف ڈیٹا کو بصری مداخلت سے بچاتا ہے بلکہ اسکرین شاٹس، اسکرین ریکارڈنگز اور آٹو کریکٹ فیچرز کے ذریعے رساو کو بھی روکتا ہے۔ Android Security Best Practices (2026) کے مطابق، پوشیدہ ان پٹ ان ایپلیکیشنز کے لیے لازمی ضرورت ہے جو صارفین کی تصدیقی ڈیٹا پر کارروائی کرتی ہیں۔

اہم نکات

  • Secure Text Entry — پوشیدہ ان پٹ موڈ جو پاس ورڈ درج کرتے وقت کریکٹرز کی بجائے نقاط دکھاتا ہے۔
  • فعالیت — XML میں inputType="textPassword" یا کوڈ میں TYPE_TEXT_VARIATION_PASSWORD کے ذریعے۔
  • تحفظ — بصری مداخلت، اسکرین شاٹس اور آٹو کریکٹ/لغت کے ذریعے رساو کو روکتا ہے۔
  • TransformationMethod — Android طریقہ کار جو کریکٹر ڈسپلے کو پوشیدہ علامتوں سے بدل دیتا ہے۔
  • ویزیبلٹی ٹوگل — TextInputLayout میں endIconMode="password_toggle" کے ذریعے پاس ورڈ دکھانے کی صلاحیت۔

Android میں Secure Text Entry کیا ہے

Secure Text Entry (محفوظ ٹیکسٹ ان پٹ) ایک Android فیچر ہے جو درج کردہ ہر کریکٹر کے ڈسپلے کو ایک ماسکنگ کریکٹر، عام طور پر ایک نقطہ (•) یا ستارہ (*) سے بدل دیتا ہے۔ یہ کندھے پر جھانک کر (shoulder surfing) پاس ورڈ پڑھنے سے روکتا ہے اور درج کردہ ڈیٹا کو چھپی ہوئی نظروں سے چھپاتا ہے۔ اس فیچر کو پاس ورڈ ماسکنگ بھی کہا جاتا ہے اور یہ موبائل ایپلیکیشنز میں ایک معیاری عمل ہے۔

iOS کے برعکس، جہاں Secure Text Entry ایک علیحدہ UITextField سیٹنگ ہے، Android میں یہ فیچر PASSWORD ویریشن کے ساتھ inputType ایٹریبیوٹ کے ذریعے فعال ہوتا ہے۔ جب EditText inputType="textPassword" وصول کرتا ہے، یہ خود بخود PasswordTransformationMethod لاگو کرتا ہے — ایک کلاس جو کریکٹر تبدیل کرنے کی ذمہ دار ہے۔ جب بھی نیا کریکٹر درج کیا جاتا ہے، EditText اسے TransformationMethod انٹرفیس کے طریقہ کار کے ذریعے فوری طور پر ماسکنگ کریکٹر سے بدل دیتا ہے۔

Android Source Code (AOSP, 2026) کے مطابق، PasswordTransformationMethod کا نفاذ ماسکنگ کریکٹرز کو رینڈر کرنے کے لیے TextPaint کلاس استعمال کرتا ہے۔ ماسکنگ کریکٹر کا سائز فیلڈ کے فونٹ سائز سے مماثل ہوتا ہے، جو لفظ کی لمبائی کے ذریعے معلومات کے رساو کو روکتا ہے — تمام کریکٹر چوڑائی میں یکساں نظر آتے ہیں۔ یہ درج کردہ ڈیٹا کی لمبائی کے تجزیے پر مبنی حملوں سے تحفظ کے لیے اہم ہے۔

xml
<!-- Basic Secure Text Entry example -->
@+id/etPassword
android:layout_width="match_parent"
android:hint="Enter password"
android:inputType="textPassword"
android:maxLength="64"
android:importantForAutofill="yes" />

Secure Text Entry کیسے کام کرتا ہے

Android میں Secure Text Entry کا طریقہ کار TransformationMethod انٹرفیس پر مبنی ہے، جو android.text.method پیکج میں بیان کیا گیا ہے۔ PasswordTransformationMethod ایک بلٹ ان نفاذ ہے جو getTransformation() میتھڈ کو اوور رائڈ کرتا ہے، ڈسپلے کے لیے تبدیل شدہ کریکٹر سیکوئنس واپس کرتا ہے۔ Editable میں اصل ٹیکسٹ تبدیل نہیں ہوتا — صرف اس کا بصری نمائندہ تبدیل ہوتا ہے۔

جب صارف ایک کریکٹر درج کرتا ہے، EditText dispatchEvent کال کرتا ہے اور کریکٹر InputConnection کو بھیجتا ہے، جو اسے Editable میں شامل کرتا ہے۔ پھر EditText موجودہ TransformationMethod کا getTransformation() میتھڈ کال کرتا ہے، جو اصل CharSequence لیتا ہے اور ماسکنگ کریکٹرز کے ساتھ SpannableString واپس کرتا ہے۔ یہ SpannableString اصل ٹیکسٹ کی بجائے اسکرین پر رینڈر ہوتا ہے۔ اہم خصوصیت یہ ہے کہ تبدیلی خود Editable مواد کو تبدیل نہیں کرتی، اس لیے getText().toString() کال کرنے پر اصل درج کردہ ٹیکسٹ واپس آتا ہے۔

Android Developers Reference (2026) کے مطابق، PasswordTransformationMethod ہر کریکٹر میں MetricAffectingSpan شامل کرتا ہے، جو گلائف کو ایک نقطے سے بدل دیتا ہے۔ یہ اسپین ٹیکسٹ کی لمبائی کو متاثر نہیں کرتے، اس لیے پوشیدہ ڈسپلے کے باوجود کرسر اور ان پٹ پوزیشن صحیح طور پر محفوظ رہتی ہے۔ VisiblePasswordTransformationMethod بھی موجود ہے، جو آخری درج کردہ کریکٹر کو تھوڑی دیر کے لیے دکھاتا ہے (iOS کی طرح)۔

kotlin
// PasswordTransformationMethod - built-in masking
editText.transformationMethod = PasswordTransformationMethod.getInstance()

// VisiblePasswordTransformationMethod - shows last char
editText.transformationMethod = VisiblePasswordTransformationMethod.getInstance()

پاس ورڈ ویزیبلٹی ٹوگل

ویزیبلٹی ٹوگل (password visibility toggle) ایک فیچر ہے جو صارف کو فارم جمع کرانے سے پہلے تصدیق کے لیے عارضی طور پر درج کردہ پاس ورڈ دکھانے کی اجازت دیتا ہے۔ Android میں، یہ فیچر app:endIconMode="password_toggle" ایٹریبیوٹ کے ساتھ TextInputLayout کے ذریعے لاگو کیا جاتا ہے۔ آنکھ کے آئیکن کو چھونے پر، فیلڈ textPassword اور textVisiblePassword کے درمیان سوئچ ہوتا ہے۔

TextInputLayout میں password_toggle کا نفاذ خود بخود اندرونی EditText کے inputType کو تبدیل کرتا ہے اور آئیکن کو متحرک کرتا ہے (آنکھ کھلی/بند)۔ یہ یاد رکھنا ضروری ہے کہ اس سوئچنگ کے دوران کرسر پوزیشن ری سیٹ ہو سکتی ہے، اس لیے TextInputLayout موڈ تبدیل کرنے کے بعد پوزیشن کو محفوظ اور بحال کرتا ہے۔ نیز، ویزیبل پاس ورڈ پر سوئچ کرتے وقت، آٹو کریکٹ اور تجاویز فعال نہیں ہوتیں — TYPE_TEXT_VARIATION_VISIBLE_PASSWORD استعمال ہوتا ہے، عام ٹیکسٹ نہیں۔

Material Design Guidelines (2025) کے مطابق، پاس ورڈ دکھانے والا آئیکن ہمیشہ نظر آنا چاہیے، نہ کہ صرف اس وقت جب فیلڈ فوکس میں ہو۔ صارف کو کسی بھی وقت پاس ورڈ تصدیق کرنے کے قابل ہونا چاہیے۔ آئیکن کو ایک خاص وقت کے بعد خود بخود پاس ورڈ نہیں چھپانا چاہیے — صرف صارف کے عمل پر۔

xml
<!-- TextInputLayout with password toggle -->
@+id/tilPassword
android:layout_width="match_parent"
app:endIconMode="password_toggle"
app:passwordToggleTint="@color/primary">

    @+id/etPassword
    android:inputType="textPassword"
    android:hint="Password" />

</com.google.android.material.textfield.TextInputLayout>

Secure Text Entry کی پروگرامیٹک کنفیگریشن

Kotlin میں Secure Text Entry کی پروگرامیٹک سیٹنگ inputType سیٹ کرکے یا setTransformationMethod() کے ذریعے کی جاتی ہے۔ دونوں طریقے ایک ہی نتیجہ دیتے ہیں لیکن تفصیلات میں مختلف ہیں۔ inputType سیٹ کرنا اضافی طور پر آٹو کریکٹ اور تجاویز کو کنفیگر کرتا ہے، جبکہ setTransformationMethod صرف کریکٹر ڈسپلے کو متاثر کرتا ہے۔

TextInputLayout کے ذریعے پاس ورڈ ٹوگل کی مثال

kotlin
// Programmatic password visibility toggle
fun togglePasswordVisibility(til: TextInputLayout) {
    val editText = til.editText ?: return
    val currentType = editText.inputType
    val isPassword = (currentType and
        InputType.TYPE_TEXT_VARIATION_PASSWORD) != 0

    if (isPassword) {
        editText.inputType = InputType.TYPE_CLASS_TEXT or
            InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
    } else {
        editText.inputType = InputType.TYPE_CLASS_TEXT or
            InputType.TYPE_TEXT_VARIATION_PASSWORD
    }

    // Restore cursor position
    val cursorPos = editText.selectionStart
    editText.setSelection(maxOf(0, cursorPos))
}

کسٹم TransformationMethod

kotlin
// Custom masking — shows only last 4 chars
class PartialPasswordTransformation : TransformationMethod {
    override fun getTransformation(source: CharSequence?,
        view: View?): CharSequence {
        val text = source?.toString() ?: ""
        if (text.length <= 4) return text

        val dots = "\u2022".repeat(text.length - 4)
        return dots + text.substring(text.length - 4)
    }

    override fun onFocusChanged(view: View?,
        sourceText: CharSequence?,
        focused: Boolean,
        direction: Int,
        previouslyFocusedRect: android.graphics.Rect?) {}
}

پوشیدہ ان پٹ کے تحفظ کے پہلو

Secure Text Entry متعدد سطحوں پر تحفظ فراہم کرتا ہے۔ بصری ماسکنگ کندھے پر جھانک کر (shoulder surfing) پاس ورڈ پڑھنے سے روکتی ہے — عوامی مقامات پر پاس ورڈ چوری کا سب سے عام طریقہ۔ آٹو کریکٹ کو غیر فعال کرنا پاس ورڈ کو صارف کی لغت میں محفوظ ہونے سے روکتا ہے، پیش گوئی ان پٹ کے ذریعے رساو کو ختم کرتا ہے۔ اسکرین شاٹس سے تحفظ (اگر FLAG_SECURE فعال ہے) دوسری ایپلیکیشنز کو فیلڈ کے مواد کی گرفت کرنے سے روکتا ہے۔

تاہم، Secure Text Entry مکمل تحفظ نہیں ہے۔ سسٹم لیول پر ان پٹ مداخلت (keylogging) کے حملے InputConnection سے اصلی کریکٹرز حاصل کر سکتے ہیں۔ ایکسیسبیلٹی سروس والی نقصان دہ ایپلیکیشنز EditText مواد پڑھ سکتی ہیں، چاہے کریکٹر اسکرین پر پوشیدہ ہوں۔ نیز، سرور کو ڈیٹا منتقلی کے دوران SSL سنفنگ پاس ورڈ ظاہر کر سکتی ہے اگر مناسب سرٹیفکیٹ تصدیق کے ساتھ HTTPS استعمال نہ کیا جائے۔

OWASP Mobile Security Testing Guide (2025) کے مطابق، Android میں زیادہ سے زیادہ پاس ورڈ تحفظ کے لیے تجویز کیا جاتا ہے: اہم فیلڈز کے لیے inputType="textPassword" + autofill غیر فعال کریں؛ پاس ورڈ کو ضرورت سے زیادہ دیر میموری میں کیش نہ کریں؛ ایپلیکیشن چھوٹی کرتے وقت پاس ورڈ فیلڈ صاف کریں (onPause/onStop)؛ پاس ورڈ کے مختصر ڈسپلے کے دوران بھی ماسکنگ استعمال کریں۔

تحفظ کی سطحSecure Text Entryاضافی اقدامات
بصری مداخلتکریکٹر ماسکنگبایومیٹرک تصدیق، shoulder surfing سے بچنا
اسکرین شاٹسجزوی (نفاذ پر منحصر)Window پر FLAG_SECURE
کی لاگنگتحفظ نہیں کرتامحفوظ ان پٹ والا IME استعمال کریں
آٹو کریکٹ/لغتغیر فعالپاس ورڈ کے لیے ڈیفالٹ طور پر غیر فعال
نیٹ ورک مداخلتتحفظ نہیں کرتاسرٹیفکیٹ پننگ کے ساتھ HTTPS

Secure Text Entry کے بہترین طرز عمل

Android ڈویلپرز کو پوشیدہ ان پٹ کے ساتھ کام کرتے وقت کئی اہم طریقوں پر عمل کرنا چاہیے۔ پہلا، پاس ورڈ فیلڈز کے لیے ہمیشہ endIconMode="password_toggle" کے ساتھ TextInputLayout استعمال کریں — یہ جدید Material Design معیار ہے۔ دوسرا، پاس ورڈ دکھانے کی صلاحیت کو غیر فعال نہ کریں — صارف کو یہ تصدیق کرنے کے قابل ہونا چاہیے کہ اس نے کیا درج کیا، خاص طور پر چھوٹے کی بورڈ والے موبائل آلات پر۔

Secure Text Entry کو مناسب آٹو فل کنفیگریشن بھی درکار ہے۔ پاس ورڈ فیلڈز کے لیے، ہمیشہ autofillHints="password" یا autofillHints="newPassword" بتائیں تاکہ پاس ورڈ مینیجرز ڈیٹا کو صحیح طور پر بھر اور محفوظ کر سکیں۔ نئے پاس ورڈ کی تصدیق والے فیلڈ کے لیے autofillHints="newPassword" استعمال کریں تاکہ سسٹم اسے موجودہ محفوظ کردہ پاس ورڈ سے بھرنے کا مشورہ نہ دے۔

  • TextInputLayout — ویزیبلٹی ٹوگل کے لیے endIconMode کے ساتھ Material Design TextInputLayout استعمال کریں۔
  • Autofill — مینیجر سپورٹ کے لیے autofillHints="password" اور importantForAutofill="yes" شامل کریں۔
  • صفائی — ایپلیکیشن چھوٹی کرتے وقت پاس ورڈ فیلڈ صاف کریں (onPause/onStop)۔
  • لمبائی — پاس ورڈ کی لمبائی بہت سختی سے محدود نہ کریں (کم از کم 8 کریکٹر، کوئی سخت زیادہ سے زیادہ نہیں)۔
  • بایومیٹرکس — دستی پاس ورڈ ان پٹ کے متبادل کے طور پر بایومیٹرک لاگ ان (BiometricPrompt) پیش کریں۔
kotlin
// Full password field with autofill and cleanup
class SecurePasswordField {
    private fun setupPasswordField(til: TextInputLayout) {
        val editText = til.editText ?: return
        editText.inputType = InputType.TYPE_CLASS_TEXT or
            InputType.TYPE_TEXT_VARIATION_PASSWORD
        editText.setAutofillHints(View.AUTOFILL_HINT_PASSWORD>)
        editText.importantForAutofill = View.IMPORTANT_FOR_AUTOFILL_YES
    }

    fun clearOnPause(editText: EditText) {
        editText.text?.clear()
    }
}

اکثر پوچھے گئے سوالات

textPassword اور textVisiblePassword میں کیا فرق ہے؟

textPassword درج کردہ تمام کریکٹرز کو چھپاتا ہے اور آٹو کریکٹ کو غیر فعال کرتا ہے۔ textVisiblePassword بھی آٹو کریکٹ کو غیر فعال کرتا ہے لیکن کریکٹرز کو واضح طور پر دکھاتا ہے۔ textVisiblePassword پاس ورڈ ویزیبلٹی ٹوگل کرتے وقت استعمال ہوتا ہے — یہ عام ٹیکسٹ نہیں ہے، کیونکہ تحفظ کے لیے آٹو کریکٹ اور تجاویز غیر فعال رہتی ہیں۔

کیا میں پاس ورڈ ماسکنگ کے لیے کسٹم کریکٹر بنا سکتا ہوں؟

ہاں، ایک کسٹم کلاس بنائیں جو TransformationMethod انٹرفیس کو لاگو کرے۔ getTransformation() میتھڈ کو اوور رائڈ کریں جو مطلوبہ تبدیل کرنے والے کریکٹر کے ساتھ CharSequence واپس کرے۔ اسے editText.transformationMethod = CustomPasswordTransformation() کے ذریعے سیٹ کریں۔ یاد رکھیں کہ تحفظ کے لیے کریکٹر مونوسپیسد ہونا چاہیے۔

پاس ورڈ دکھانے کی صلاحیت کو غیر فعال کرنے کی سفارش کیوں نہیں کی جاتی؟

چھوٹی اسکرینوں اور ٹچ کی بورڈ والے موبائل آلات پر، پاس ورڈ درج کرتے وقت غلطی کا امکان ڈیسک ٹاپ کے مقابلے میں نمایاں طور پر زیادہ ہوتا ہے۔ درج کردہ پاس ورڈ کی تصدیق کرنے کی صلاحیت ان پٹ کی غلطیاں کم کرتی ہے اور پاس ورڈ ری سیٹ کی درخواستوں کی تعداد گھٹاتی ہے، جس سے صارف کے تجربے میں بہتری آتی ہے اور سپورٹ کا بوجھ کم ہوتا ہے۔

ایپلیکیشن اسکرین شاٹس سے پاس ورڈ کیسے بچائیں؟

Activity یا Dialog ونڈو پر FLAG_SECURE پرچم سیٹ کریں: window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)۔ یہ پوری ونڈو کے لیے اسکرین شاٹس اور اسکرین ریکارڈنگ کو روکتا ہے۔ تاہم، نوٹ کریں کہ یہ عام مواد کے لیے بھی اسکرین شاٹس کو غیر فعال کر دے گا، جو ناپسندیدہ ہو سکتا ہے۔

پاس ورڈ فیلڈز کے لیے آٹو فل کیسے کام کرتا ہے؟

Android 8.0 (API 26) سے شروع کرتے ہوئے، Autofill Framework خود بخود inputType کے ذریعے پاس ورڈ فیلڈز کا پتہ لگاتا ہے۔ درست آپریشن کے لیے، importantForAutofill="yes" سیٹ کریں اور autofillHints ("password", "newPassword", "emailAddress") بتائیں۔ Gboard اور پاس ورڈ مینیجرز محفوظ کردہ پاس ورڈز تجویز کرنے کے لیے ان ایٹریبیوٹس کا استعمال کرتے ہیں۔

خلاصہ

  • Secure Text Entry — پوشیدہ ان پٹ موڈ جو PasswordTransformationMethod کے ذریعے کریکٹرز کو ماسکنگ علامتوں (نقاط) سے بدل دیتا ہے۔
  • فعالیت — inputType="textPassword" یا TYPE_TEXT_VARIATION_PASSWORD کی پروگرامیٹک سیٹنگ کے ذریعے۔
  • PasswordTransformationMethod — بلٹ ان Android کلاس جو Editable کو تبدیل کیے بغیر کریکٹر ڈسپلے کو بدل دیتی ہے۔
  • ویزیبلٹی ٹوگل — endIconMode="password_toggle" اور TYPE_TEXT_VARIATION_VISIBLE_PASSWORD کے ساتھ TextInputLayout کے ذریعے لاگو کیا گیا۔
  • تحفظ — shoulder surfing، اسکرین شاٹس (FLAG_SECURE کے ساتھ)، آٹو کریکٹ اور لغت میں ذخیرہ کرنے سے روکتا ہے۔
  • Autofill — پاس ورڈ مینیجر سپورٹ کے لیے، importantForAutofill اور autofillHints="password" شامل کریں۔
  • بہترین طرز عمل — TextInputLayout استعمال کریں، چھوٹا کرتے وقت فیلڈ صاف کریں، پاس ورڈ کی لمبائی سختی سے محدود نہ کریں۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں