مشکلات امنیتی رایج استفاده جاوااسکریپت در فرانت اند

hackersonlineclub.com
hackersonlineclub.com

در دوره ای زندگی می کنیم که جاوااسکریپت بیش از هر زمان دیگیری در همه جا به خصوص در بستر وب نقش آفرینی می کند.

امنیت در استفاده از 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 دسترسی پیدا کنیم برای مثال

diary.shift-js.info
diary.shift-js.info

خب از این موضوع میتوان به شکل زیر هم استفاده کرد

diary.shift-js.info
diary.shift-js.info

و نتیجه زیر را در IE7 گرفت

diary.shift-js.info
diary.shift-js.info


این باگ اونقدر هم غیر قابل استفاده نیست

آسیب پذیری کشف شده در ckeditor ورژن 3.6.6.2

 ادیتور معروف CKEditor
ادیتور معروف CKEditor


اطلاعات بیشتر در اسلاید های 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

منابع


معذرت بابت کم و کاستی های فراوان این مطلب
خیلی خوشحال میشوم نظرات خود را اینجا بگذارید

با تشکر از شما