PDA

View Full Version : سوال: چرا بعضی از اسکریپتها تگ ؟> رو توی کد قرار نمی دن و کدها هم بدون مشکل اجرا می شن؟



idocsidocs
یک شنبه 27 آذر 1390, 00:28 صبح
چرا بعضی از اسکریپتها تگ ؟> رو توی کد قرار نمی دن و کدها هم بدون مشکل اجرا می شن؟

MMSHFE
یک شنبه 27 آذر 1390, 09:36 صبح
علت این مسئله، امنیت هست. البته روش خیلی قدرتمندی نیست ولی کلاً روش کارش اینه که اگه سایر افراد بخوان با روشهای مختلف کدهای javascript و... رو به انتهای فایل اضافه کنن، توی تگ PHP قرار بگیره و ضمن تولید خطا، اون کد کار نکنه. PHP هم به بسته شدن تگ خودش حساس نیست و فقط کافیه دستورات داخل تگ PHP خطای گرامری نداشته باشن.
موفق باشید.

idocsidocs
یک شنبه 27 آذر 1390, 10:58 صبح
علت این مسئله، امنیت هست. البته روش خیلی قدرتمندی نیست ولی کلاً روش کارش اینه که اگه سایر افراد بخوان با روشهای مختلف کدهای javascript و... رو به انتهای فایل اضافه کنن، توی تگ PHP قرار بگیره و ضمن تولید خطا، اون کد کار نکنه. PHP هم به بسته شدن تگ خودش حساس نیست و فقط کافیه دستورات داخل تگ PHP خطای گرامری نداشته باشن.
درسته روش قدرتمندی نیست. چون اگر کسی به سورس کد دسترسی داشته باشه، می تونه هر کاری بکنه !

توی فریم ورک زند هم همین روش استفاده می شه. آیا توی زند هم به دلایل امنیتی چنین کاری می کنن یا دلیل دیگه ای هم داره؟

MMSHFE
یک شنبه 27 آذر 1390, 16:15 عصر
بله اونجا هم تا جایی که اطلاع دارم، دلیلش همینه. البته منظورم از نفوذ، دسترسی به سورس کد نبود. درمورد روشهای Inject و درج کدهای JS درون صفحه بیشتر تحقیق کنید تا منظورم رو بهتر متوجه بشین.
موفق باشید.

امیـرحسین
دوشنبه 28 آذر 1390, 10:59 صبح
دلیلی که من میدونم اینه که وقتی تگ PHP بسته بشه، محتویات بعد از اون به عنوان HTML به بافر فرستاده میشه از جمله space یا new line که ممکنه در خروجی تاثیر بد داشته باشه و پیدا کردنش هم تقریبا غیرممکنه.
برای همین توصیه میشه توی اسکریپتهای اجرایی (که با باز و بسته کردن PHP نمی‌خوایم HTML ارسال کنیم) استفاده نشه چون تگ بسته‌ی PHP اجباری نیست.

idocsidocs
دوشنبه 28 آذر 1390, 11:33 صبح
دلیلی که من میدونم اینه که وقتی تگ PHP بسته بشه، محتویات بعد از اون به عنوان HTML به بافر فرستاده میشه از جمله space یا new line که ممکنه در خروجی تاثیر بد داشته باشه و پیدا کردنش هم تقریبا غیرممکنه. چه تاثیر بدی داره؟

امیـرحسین
دوشنبه 28 آذر 1390, 12:00 عصر
فکر کن یه سایت با همون Zend ساختی و یه جای صفحه بخاطر یک space بد داره نمایش داده میشه حالا باید بریم همه‌ی فایلهای Zend که اجرا شده، همه فایلهای خودت که اجرا شده و همه خروجی‌هایی که چاپ کردی رو چک کنی و میفهمی که یه نفر مثلا تو Zend ابلهی کرده بعد از تگ PHP یک space ناقابل زده.
یا مثلا newline که کاراکتر محسوب میشه و میتونه روی هدرها هم تاثیر بذاره (خطای معروف Cannot modify header...) خلاصه غیرقابل کنترله و هر چیز غیرقابل کنترل بده.
منبع هم پیدا کردم:


The closing tag of a PHP block at the end of a file is optional, and in some cases omitting it is helpful when using include() or require(), so unwanted whitespace will not occur at the end of files, and you will still be able to add headers to the response later. It is also handy if you use output buffering, and would not like to see added unwanted whitespace at the end of the parts generated by the included files.
http://php.net/manual/en/language.basic-syntax.instruction-separation.php

mtchabok
دوشنبه 28 آذر 1390, 12:06 عصر
البته فک کنم در صفحات داخلی ایرادی نداشته باشه که تک پایانی رو نذاریم مثلا در کتابخانه سایتمون و یا صفحاتی که فقط در صفحات دیگه اجرا میشن .
حتی به نظرم از لحاظ سرعت هم میتونه به نفعمون باشه که تگ پایانی رو در صفحات داخلی نذاریم مثلا فریمورکها رو اگه نگاهی بندازیم میبینم که تگ پایانی رو نمی ذارن .
در این صورت وقتی که یه فایلی رو موتور php در حال پردازشش هس موقعیکه به پایان فایل میرسه اجرای کد فایل رو متوقف میکنه ولی اگه تگ پایانی وجود داشته باشه مفسر میآد و حالت رو به خروجی میزاره که از این تگ به بعد مجددا به دنبال تگ شروع میگرده .
که فک کنم با نذاشتن تگ پایانی میشه جلوی ای اینکار بیهوده رو گرفت .