عضویت در سایت

ورود

فراموشی رمز عبور

رمز عبور خود را فراموش کرده اید؟ ایمیل خود را وارد کنید

کد امنیتی برای بروزرسانی کد امنیتی روی تصویر کلیک کنید

ورود

عضویت در سایت

رایگان ثبت نام کنید و سوالات خود را بپرسید، همچنین میتوانید در پاسخگویی به سوالات دیگر کاربران نیز سهیم باشید، هر مشکلی در ثبت نام یا ورود داشتید با ایمیل beporsam@gmail.com در ارتباط باشید

در بین 1036 آموزش و 1854 پرسش به دنبال چه هستید؟

ویندوز
نصب آنلاین ویندوز

ویندوز 7,8,10,11
مشاوره
مشاوره خرید لپ تاپ و کامپیوتر

مشاوره حرفه ای دریافت کن
بلاگ
مقالات آموزشی

1k+
پشتیبانی آنلاین

سخت افزار/نرم افزار

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

سلام

در این قسمت از آموزش فرم ها در PHP می پردازیم به مبحث بسیار مهم اعتبار سنجی داده های فرم، اگر فرم هایی که در سایت استفاده میکنیم اعبتار سنجی نداشته باشند امنیت سایت را به شدت تحت تاثیر خود قرار میدهند، لذا در این مطلب آموزشی به طور کامل، اعتبار سنجی داده های فرم را شرح میدهیم، در ادامه همراه بپرسم باشید.

فرم HTML که در این آموزش استفاده میکنیم حاوی فیلدهای متنی، دکمه های رادیویی و دکمه ها می باشد که برخی فیلدها اجباری و برخی فیلد ها ضروری هستند.

کد فرم:

خروجی کد بالا:

فرم

فرم

پس فرمی که در انتهای آموزش باهاش کار میکنیم، فرم بالا هست، سعی کردیم در فرم انواع INPUT ها را بیاریم.

قوانینی که برای اعتبار سنجی فرم بالا در نظر گرفتیم، به شرح زیر است:

فیلد

قوانین

Name

این فیلد ضروری هست و فقط نام هایی را ثبت میکند که شامل حروف و فضای خالی باشند.

E-mail

این فیلد ضروری هست و فقط ایمیل هایی را ثبت میکند که از قوانین ایمیل در آنها رعایت شده باشد، شامل @ و . باشند.

Website

این فیلد اختیاری هست و آدرس سایت وارد شده باید صحیح باشد

Comment

این فیلد اختیاری هست و هر کاراکتری را قبول میکند.

Gender

این فیلد ضروری هست و کاربر فقط میتواند یک گزینه را انتخاب کند

ابتدا به کد HTML ساده ی فرم نگاهی بندازیم:

فیلدهای متنی

فیلدهای Name,E-mail,Website فیلدهای متنی فرم ما هستند، که کدهای آنها به صورت زیر است:

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

انتخاب جنسیت(Gender) از نوع دکمه های رادیویی هستند و کاربر فقط یک گزینه را میتواند انتخاب کند، کدهای آنها به صورت زیر است:

تگ Form

تگ form که در کدهای بالا استفاده کردیم بدین صورت است:

مطلب پیشنهادی:  نحوه بررسی حداکثر رم پشتیبانی شده در لپ تاپ

در کد بالا اطلاعات فرم با متد POST ارسال میشه(اگر در رابطه با این متذ اطلاعاتی ندارید، آموزش ارسال داده های فرم را مطالعه کنید)، برای خاصیت action در تگ form همانطور که می بینید چیزی ننوشتیم، وقتی برای action آدرسی را مشخص نکنید به این معناست که اطلاعات ارسال شده را به همین صفحه ارسال کنه.

حالا برای اینکه تگ Form رو امنیتش رو بالا ببریم، برای خاصیت action به صورت زیر عمل میکنیم:

در این تکه کد، باز هم اطلاعات را به صفحه ی جاری ارسال میکند و ولی اطلاعات ارسالی را غربالگری میکند، در ادامه دو تابع SERVER_$ و PHP_SELF را توضیح میدیم:

  • تابع SERVER[“PHP_SELF”] : متغییر SERVER_$ یک متغیر سوپر گلوبال هست که اطلاعات زیادی را در خود به صورت آرایه نگه میدارد، یکی از این اطلاعات برگرداندن نام جاری فایل می باشد.

آموزش سوپرگلوبال در PHP

  • htmlspecialchars: با استفاده از تابع ()htmlspecialchars، می توان کاراکترهای خاص را به HTML entity تبدیل نمود. منظور این است که کاراکترهایی مثل علامت کوچکتر(<) و بزرگتر(>) در پارامتر ورودی را به ;lt$ و ;gt$ تبدیل می کند. با این کار از حمله ی هکرهایی که می خواهند از طریق تزریق HTML یا JavaScript اخلال ایجاد کنند، جلوگیری می شود.

پس تا الان باید متوجه استفاده <?php echo htmlspecialchars($_SERVER[“PHP_SELF”]?> شده باشید، تابع htmlspecialchars برای تصحیح کاراکترهای مخرب و غیر معمولی هست که هکر نتواند از طریق تزریق کدهای JavaScript یا HTML که به این نوع هک کردن در اصطلاح Cross-site Scripting attacks گفته میشود، و تابع SERVER[“PHP_SELF”] هم برای برگرداندن آدرس فایل جاری هست که اطلاعات رو به همین صفحه ارسال کنه.

نکته بسیار مهم در رابطه با امنیت فرم در PHP

متغیر SERVER[“PHP_SELF”] توسط هکرها میتواند مورد استفاده قرار گیرد!

اگر از PHP_SELF در تگ form استفاده کنید، هکر میتواند با گذاشتن یک اسلش(/) اقدام به اجرای دستورات XSS کند.

Cross-site scripting که در اصطلاح XSS نامیده میشود، یکی از روش های حمله و نفوذ هکرها به وب سایت می باشند، این روش معمولا در برنامه های تحت وب به کار میرود، در این روش کدهای JavaScript و HTML به سایت تزریق میشوند. در واقع هکرها در این توع حمله میتوانند اطلاعات کاربران یک سایت را بدون اینکه خودشان متوجه شوند، به سرقت ببرند!

لذا این باگ را در برنامه هایی که مینوسید بسیار جدی بگیرید

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

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

اگر کاربر به آدرس http://www.example.com/test-form.php در مرورگر خود وارد کند، کد بالا به صورت زیر ترجمه میشود:

تا اینجا که مشکلی نداریم و همه چیز خوب است،

حالا در نظر بگیرید، هکر آدرس زیر را در مرورگر خود اجرا کند:

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

وقتی هکر این آدرس را در مرورگر خود وارد کند، به محض لود شدن صفحه پیغامی در صفحه با متن Hacked By beporsam.ir چاپ میشود، البته این پیغامی که چاپ میشود بی ضرر است، ولی فرض کنید که هکر اطلاعات کاربران را به صفحه ی دیگه ای ریدایرکت کند، اون موقع چه اتفاقی می افته …، این مثال را برای این زدیم که ببینید متغیر PHP_SELF چطوری مورد سوء استفاده قرار میگیره، در ادامه یاد میگریم که چطوری با این روش مقابله کنیم.

مطلب پیشنهادی:  تگ های HTML - تگ ins

نحوه جلوگیری از هک توسط  PHP_SELF

توسط از تابع ()htmlspecialchars، می توانیم از هک شدن توسط PHP_SELF جلوگیری کنیم.

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

که کدهای JavaScript و HTML بی اثر میشوند و هیچ آسیبی نخواهید دید 🙂

تا اینجا که فقط در رابطه با جلوگیری از هک توسط خاصیت action توضیح دادیم و جلوش رو گرفتیم، حالا می پردازیم به مبحث اصلی که چگونگی اعتبار سنجی داده های فرم می باشد.

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

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

زمانی که از تابع ()htmlspecialchars  استفاده کنید، هکر دیگر نیمتواند با وارد کردن آدرس زیر در سایت ما کاری انجام دهد و به هدف خود برسد:

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

ولی وقتی که از ()htmlspecialchars استفاده میکنیم، آدرس بالا به آدرس زیر تبدیل و بی اثر میشود:

حالا داده ی ارسال شده به سمت سرور امن هست.

با استفاده از تابع ()trim کاراکترهای غیرضروری (مثل: فاصله های اضافی، tab و خطوط خالی) را حذف می کنیم.

وقتی کاربر داده های فرم را ارسال میکند،؛ دو کار دیگر نیز انجام میدهیم:

  1. فاصله های اضافی، خط های اضافی و … را با استفاده از تابع ()trim حذف میکنیم.
  2. بک اسلش ها(/) را نیز با تابع ()stripslashes حذف میکنیم.

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

پس تابعی به اسم filterInput می نویسیم:

حالا تمامی کدهای فرم تا به این لحظه که نوشتیم، به صورت زیر است:

مطلب پیشنهادی:  آموزش ووکامرس - قسمت سوم(درگاه پرداخت)

در فرم بالا تمامی فیلد ها اختیاری هستند و کاربر میتواند فیلد ها تکمیل کند و ارسال کند، در قسمت بعدی یاد میگریم که چطوری میتونیم برخی فیلدها را ضروری کنیم تا حتما توسط کاربر تکمیل شود.

در قسمت بعدی نیز همراه ما باشید.

موفق باشید.

درباره احمد آخوندیمدیر سایت

طراح و برنامه نویس وب| تعمیرکار کامپیوتر و ماشین های اداری | علاقه مند یادگیری و یاددادن ... :)

دنبال کردن

ارسال نظر

رفتن به بالا

سامانه آموزشی و خدماتی بپرسم

اولین وب سایت آموزشی و پرسش و پاسخ در ایران

بپرسم را میتوان به عنوان مرجعی برای آموزش و حل مشکلات دانست، در بپرسم سعی کرده ایم آموزش های برنامه نویسی، طراحی سایت، کار با نرم افزارها ها و… را آموزش دهیم. همچنین محیطی فراهم کرده ایم تا کاربران بتوانند در این محیط سوالات خود را بپرسند و مشکل خود را حل کنند.