مسلما میدانید که php بر اساس زبان سی نوشته شده است و خیلی از توابع این دو زبان هم دقیقا مثل هم هستند و حتی کاربردهایشان، حالا میخواهم شما را به کلاس برنامه نویسی مقدماتی توی دانشگاه ببرم که تقریبا بیشتر رشتههای فنی داشته اند اگر یادتان باشد در مبحث آرایهها وقتی استادتان به شما این مبحث را آموزش میداد گفته بود که آخرین خانه از آرایه با عبارت 0\ و یا همان نال بایت پرخواهد شد و هیچ مقدار دیگری را نخواهد پذیرفت و برنامه وقتی به این عبارت برسد خواهد فهمید که آرایه به انتها رسیده و آن تمام شده است و دیگر ادامه نخواهد داد حالا کافی است کاربر ما در اسکریپت نوشته شده توسط ما از این ترفند استفاده نماید یعنی توسط یک کد هگز که به صورت 00% خواهد بود کل روال کار ما را عوض کند یعنی مقدار فرستاده شده به صورت زیر باشد:
حال دیگر پسوندی را که ما در ادامه رشته قرار دادهایم خوانده نخواهد شد مثل اینکه اصلا php. وجود ندارد و کاربر قادر خواهد بود هر فایل را در هر شاخهای و با هر پسوندی include نمایید !!!
جالب بود نه؟ دقت کنید که تعداد /... ها اصلا مهم نیست چون به هر مقداری هم که باشد و کاربر بخواهد عقب برود از root عقبتر نمیتواند برود و از آنجا میتواند آدرس دلخواه خود را وارد نماید.
یا حتی ممکن است کاربر از این فراتر برود مثلا یک فایلی را بر روی سایت شما آپلود نماید یک فایل مخرب و آن را اجرا نماید مثلا در قسمت آپلود آواتار اگر مسائل ایمنی رعایت نشود کاربر همچین فایلی را آپلود خواهد کرد shell.php.jpg خوب سایز فایل کمتر از حد مجاز است پس موردی ندارد پسوند فایل jpg میباشد پس فایل آپلود خواهد شد اما چون عکس حقیقی نیست نمایش داده نمیشود و این اصلا مهم نیست برای کاربر خوب حالا کاربر آدرس آواتارها بر روی سایت شما را دارد محلی که آواتارها آپلود میشود و با استفاده از ترفندی که گفتم یعنی 00% آدرس را به این صورت وارد میکند:
و دیگه کلا هاست در اختیار هکر محترم قرار خواهد گرفت.
پس دیدی که استفاده نا مناسب و اشتباه ممکنه چه خطرات زیان باری را داشته باشد.
اما خوب حالا واقعا بهترین و امنترین راه حل برای استفاده از این تابع چیست؟ در این جور مواقع چه کاری انجام دهیم؟
بهترین راه حل استفاده از آرایهها میباشد به این صورت که ما آرایه ای به شکل زیر تعریف خواهیم کرد:
که داریم language[0]=$farsi و language[1]=$english و مقداری را که کاربر فرستاده است با این دو خانه از آرایه مقایسه خواهیم کرد اگر مقدار آن دقیقا برابر بود با farsi و یا دقیقا برابر بود با english خواهیم نوشت:
راه حل دیگری که میتوان از آن استفاده کرد مخصوصا برای جلوگیری از کاراکترهای غیر مجاز مثل نال بایت استفاده از عبارات منظم میباشد.
خوب با استفاده و رعایت موارد گفته شد در بالا اسکریپت ما امن خواهد شد و کاربر قطعا دیگر نمیتواند فایل دیگری را اجرا نماید. برای انتخاب قالب نیز میتوان از همین روش استفاده کرد.
امیدوارم این آموزش بدردتان خورده باشد.
اگر جایی از آموزش مشکلی داشت و یا موارد دیگری برای تکمیل تر شدن آموزش به نظرتان رسید خوشحال خواهم شد که برایم ارسال نمایید.
موفق باشید.
امین شفیعی؛
نظر شما در مورد این آموزش |