داغ ترین ویدیو بابلز لرن : هک کلاس های مجازی توسط متین برونسی

ویژگی تصویر

اعتبار سنجی فرم ها در PHP

  /  PHP   /  اعتبار سنجی فرم ها در PHP
بنر تبلیغاتی الف
آموزش PHP

در این بخش نحوه اعتبار سنجی فرم ها در PHP را بررسی می کنیم. ما برای حفظ امنیت وب سایت باید داده های ارسالی از سمت کاربر را اعتبار سنجی کنیم در غیر این صورت دچار مشکلات امنیتی خواهیم شد.

در این بخش قوانینی که برای فیلد های ورودی قرار است مشخص کنیم را در جدول زیر تعیین کرده ایم:

فیلدقوانین اعتبار سنجی
Nameتکمیل آن اجباری است و باید با حروف و فضای خالی تکمیل بشود.
E-mailتکمیل آن اجباری است و باید دارای یک آدرس ایمیل معتبر با @ و . باشد.
Websiteتکمیل آن اختیاری است و باید دارای یک آدرس URL معتبر باشد.
Commentتکمیل آن اختیاری است و یک نوع فیلد ورودی چند خطی می باشد.
Genderتکمیل آن اجباری است و باید انتخاب شود.

ابتدا باید کد های HTML مربوط به فیلد ها و فرم را طراحی کنیم.

فهرست مطالب:

فیلد های متنی

فیلد های نام و وب سایت با عنصر input و از نوع text مشخص می شود و فیلد ایمیل از نوع email و فیلد کامنت تگ textarea می باشد.

کد HTML آن به شکل زیر است:

تماشا در حالت تمام صفحه

دکمه های رادیویی

فیلد های مربوط به جنسیت با تگ input و از نوع radio می باشند همانند این:

تماشا در حالت تمام صفحه

تگ form

کد HTML مربوط به تگ form به این شکل می باشد:

تماشا در حالت تمام صفحه

با توجه به اینکه مقدار method برابر با post می باشد، داده ها به روش POST سمت سرور ارسال خواهند شد.

متغیر$_SERVER["PHP_SELF"] یک متغیر سراسری می باشد که نام فایل اسکریپت در حال اجرا را برمی گرداند.

با این کاری که انجام دادیم مقادیر فیلد های فرم، سمت اسکریپت فعلی ارسال خواهد شد، بنابر این کاربر پیغام های مربوطه را در همان صفحه ای که هست دریافت می کند.

تابع htmlspecialchars() کاراکتر های خاص را به موجودیت های HTML تبدیل می کند. این بدان معناست که کاراکتر های HTML مانند < و > را با &lt; و &gt; ذخیره و نمایش می دهد.

از این کار برای جلوگیری از حملات XSS تزریق کد HTML, CSS, JavaScript استفاده می کنیم.

نکات امنیتی مهم در فرم PHP

متغیر $_SERVER["PHP_SELF"] می تواند توسط هکرها استفاده شود.

اگر از PHP_SELF در صفحه استفاده کنید، کاربر می تواند یک اسلش (/) و سپس چند دستور Cross Site Scripting (XSS) را برای اجرا وارد کند.

در رابطه با جزئیات بیشتر حملات XSS تحقیق کنید، این نوع حملات امکان تزریق کد به صفحه را می دهد و می توان از آن برای فیشینگ کاربر های یک وب سایت استفاده کرد.

فرض کنید فرم زیر را در صفحه ای به نام test_form.php داریم:

تماشا در حالت تمام صفحه

اکنون، اگر کاربر URL معمولی را در نوار آدرس مانند “http://www.example.com/test_form.php” وارد کند، کد بالا به صورت زیر ترجمه می شود:

تماشا در حالت تمام صفحه

حال اگر کاربر آدرس را به شکل زیر وارد کند:

http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

در این صورت کد بالا به صورت زیر ترجمه می شود:

تماشا در حالت تمام صفحه

این کد یک تگ اسکریپت و یک فرمان هشدار اضافه می کند. و هنگامی که صفحه بارگذاری می شود، کد جاوا اسکریپت اجرا می شود (کاربر یک جعبه هشدار را مشاهده می کند). این فقط یک مثال ساده و بی ضرر است که چگونه می توان از متغیر PHP_SELF سوء استفاده کرد.

توجه داشته باشید که هر کد جاوا اسکریپت را می توان در تگ <script> اضافه کرد! یک هکر می‌تواند کاربر را به فایلی در سرور دیگری هدایت کند، و آن فایل می‌تواند کد مخربی را در خود نگه دارد که می‌تواند متغیرهای سراسری را تغییر دهد یا فرم را به آدرس دیگری ارسال کند تا داده‌های کاربر را ذخیره کند.

چگونه از سوء استفاده های $_SERVER["PHP_SELF"] جلوگیری کنیم؟

با استفاده از تابع htmlspecialchars() می توان از سوء استفاده های $_SERVER["PHP_SELF"] جلوگیری کرد.

کد تگ form باید به شکل زیر باشد:

تماشا در حالت تمام صفحه

تابع htmlspecialchars() کاراکتر های خاص را به موجودیت های HTML تبدیل می کند. حال اگر کاربر سعی کند از متغیر PHP_SELF سوء استفاده کند، خروجی زیر را به همراه خواهد داشت:

تماشا در حالت تمام صفحه

تلاش هکر برای تزریق کدها با شکست مواجه می شود و امکان سوء استفاده دیگر وجود نخواهد داشت.

اعتبارسنجی داده های فرم با PHP

اولین کاری که باید انجام بدهیم این هست که تمام ورودی ها را با تابع htmlspecialchars() پاکسازی و فیلتر کنیم.

سپس با تابع trim() فضا های خالی و اضافی رشته ها را حذف می کنیم.

همچنین با تابع stripslashes() مقدار بک اسلش (\) را از داده های ورودی کاربر حذف می کنیم.

در آخر برای بهبود کیفیت کد ها و راحتی انجام این عملیات ها یک تابع تعریف می کنیم که همه این عملیات ها را برای ما انجام بدهد.

نام تابع را test_input() می گذاریم.

اکنون می‌توانیم هر متغیر $_POST را با تابع test_input() بررسی کنیم.

مثال

تماشا در حالت تمام صفحه

دقت داشته باشید که ابتدا با متغیر $_SERVER["REQUEST_METHOD"] بررسی می کنیم آیا فرم با متد post ارسال شده است یا خیر.

اگر فرم ارسال شده باشد آن را اعتبار سنجی می کنیم در غیر این صورت از اعتبار سنجی صرف نظر می کنیم.

با این حال در مثال بالا تمام فیلد های ورودی اختیاری هستند. حتی اگر کاربر هیچ داده ای را وارد نکند اسکریپت به خوبی کار می کند.

گام بعدی این هست که تکمیل فیلد ها را اجباری کنید و در صورت نیاز پیغام خطایی را به کاربر نمایش دهید. لطفاً مقاله ورودی های اجباری فرم در PHP را مطالعه کنید.

آیا این مطلب برای شما مفید بود ؟

خیر
بله
بنر تبلیغاتی ج