ایمن کردن کدهای ارسالی توسط آژاکس

i-php-i

Active Member
وقتی که از طریق فرمها و بدون آژاکس، مقدایر ورودی کاربر رو به سمت سرور می فرستیم، فرمها بدون هیچ نوع کدگذاری به سمت سرور ارسال می شن.

موقع استفاده از آژاکس اگر بدون کد کردن مقادیر ورودی کاربر، فرم رو به سمت سرور ارسال کنیم، آیا خطراتی متوجه سایت و سرور می شه؟

همچنین لطفا بگید که برای بالابردن امنیت در آژاکس، جاوا اسکریپت چه توابعی رو برای ایجاد امنیت ارائه کرده؟
 

eAmin

Well-Known Member
JavaScript وظیفه تامین امنیت سرور رو نداره! همچنین هیچ متد یا تابعی برای اینکار بصورت درونی در جاوا اسکریپت گنجانده نشده. باید خودتون بنویسید.
در JavaScript فقط توابعی از قبیل escape و encodeURIComponent برای تبدیل کاراکترها به یک سری کدها وجود داره تا از ارورهای احتمالی و برای جلوگیری از ارسال ناقص اطلاعات در url بکار میره.
موقع استفاده از آژاکس اگر بدون کد کردن مقادیر ورودی کاربر، فرم رو به سمت سرور ارسال کنیم، آیا خطراتی متوجه سایت و سرور می شه؟
مهم اینه که شما ورودی ها رو در سمت سرور فیلتر کنید، در غیر اینصورت هکر میتونه با غیر فعال کردن JavaScript مرورگر خودش جلوی فیلتر کردن کاراکترها رو بگیره! این موارد (بحث امنیت) چیزی نیست که بشه در اینجا صحبت کرد، چون یک مبحث گسترده ای هست و حوصله اش از بحث این تاپیک خارجه، شما باید خودتون برید و راههای مختلف امنیتی و ... رو مطالعه کنید.

موفق باشید.
 

i-php-i

Active Member
JavaScript وظیفه تامین امنیت سرور رو نداره! همچنین هیچ متد یا تابعی برای اینکار بصورت درونی در جاوا اسکریپت گنجانده نشده. باید خودتون بنویسید.
در JavaScript فقط توابعی از قبیل escape و encodeURIComponent برای تبدیل کاراکترها به یک سری کدها وجود داره تا از ارورهای احتمالی و برای جلوگیری از ارسال ناقص اطلاعات در url بکار میره.

مهم اینه که شما ورودی ها رو در سمت سرور فیلتر کنید، در غیر اینصورت هکر میتونه با غیر فعال کردن JavaScript مرورگر خودش جلوی فیلتر کردن کاراکترها رو بگیره! این موارد (بحث امنیت) چیزی نیست که بشه در اینجا صحبت کرد، چون یک مبحث گسترده ای هست و حوصله اش از بحث این تاپیک خارجه، شما باید خودتون برید و راههای مختلف امنیتی و ... رو مطالعه کنید.

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

مسئله اینه آیا هکر می تونه طوری مقادیر مخرب رو وارد کنه که، قرم برای یه سرور دیگه ارسال بشه؟

اگر از encodeURIComponent استفاده کنم، چطور باید کدها رو در سمت سرور دیکد کنم؟
 

eAmin

Well-Known Member
همینطوری که نیست هکر بتونه با استفاده از اطلاعات مخرب اطلاعات رو به سرور ثانویه ارسال کنه.
ببینید اگر هکر بتونه طوری رایانه کاربر رو در اختیار بگیره که اطلاعات به سرور دیگه ای ارسال بشه، حتی درصورتی که شما از ای جکس هم استفاده نکنید و از فرمها به تنهایی استفاده کرده باشید میتونه اطلاعات رو به سرور خودش ارسال کنه.
درکل اونطوری که شما فکر میکنید امنیت ای جکس اینقدر ها هم پایین نیست. درحالت معمولی شما حتی نمیتونید به یک دامین دیگه مثل domain.com به غیر از دامنه ی خودتون اطلاعات رو بفرستید.
تنها راهی که هکر میتونه اطلاعات رو به سرور خودش ارسال کنه اینه که کدهای JavaScript شما رو تغییر بده و یا اختیار کامپیوتر قربانی رو در دست داشته باشه.

توی php توسط تابع url_decode.
 

i-php-i

Active Member
همینطوری که نیست هکر بتونه با استفاده از اطلاعات مخرب اطلاعات رو به سرور ثانویه ارسال کنه.
ببینید اگر هکر بتونه طوری رایانه کاربر رو در اختیار بگیره که اطلاعات به سرور دیگه ای ارسال بشه، حتی درصورتی که شما از ای جکس هم استفاده نکنید و از فرمها به تنهایی استفاده کرده باشید میتونه اطلاعات رو به سرور خودش ارسال کنه.
درکل اونطوری که شما فکر میکنید امنیت ای جکس اینقدر ها هم پایین نیست. درحالت معمولی شما حتی نمیتونید به یک دامین دیگه مثل domain.com به غیر از دامنه ی خودتون اطلاعات رو بفرستید.
تنها راهی که هکر میتونه اطلاعات رو به سرور خودش ارسال کنه اینه که کدهای JavaScript شما رو تغییر بده و یا اختیار کامپیوتر قربانی رو در دست داشته باشه.

توی php توسط تابع url_decode.

آخرین سوال:

فرض کنید که توی onreadystatechange شرط xmlHttp.readyState==4 && xmlHttp.status==200 برقرار نبود، در این حالت بهترین راهکار برای بالا بردن کارایی سیستم چی هست؟

باید چند لحظه صبر کنیم (setinterval) و مجددا تابع رو فراخوانی کنیم یا اینکه اجازه بدیم که فرم بدون استفاده از آژاکس به سمت سرور ارسال بشه؟
 

eAmin

Well-Known Member
سوالتون هیچ ربطی با این تاپیک نداره. برای سوالهایی که موضوعشون با عنوان تاپیک فرق داره لطفا تاپیک جدیدی رو ایجاد کنید ( برای راحت تر شدن استفاده از امکان جستجو در سایت. )

بهترین راهکار این هست که یک timeout برای درخواست درنظر بگیرید، و در صورت بروز خطا به کاربر بگید: دوباره امتحان کنید.
لطفا بیشتر از این بحث تاپیک رو منحرف نکنید.
 

جدیدترین ارسال ها

بالا