# زبان های اسکریپتی > PHP > امنیت در PHP >  آیا محدود کردن تعداد کاراکترهای ورودی یک فیلد به اندازه ی نیاز، تاثیر برای جلوگیری از حملات دا

## ali abedian

*آیا محدود کردن تعداد کاراکترهای فیلدهای ورودی به مقداری که نیاز هست، جلوی این حملات رو میتونه بگیره؟*
مثلاً ما میخواییم مقدار ID ای رو داشته باشیم و تعداد کاراکترهای اون از ۳ یا ۴ تا بیشتر نیست.. اینجا اگر تعداد کارکترهای ورودی این فیلد رو ۴ در نظر بگیریم قطعاً باید کمک بزرگی کنه برای جلوگیری از حملات! درسته؟


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

*از چه راهی میشه کنترل کرد که حتماً حتماً مقادیر ارسال شده به صفحه ی پردازش، از روی مسیری هست که ما میخواییم؟! یعنی مثلاً از فایل index.php سایتمون ارسال شده و نه از صفحه ی دیگه ای روی سرور دیگه ای؟*

----------


## eshpilen

> مثلاً ما میخواییم مقدار ID ای رو داشته باشیم و تعداد کاراکترهای اون از ۳  یا ۴ تا بیشتر نیست.. اینجا اگر تعداد کارکترهای ورودی این فیلد رو ۴ در  نظر بگیریم قطعاً باید کمک بزرگی کنه برای جلوگیری از حملات! درسته؟


همه جا که نمیشه طول رو اینقدر محدود کرد.
بعدم اصولیش اینه که با روشهای دیگری غیر از طول هم چک کنید، که اگر اونا رو درست انجام بدید معمولا نیازی به چک کردن طول نیست (مگر احتمالا در بعضی موارد برای جلوگیری از حمله های DOS).
به تنهایی به طول نمیشه اتکا کرد، چون ممکنه یک مقدار غیرمجاز که میتونه بنوعی امنیت برنامه رو خدشه دار کنه با همون محدودیت طول هم ممکن باشه.




> *از چه راهی میشه کنترل کرد که حتماً حتماً مقادیر  ارسال شده به صفحه ی پردازش، از روی مسیری هست که ما میخواییم؟! یعنی  مثلاً از فایل index.php سایتمون ارسال شده و نه از صفحه ی دیگه ای روی  سرور دیگه ای؟*


سمت سرور هم باید چک کنید.
در زمینهء امنیت به جاوااسکریپت و سمت کلاینت به تنهایی نمیشه اتکا کرد.

----------


## ali abedian

خب پس تاثیر داره! سوالمو بازم تکرار میکنم آیا مثلا دستور دو حرفی ای هست که بخواد باعث هک سایت بشه؟ یا دستور نهایت ۴ حرفی؟ آیا میشه با دستوراتی که در نوار آدرس تایپ میشه، این محدودیت کاراکترها رو برداشت؟ (یعنی هکر این کارو کنه)

*بعد اینکه اگر میشه در مورد شناسایی مقادیری که از لینکی میاد هم یه مثال  از همین سمت سرور بزنید ممنون میشم..*

----------


## metal gear solid 4

شما با یک کاراکتر ' و در صورتی ک فقط ب طول اتکا کنید به مشکل میخورید.
برای اینکه متوجه بشید داده ها از سایت خودتون ارسال شدن از token. تصادفی هنگام تولید فرمتون جهت نمایش به کاربر واسه ارسال اطلاعات و بررسی token. ک سیستم تولید کرده هنگام بررسی ورودی ها استفاده کنید. اصطلاحا CSRF
البته با روبات یا اسکریپتهایی ک محتوای صفحات رو میخونن میشه این روش و دور زد اما بودنش بهتر از نبودنشه

----------


## eshpilen

> خب پس تاثیر داره! سوالمو بازم تکرار میکنم آیا مثلا دستور دو حرفی ای هست که بخواد باعث هک سایت بشه؟ یا دستور نهایت ۴ حرفی؟ آیا میشه با دستوراتی که در نوار آدرس تایپ میشه، این محدودیت کاراکترها رو برداشت؟ (یعنی هکر این کارو کنه)


آخه خدشه به امنیت که فقط از طریق دستور مثل دستورات SQL و JS نیست؛ یعنی اینا تنها وسیلهء هک کردن یا ایجاد اختلال یا دسترسی به محتوای غیرمجاز نیست.
فرضا ممکنه در سیستمی بعضی شماره رکوردها مربوط به کاربران عادی نباشه و اونا نباید به اون رکوردها دسترسی پیدا کنن؛ پس اینجا فقط چک کردن طول یا حتی اینکه عدد است کافی نیست و باید از لیست سیاه یا سفید یا عامل محدود کننده دیگری هم استفاده کرد و دید که کاربر مورد نظر اجازهء دسترسی به رکورد مورد نظر رو داره یا نه.
بعد همونطور که کاربر بالایی گفتن، گاهی حتی یک کاراکتر هم میتونه باعث خدشه به امنیت بشه. مثلا فرض کن اومدی در وسط کوئری اون پارامتر عددی رو درج کردی اما بعدش هم از شرط و شروط و پارامترهای دیگری استفاده کردی، اونوقت فرضا محدودیت طول ورودی هم 3 است؛ تست نکردم ولی تاجاییکه میدونم مثلا طرف میتونه با وارد کردن مقداری مثل ‎5--‎ (اگر درست یادم باشه -- علامت کامنت در SQL بود) باعث بشه که بقیهء دستورات و شروط کوئری شما کامنت بشن و عمل نکنن و این میتونه باعث دسترسی غیرمجاز به داده ها بشه یا حتی دستکاری/تخریب داده ها.
اومدی محدودیت طول گذاشتی مثلا 3 کاراکتر، فردا به هر دلیلی شماره ها بزرگتر شدن و مجبور شدی طولش رو به 5 کاراکتر و بیشتر افزایش بدی، اونوقت چی میشه آیا هنوزم امنه؟ این یک مسئلهء مبهمی هست و دوباره نیاز به ارزیابی و پرسش و تحقیق داری، و بنظرم نشون میده که شما امنیت رو به یک پارامتر متزلزل و غیراصولی وابسته کردی، وگرنه نباید به این راحتی و بخاطر نیازها و تغییرات طبیعی برنامه خدشه دار میشد.
البته در کل شما اگر اصرار داری میتونی از محدودیت طول هم استفاده کنی، ولی بعنوان یک محکم کاری و پارامتر اضافی و لایهء افزوده، نه بعنوان تنها روش یا روش اصلی برقراری امنیت. این یک روش کلی و دقیق و محکمی بنظر نمیرسه.

----------


## amg_123

سلام
واسه قسمت اول از سوالت باید بگم ک با Inspect Element مرورگر به سادگی میشه مقدار maxlength رو تغییر داد.
*و واسه قسمت دوم سوالت، میشه از $_SERVER[HTTP_REFERER] استفاده کرد.*

----------


## ashokri.nll

> سلام
> واسه قسمت اول از سوالت باید بگم ک با Inspect Element مرورگر به سادگی میشه مقدار maxlength رو تغییر داد.
> *و واسه قسمت دوم سوالت، میشه از $_SERVER[HTTP_REFERER] استفاده کرد.*


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

----------

