Secure Text Entry Android میں ایک ٹیکسٹ ان پٹ موڈ ہے جس میں درج کردہ کریکٹرز اصلی کریکٹرز کی بجائے پوشیدہ شکل میں (نقاط یا ستاروں) دکھائے جاتے ہیں۔ یہ موڈ پاس ورڈ فیلڈز، PIN کوڈز، CVV کوڈز اور دیگر خفیہ معلومات کے لیے استعمال ہوتا ہے۔ Secure Text Entry نہ صرف ڈیٹا کو بصری مداخلت سے بچاتا ہے بلکہ اسکرین شاٹس، اسکرین ریکارڈنگز اور آٹو کریکٹ فیچرز کے ذریعے رساو کو بھی روکتا ہے۔ Android Security Best Practices (2026) کے مطابق، پوشیدہ ان پٹ ان ایپلیکیشنز کے لیے لازمی ضرورت ہے جو صارفین کی تصدیقی ڈیٹا پر کارروائی کرتی ہیں۔
اہم نکات
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 کلاس استعمال کرتا ہے۔ ماسکنگ کریکٹر کا سائز فیلڈ کے فونٹ سائز سے مماثل ہوتا ہے، جو لفظ کی لمبائی کے ذریعے معلومات کے رساو کو روکتا ہے — تمام کریکٹر چوڑائی میں یکساں نظر آتے ہیں۔ یہ درج کردہ ڈیٹا کی لمبائی کے تجزیے پر مبنی حملوں سے تحفظ کے لیے اہم ہے۔
<!-- 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" />
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 کی طرح)۔
// 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) کے مطابق، پاس ورڈ دکھانے والا آئیکن ہمیشہ نظر آنا چاہیے، نہ کہ صرف اس وقت جب فیلڈ فوکس میں ہو۔ صارف کو کسی بھی وقت پاس ورڈ تصدیق کرنے کے قابل ہونا چاہیے۔ آئیکن کو ایک خاص وقت کے بعد خود بخود پاس ورڈ نہیں چھپانا چاہیے — صرف صارف کے عمل پر۔
<!-- 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>
Kotlin میں Secure Text Entry کی پروگرامیٹک سیٹنگ inputType سیٹ کرکے یا setTransformationMethod() کے ذریعے کی جاتی ہے۔ دونوں طریقے ایک ہی نتیجہ دیتے ہیں لیکن تفصیلات میں مختلف ہیں۔ inputType سیٹ کرنا اضافی طور پر آٹو کریکٹ اور تجاویز کو کنفیگر کرتا ہے، جبکہ setTransformationMethod صرف کریکٹر ڈسپلے کو متاثر کرتا ہے۔
// 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))
}
// 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 |
Android ڈویلپرز کو پوشیدہ ان پٹ کے ساتھ کام کرتے وقت کئی اہم طریقوں پر عمل کرنا چاہیے۔ پہلا، پاس ورڈ فیلڈز کے لیے ہمیشہ endIconMode="password_toggle" کے ساتھ TextInputLayout استعمال کریں — یہ جدید Material Design معیار ہے۔ دوسرا، پاس ورڈ دکھانے کی صلاحیت کو غیر فعال نہ کریں — صارف کو یہ تصدیق کرنے کے قابل ہونا چاہیے کہ اس نے کیا درج کیا، خاص طور پر چھوٹے کی بورڈ والے موبائل آلات پر۔
Secure Text Entry کو مناسب آٹو فل کنفیگریشن بھی درکار ہے۔ پاس ورڈ فیلڈز کے لیے، ہمیشہ autofillHints="password" یا autofillHints="newPassword" بتائیں تاکہ پاس ورڈ مینیجرز ڈیٹا کو صحیح طور پر بھر اور محفوظ کر سکیں۔ نئے پاس ورڈ کی تصدیق والے فیلڈ کے لیے autofillHints="newPassword" استعمال کریں تاکہ سسٹم اسے موجودہ محفوظ کردہ پاس ورڈ سے بھرنے کا مشورہ نہ دے۔
// 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 بھی آٹو کریکٹ کو غیر فعال کرتا ہے لیکن کریکٹرز کو واضح طور پر دکھاتا ہے۔ 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 اور پاس ورڈ مینیجرز محفوظ کردہ پاس ورڈز تجویز کرنے کے لیے ان ایٹریبیوٹس کا استعمال کرتے ہیں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں