در حال بارگذاری...
تست اعتبارسنجی دادهها در منطق تجاری برای اطمینان از اینکه برنامه مقادیر غیرمجاز، منفی یا غیرمنطقی را رد میکند.
اهداف این درس
اعتبارسنجی دادهها در منطق تجاری شامل بررسی مقادیر ورودی برای اطمینان از مطابقت با قوانین کسبوکار است. این شامل بررسی نوع داده، محدوده مقادیر و شرایط خاص فرآیند میشود.
فرآیند بررسی دادههای ورودی برای اطمینان از مطابقت با قوانین و محدودیتهای کسبوکار.
| نوع داده | تستهای رایج | مثال سوءاستفاده |
|---|---|---|
| عددی | منفی، صفر، بسیار بزرگ | ارسال تعداد منفی برای محصول |
| رشتهای | طول، کاراکترهای خاص | ورودی بسیار طولانی |
| تاریخ | تاریخ گذشته، آینده دور | رزرو تاریخ گذشته |
| مبلغ | منفی، اعشاری، صفر | پرداخت مبلغ منفی |
تمام فیلدهای عددی برنامه را شناسایی کنید: قیمت، تعداد، مبلغ، امتیاز، درصد تخفیف و موارد مشابه.
1// فرض: فیلد تعداد محصول (min=1, max=99)2// مقادیر تست:30 // زیر حداقل4-1 // منفی51 // حداقل مجاز62 // بالای حداقل798 // زیر حداکثر899 // حداکثر مجاز9100 // بالای حداکثر10999999 // بسیار بزرگ110.5 // اعشاری12-999 // منفی بزرگسوءاستفاده از مقدار منفی
مهاجم تعداد محصول را منفی ارسال میکند. اگر برنامه مقدار منفی را بپذیرد، مبلغ سفارش منفی شده و موجودی افزایش مییابد.
1POST /api/order2{3 "product_id": 123,4 "quantity": -5,5 "price": 100006}7// نتیجه: موجودی کاربر 50000 افزایش مییابد!سوءاستفاده از تخفیف
مهاجم درصد تخفیف را بیش از ۱۰۰ ارسال میکند. اگر برنامه اعتبارسنجی نکند، مبلغ نهایی منفی شده و به جای پرداخت، وجه به کاربر بازمیگردد.
1POST /api/checkout2{3 "discount_percent": 150,4 "total": 500005}6// نتیجه: مبلغ نهایی -25000!هشدار
هرگز فقط به اعتبارسنجی سمت کلاینت اعتماد نکنید. تمام اعتبارسنجیها باید در سمت سرور هم تکرار شوند.
توصیه عملی
از کتابخانههای اعتبارسنجی مثل Joi، Yup یا Zod برای اعتبارسنجی سمت سرور استفاده کنید.
همیشه مقادیر منفی، صفر و بسیار بزرگ را تست کنید.
اعتبارسنجی سمت کلاینت قابل دور زدن است و باید سمت سرور هم بررسی شود.
مقادیر حدی (min, max, min-1, max+1) را حتماً تست کنید.
نوع داده ارسالی باید با انتظار برنامه مطابقت داشته باشد.
کدام مقدار باید در تست اعتبارسنجی منطق تجاری بررسی شود؟
چرا تست مقادیر حدی (Boundary Testing) مهم است؟
زیرا بسیاری از آسیبپذیریها در مقادیر حدی رخ میدهند. مثلاً ارسال مقدار منفی برای تعداد محصول یا مقدار بسیار بزرگ برای قیمت.
آیا اعتبارسنجی سمت کلاینت کافی است؟
خیر، اعتبارسنجی سمت کلاینت فقط تجربه کاربری را بهبود میدهد. مهاجم میتواند درخواستها را مستقیماً به سرور ارسال کند.