بعد از این درس دقیقاً چه بلدی؟
- خطا را بازتولید و کوچک کنی
- ورودی و خروجی را امن مدیریت کنی
- اطلاعات حساس را وارد لاگ نکنی
خطایابی مثل پیدا کردن قطعی برق است
بهجای تعویض همه سیمها، مسیر را بخشبخش بررسی میکنیم: ورودی رسید؟ شرط درست بود؟ خروجی ساخته شد؟ کوچککردن مسئله سریعتر از حدسزدن است.
Validate: بررسی کن داده با انتظار برنامه سازگار است؛ مثلاً ایمیل معتبر و ظرفیت عدد مثبت باشد.
چرا مهم است؟ بررسی کن داده با انتظار برنامه سازگار است؛ مثلاً ایمیل معتبر و ظرفیت عدد مثبت باشد.
اولین تمرین تو: فاصلهها را بیشتر کن، اجرا بزن و بعد متن خروجی را تغییر بده.
اول بفهم، بعد کد بنویس
Validate
بررسی کن داده با انتظار برنامه سازگار است؛ مثلاً ایمیل معتبر و ظرفیت عدد مثبت باشد.
Escape
هنگام قراردادن داده در HTML، SQL یا URL از روش مخصوص همان مقصد استفاده کن.
Log
شناسه رخداد و اطلاعات لازم برای عیبیابی را ثبت کن، نه رمز، توکن یا اطلاعات خصوصی.
مثال واقعی: تمیزکردن نام ثبتنامکننده
کاربر ممکن است ناخواسته قبل و بعد نام فاصله بگذارد. trim داده را قبل از پردازش مرتب میکند.
قطعهها را به ترتیب درست بچین
روی هر قطعه بزن تا وارد پاسخ شود؛ برای برگرداندن دوباره روی آن بزن. با دکمههای جابهجایی هم میتوانی بدون کشیدن و رهاکردن ترتیب را اصلاح کنی.
کد را تغییر بده و نتیجه واقعی را ببین
این مفسر آموزشی امن، بخش پایه PHP شامل متغیر، محاسبه، رشته، آرایه، تابعهای ساده و if/else را در مرورگر اجرا میکند. کد به سرویس دیگری ارسال نمیشود.
برای دیدن نتیجه، «اجرای کد» را بزن.
راهنماییها مرحلهای هستند؛ اول خودت پیام خطا را بخوان.
فاصلهها را بیشتر کن، اجرا بزن و بعد متن خروجی را تغییر بده.
این بخش روی سرور چگونه نوشته میشود؟
جزئیات فنی را در محیط امن لاگ میکنیم و به کاربر یک پیام روشن و غیرحساس نشان میدهیم.
try {
$service->register($data);
} catch (DomainException $error) {
error_log("registration_failed: " . $error->getMessage());
echo "ثبتنام انجام نشد؛ دوباره تلاش کن.";
}این سه اشتباه را انجام نده
فعالگذاشتن display_errors در سایت اصلی
ثبت رمز و توکن داخل لاگ
استفاده از @ برای پنهانکردن خطا بهجای حل آن
5 پرسش کوتاه؛ مطمئن شو واقعاً یاد گرفتهای
برای هر پرسش یک پاسخ انتخاب کن. بعد از هر انتخاب، دلیل پاسخ را همانجا میبینی.
کدام پیام برای کاربر سایت اصلی مناسبتر است؟
تابع trim در مثال نام کاربر چه میکند؟
کدام مورد نباید داخل لاگ ثبت شود؟
کدام روش نشان میدهد این درس را واقعاً فهمیدهای؟
کدام رفتار احتمال خطا را در همین موضوع بیشتر میکند؟
درس را فقط وقتی تمام کن که کد را تغییر دادهای
دیدن آموزش کافی نیست؛ یک مقدار را تغییر بده، خروجی را پیشبینی کن و بعد اجرا بزن.