بعد از این درس دقیقاً چه بلدی؟
- میتوانی «XSS» را با مثال همین درس توضیح بدهی.
- میدانی «CSRF» کجای مسئله به کار میآید.
- تغییر پیشنهادی درس را اجرا میکنی و از روی نتیجه، اشتباه را پیدا میکنی.
یک کلید برای همه قفلها نداریم
قفل در خانه، رمز کارت و مهر پاکت کارهای متفاوتی دارند. htmlspecialchars برای HTML است و Prepared statement برای SQL؛ جابهجاکردنشان امنیت نمیسازد.
امنیت یک تابع آخر پروژه نیست. داده کاربر در هر مرز باید بررسی شود و هنگام رفتن به HTML، SQL، URL یا Shell با روش مخصوص همان مقصد امن شود.
چرا مهم است؟ نام ممکن است شامل HTML باشد. پیش از قراردادن آن در صفحه، نویسههای ویژه را تبدیل میکنیم تا فقط متن دیده شود.
اولین تمرین تو: نام ممکن است شامل HTML باشد. پیش از قراردادن آن در صفحه، نویسههای ویژه را تبدیل میکنیم تا فقط متن دیده شود.
اول بفهم، بعد کد بنویس
XSS
وقتی داده کنترلنشده بهصورت کد داخل HTML اجرا شود رخ میدهد؛ خروجی را با htmlspecialchars امن میکنیم.
CSRF
سایت باید مطمئن شود درخواست تغییردهنده از فرم خودش و کاربر فعلی آمده است.
مجوز دسترسی
ورودکردن کافی نیست؛ برای هر رکورد بررسی میکنیم کاربر حق دیدن یا تغییر آن را دارد.
نمایش امن نام کاربر
نام ممکن است شامل HTML باشد. پیش از قراردادن آن در صفحه، نویسههای ویژه را تبدیل میکنیم تا فقط متن دیده شود.
قطعهها را به ترتیب درست بچین
روی هر قطعه بزن تا وارد پاسخ شود؛ برای برگرداندن دوباره روی آن بزن. با دکمههای جابهجایی هم میتوانی بدون کشیدن و رهاکردن ترتیب را اصلاح کنی.
کد را تغییر بده و نتیجه را همانجا ببین
این مفسر آموزشی امن، بخش پایه PHP شامل متغیر، محاسبه، رشته، آرایه و if/else را در مرورگر اجرا میکند. کد به سرویس دیگری ارسال نمیشود.
برای دیدن نتیجه، «اجرای کد» را بزن.
این مثال خطبهخط چه میگوید؟
فعلاً حفظ نکن؛ هر خط را به یک جمله ساده تبدیل کن.
- 1
<?phpاز اینجا مفسر PHP شروع به خواندن کد میکند.
- 2
$name = "<script>alert(1)</script>";یک مقدار با نام $name نگهداری میشود تا در خطهای بعد دوباره استفاده شود.
- 3
$safeName = htmlspecialchars($name, ENT_QUOTES, "UTF-8");یک مقدار با نام $safeName نگهداری میشود تا در خطهای بعد دوباره استفاده شود.
- 4
echo $safeName;نتیجه این عبارت به خروجی پاسخ فرستاده میشود.
راهنماییها مرحلهای هستند؛ اول خودت پیام خطا را بخوان.
نام عادی و بعد یک تگ <b> را آزمایش کن. توضیح بده چرا پاککردن همه تگها همیشه جای Escape در زمان خروجی را نمیگیرد.
از ساده به چالشی، بدون پرش
یکی از مقدارهای مثال را عوض کن، خروجی را روی کاغذ حدس بزن و سپس بررسی کن.
نام عادی و بعد یک تگ <b> را آزمایش کن. توضیح بده چرا پاککردن همه تگها همیشه جای Escape در زمان خروجی را نمیگیرد.
سناریوی «نمایش امن نام کاربر» را با نامهای واضحتر و یک حالت تازه گسترش بده.
این سه اشتباه را انجام نده
به POST یا داده کاربر واردشده اعتماد کامل میکنی.
توکن CSRF را فقط میسازی اما هنگام درخواست بررسی نمیکنی.
رمز، توکن یا اطلاعات شخصی را در Log مینویسی.
5 پرسش کوتاه؛ مطمئن شو واقعاً یاد گرفتهای
برای هر پرسش یک پاسخ انتخاب کن. بعد از هر انتخاب، دلیل پاسخ را همانجا میبینی.
برای قراردادن متن کاربر داخل HTML کدام ابزار مناسب است؟
کدام توضیح، «XSS» را دقیقتر بیان میکند؟
بهترین قدم بعد از خواندن مثال این درس چیست؟
کدام روش نشان میدهد این درس را واقعاً فهمیدهای؟
کدام رفتار احتمال خطا را در همین موضوع بیشتر میکند؟
درس را فقط وقتی تمام کن که کد را تغییر دادهای
دیدن آموزش کافی نیست؛ یک مقدار را تغییر بده، خروجی را پیشبینی کن و بعد اجرا بزن.