چرا توسعه دهندگان با تجربه هرگز از regex برای اعتبارسنجی ایمیل استفاده نمی کنند؟

Summarize this content to 400 words in Persian Lang
مشکلی که هیچ کس در مورد آن صحبت نمی کند
بیایید واقعی باشیم: اعتبارسنجی ایمیل ساده به نظر می رسد، اما یک تله فنی است که حتی توسعه دهندگان با تجربه را هم گرفتار می کند.
واقعا چه خبر است؟
تصور کنید در حال ساخت یک فرم ثبت نام هستید. اولین غریزه شما؟ یک regex را در قسمت ایمیل پرتاب کنید. حرکت بد
ایمیل های عجیب و غریب معتبر واقعی
# These are ALL technically valid emails!
valid_emails = [
‘”J. R. \”Bob\” Dobbs”@example.com’,
‘admin@mailserver1’,
‘user+tag@gmail.com’,
‘postmaster@[123.123.123.123]’
]
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
اکثر موتورهای regex در این موارد خفه می شوند.
چرا؟
استانداردهای ایمیل وحشی هستند.
اکثر توسعه دهندگان از این که بدانند آن ها در واقع یک آدرس ایمیل معتبر از نظر فنی مطابق با RFC 5322 هستند، شگفت زده خواهند شد. مشخصات اجازه می دهد:
به نقل از قطعات محلی
نظرات داخل پرانتز
نظرات تو در تو
شخصیت های خاص در بخش های محلی
چندین برچسب دامنه
هزینه های پنهان اعتبار سنجی بد
1. از دست دادن کاربران واقعی
یک regex دقیق ممکن است آدرس های ایمیل کاملاً خوب را رد کند. تصور کنید که یک مشتری بالقوه را دور می زنید زیرا ایمیل آنها “عجیب” به نظر می رسد، مانند داشتن:
آدرس دهی پلاس (user+tags@gmail.com)
ساختارهای نامتعارف دامنه
مجموعه شخصیت های بین المللی
قراردادهای نامگذاری قانونی اما پیچیده
تیم محصول شما واقعاً ناراضی خواهد بود، به علاوه. فروش واقعاً عصبانی خواهد شد.
2. حملات ReDoS
موتورهای Regex با استفاده از Backtracking مستعد حملات Regex Denial of Service (ReDoS) هستند.
def dangerous_regex_check(user_input):
# This regex can destroy your server’s performance
evil_pattern = r’^(a+)+b$’
return re.match(evil_pattern, user_input)
# Just 30 characters can crash your system
malicious_input = ‘a’ * 30 + ‘b’
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
مهاجمان میتوانند ورودیهایی ایجاد کنند که عملکرد اعتبارسنجی شما را متوقف کند.
یک رویکرد هوشمندانه تر
اعتبار سنجی اساسی که در واقع کار می کند
def smart_email_check(email):
“””Quick and dirty email sanity check”””
return (
email and
‘@’ in email and
‘.’ in email.split(‘@’)[1] and
len(email) <= 254 # Email length limit
)
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
راه حل واقعی: تأیید
بررسی نحو پایه
یک لینک تایید ارسال کنید
به کاربر اجازه دهید ثابت کند که ایمیل کار می کند
def validate_email(email):
if not basic_email_check(email):
return False
# Send verification token
token = generate_unique_token()
send_verification_email(email, token)
return True
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
ابزارهای حرفه ای برای توسعه دهندگان واقعی
به جای نوشتن regex خود، از کتابخانه های آزمایش شده استفاده کنید:
پایتون: email-validator
جاوا اسکریپت: validator.js
جاوا: اعتبارسنجی Apache Commons
کلاس اعتبار سنجی بهتر
class EmailValidator:
@staticmethod
def validate(email):
“””
Smart email validation
– Quick syntax check
– Verify deliverability
“””
try:
# Use a smart library
validate_email(
email,
check_deliverability=True
)
return True
except EmailInvalidError:
return False
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
خط پایین
اعتبار سنجی ایمیل در مورد ایجاد یک قلعه نشکن نیست. این در مورد:
اجازه ورود کاربران واقعی
ایمن نگه داشتن سیستم شما
چیزها را پیچیده نمی کند
خوراکی های کلیدی
رژکس پیچیده را فراموش کنید
از کتابخانه های اثبات شده استفاده کنید
ایمیل های تایید را ارسال کنید
کاربر پسند باشید
توسعه دهندگانی که این کار را درست انجام می دهند از سردردهای بی شماری نجات پیدا می کنند.
آیا می خواهید هر بخشی از این را بیشتر توضیح دهم؟
Btw، من روی یک ابزار زمینه نامحدود کار می کنم، که در آن می توانید از LLM ترجیحی خود بدون نیاز به دادن مکرر زمینه استفاده کنید.
این را بررسی کنید، برای توسعه دهندگان کاملا رایگان است.
مشکلی که هیچ کس در مورد آن صحبت نمی کند
بیایید واقعی باشیم: اعتبارسنجی ایمیل ساده به نظر می رسد، اما یک تله فنی است که حتی توسعه دهندگان با تجربه را هم گرفتار می کند.
واقعا چه خبر است؟
تصور کنید در حال ساخت یک فرم ثبت نام هستید. اولین غریزه شما؟ یک regex را در قسمت ایمیل پرتاب کنید. حرکت بد
ایمیل های عجیب و غریب معتبر واقعی
# These are ALL technically valid emails!
valid_emails = [
'"J. R. \"Bob\" Dobbs"@example.com',
'admin@mailserver1',
'user+tag@gmail.com',
'postmaster@[123.123.123.123]'
]
اکثر موتورهای regex در این موارد خفه می شوند.
چرا؟
استانداردهای ایمیل وحشی هستند.
اکثر توسعه دهندگان از این که بدانند آن ها در واقع یک آدرس ایمیل معتبر از نظر فنی مطابق با RFC 5322 هستند، شگفت زده خواهند شد. مشخصات اجازه می دهد:
- به نقل از قطعات محلی
- نظرات داخل پرانتز
- نظرات تو در تو
- شخصیت های خاص در بخش های محلی
- چندین برچسب دامنه
هزینه های پنهان اعتبار سنجی بد
1. از دست دادن کاربران واقعی
یک regex دقیق ممکن است آدرس های ایمیل کاملاً خوب را رد کند. تصور کنید که یک مشتری بالقوه را دور می زنید زیرا ایمیل آنها “عجیب” به نظر می رسد، مانند داشتن:
- آدرس دهی پلاس (user+tags@gmail.com)
- ساختارهای نامتعارف دامنه
- مجموعه شخصیت های بین المللی
- قراردادهای نامگذاری قانونی اما پیچیده
تیم محصول شما واقعاً ناراضی خواهد بود، به علاوه. فروش واقعاً عصبانی خواهد شد.
2. حملات ReDoS
موتورهای Regex با استفاده از Backtracking مستعد حملات Regex Denial of Service (ReDoS) هستند.
def dangerous_regex_check(user_input):
# This regex can destroy your server's performance
evil_pattern = r'^(a+)+b$'
return re.match(evil_pattern, user_input)
# Just 30 characters can crash your system
malicious_input = 'a' * 30 + 'b'
مهاجمان میتوانند ورودیهایی ایجاد کنند که عملکرد اعتبارسنجی شما را متوقف کند.
یک رویکرد هوشمندانه تر
اعتبار سنجی اساسی که در واقع کار می کند
def smart_email_check(email):
"""Quick and dirty email sanity check"""
return (
email and
'@' in email and
'.' in email.split('@')[1] and
len(email) <= 254 # Email length limit
)
راه حل واقعی: تأیید
- بررسی نحو پایه
- یک لینک تایید ارسال کنید
- به کاربر اجازه دهید ثابت کند که ایمیل کار می کند
def validate_email(email):
if not basic_email_check(email):
return False
# Send verification token
token = generate_unique_token()
send_verification_email(email, token)
return True
ابزارهای حرفه ای برای توسعه دهندگان واقعی
به جای نوشتن regex خود، از کتابخانه های آزمایش شده استفاده کنید:
- پایتون:
email-validator
- جاوا اسکریپت:
validator.js
- جاوا: اعتبارسنجی Apache Commons
کلاس اعتبار سنجی بهتر
class EmailValidator:
@staticmethod
def validate(email):
"""
Smart email validation
- Quick syntax check
- Verify deliverability
"""
try:
# Use a smart library
validate_email(
email,
check_deliverability=True
)
return True
except EmailInvalidError:
return False
خط پایین
اعتبار سنجی ایمیل در مورد ایجاد یک قلعه نشکن نیست. این در مورد:
- اجازه ورود کاربران واقعی
- ایمن نگه داشتن سیستم شما
- چیزها را پیچیده نمی کند
خوراکی های کلیدی
- رژکس پیچیده را فراموش کنید
- از کتابخانه های اثبات شده استفاده کنید
- ایمیل های تایید را ارسال کنید
- کاربر پسند باشید
توسعه دهندگانی که این کار را درست انجام می دهند از سردردهای بی شماری نجات پیدا می کنند.
آیا می خواهید هر بخشی از این را بیشتر توضیح دهم؟
Btw، من روی یک ابزار زمینه نامحدود کار می کنم، که در آن می توانید از LLM ترجیحی خود بدون نیاز به دادن مکرر زمینه استفاده کنید.
این را بررسی کنید، برای توسعه دهندگان کاملا رایگان است.