به نام خداوندی که به آدمی آنچه را که نمیدانست تعلیم داد.
مشکلات امنیتی رایج استفاده جاوااسکریپت در فرانت اند
در دوره ای زندگی می کنیم که جاوااسکریپت بیش از هر زمان دیگیری در همه جا به خصوص در بستر وب نقش آفرینی می کند.
امنیت در استفاده از Pure Javascript بسیار مهم و حیاتی است زیرا در فریمورک ها آسیب پذیری های رایج به شکلی رفع شده است
۱- بحث بحث جاوااسکریپت و بازار xss از نوع DOM داغ!
به طور خلاصه ما در جاوااسکریپت یک سری توابع داریم که sink هستند به این معنی که اجرایی هستند مثل:
دوستان معذرت، داخل ویرگول این دو تابع را نمی توانم وارد کنم
یک سری توابع داریم که از نوع source هستند به این معنی که ورودی می گیریند مثل:
- Document.URL
- location.*
- document.referrer
ما در xss از نوع dom می کوشیم source را طوری تغییر دهیم که توسط sink اجرا و نتیجه دلخواه ما اجرا شود.
توضیحات بیشتر در اینجا
۲-تزریق از نوع Expression Language Injection
فرض کنید قسمتی از اینترفیس صفحه از بخش دیگری خوانده می شود مثل:
document.body = template
پس template را ما مشخص می کنیم!
البته که فقط محدود به template نمی شود مثال های بیشتر را در اینجا می توانید مشاهده کنید.
۳- ربایش از نوع SVG Clickjacking
فرض کنید فرمی است که اطلاعاتی از کاربر می گیرید attacker سعی می کند انتهای فرم را ببندد و یک svg با event های ارائه شده در html5 را در قرار دهد.
‘>“/><svg/=prompt()>
توضیحات بیشتر در اینجا
۴-تغییر در DOM با DOM Clobbering
این آسیب پذیری به نسبت پیچیده است و در روی مرورگر های قدیمی قابل اجرا است
ارور undefined در جاوااسکریپت و اسامی رزرو جاوااسکریپت در مرورگر های قدیمی باعث می شود تا به DOM دسترسی پیدا کنیم برای مثال
خب از این موضوع میتوان به شکل زیر هم استفاده کرد
و نتیجه زیر را در IE7 گرفت
این باگ اونقدر هم غیر قابل استفاده نیست
آسیب پذیری کشف شده در ckeditor ورژن 3.6.6.2
اطلاعات بیشتر در اسلاید های Lewis Ardern و توضیحات بهتر در اینجا
۵-نشت اطلاعات Information Leakage
به طوری کلی وقتی برنامه ای فضایی از حافظه می گیرد ولی آن را بر نمی گرداند می گوییم memory leakage رخ داده است.(توضیحات بیشتر در این فیلم و متن)
با توجه به تعریف memory leakage می توان information leakage را نشست اطلاعات مهم و ضروری از برنامه دانست برای مثال:
// located at http://victim.com/get_session_information.js
var username="ben";
var sessionid="10265ed845634413e490432d951d00f0";
// located at http://attacker.com
function leaked() {
alert("I know your sessionid for victim.com: " + sessionid);
}
<script src="http://victim.com/get_session_information.js" ="leaked">
قربانی با مراجعه به وبسایت attacker اطلاعاتی مهمی مثل sessionid را در اختیار attacker قرار می دهد
این مشکل تقصیر کاربر نیست بله باید توسع دهنده اطلاعات مهم و ضروری را حتما سمت سرور نگه داری کند.
پیش گیری بهتر از درمان
به طور کلی بهترین روش های برای جلوگیری از attack های تحت وب input validation است.
که شامل موارد زیر است.
- black list
- regex
- encryption
منابع
معذرت بابت کم و کاستی های فراوان این مطلب
خیلی خوشحال میشوم نظرات خود را اینجا بگذارید
با تشکر از شما
مطلبی دیگر از این انتشارات
الگوی تطابقی با استفاده از daggy
مطلبی دیگر از این انتشارات
نوشتن کوئری Mysql در Node.js
مطلبی دیگر از این انتشارات
درک prototype از زبان موزیلا