ادامه مبحث هدرهای سمت سرور (مایکروسافتی)
شاید با خود بگویید استفاده از X-Frame-Options خوبه ولی به شرطی که خودمون جایی از Iframe استفاده کرده باشیم.
اولا که اگر کسی بتواند به نحوی کد اسکریپت را در صفحات ما جا بزند با همان کد جاواسکریپت می تواند iframe هم در صفحه بسازد و نیازی نیست ما خودمان فریم داشته باشیم که در هر دو صورت اگر صفحه ما دارای متای X-Frame-Options از نوع deny باشداسکریپت فریم را می سازد اما مرورگر از فراخوانی صفحه قرار گرفته در src به دلیل متای قرار داده شده در صفحه خود داری می کند
در ثانی اصلا مطلب این نیست بلکه درست متوجه مطلب نشدید
قرار نیست ما حتما فرم در صفحاتمان داشته باشیم تا نیاز به این حفاظت پیدا کنیم بلکه باید مانع استفاده شدن از صفحاتمان بصورت فریم شویم چرا که ClickJacking ترفند نفوذ از طریق قرار دادن صفحه بصورت iframe در صفحه آماده شده برای این کار توسط هکر هست
اگر یک سرچ کوچیک در اینترنت بزنید روشهای این نوع نفوذ گفته شده البته به همه موارد اطمینان نکنید
مثلا اگر لینک زیر را برای یک فریم قرار دهید(این وبلاگ اجازه استفاده از فریم برای تست همزمان را نمی دهد)
http://security.stackexchange.com/questions/12896/does
میبینید که اخطاری می دهد و در متن alert اینطور نوشته شده
For security resons framing is not allowed;click OK to remove the frame
البته این سایت با اینکه لوگوی خودش را
قرار داده حفاظت امنیتی را ناقص انجام داده یعنی عملا می توان دورش زد چون با غیر فعال کردن جاواسکریت می تونیم سایتشان را داخل فریم بکشیم بعد از طریق فایرباگ جاوااسکریتهاش را فراخوانی کنیم(من این کار را کردم جواب داد)
برای تکمیل این کار باید دو کار توسط این سایت امنیتی انجام می گرفت
1- باید متای مربوطه قرار داده می شد تا خود مرورگر مانع بارگذاری می شد یعنی یکی از دو متای زیر
< meta http-equiv="”X-FRAME-OPTIONS”" content= ”DENY” >
< meta http-equiv=”X-FRAME-OPTIONS”content= ”SAMEORIGIN” >
2-در حالت غیر فعال بودن جاوااسکریپت باید صفحه را به صفحه دیگری منتقل می کرد
< noscript > < meta http-equiv=”REFRESH” content=”0;URL=101.html” > < /noscript >
که در مثالی که من لینکش را در پی داده ام می توانید ببییند
هدر X-Frame-Options بازی ما را کاملا در برابر حملات از این دست ایزوله می کند
من برای اینکه روش استفاده آن کاملا مشهود شود نمونه آن را در اینجا برای شما قرار دادم(در اینترنت اکسپلورر ببینید)
http://google724.com/Combating_ClickJacking_methods
روش کلاینت هم در حالت فعال بودن جاوا اسکریپت و هم غیرفعال بودن آن اجازه باز شدن صفحه را در فریم نمی دهد(این روش بدون استفاده از متای مربوطه انجام شده تا نشان داده شود حتی با مرورگرهای غیر استاندار هم صحیح کار می کند بدیهی است که از نظر فنی این متا هم باید گذاشته شود تا امنیت کامل شود)
روش سرور که مکمل روش کلاینت است هم از هدر مربوطه استفاده می کند
من در بخش سرور دو نوع مثال آورده ام یکی مثالهایی از صفحات داخل سایت گوگل 724
و دیگری مثالهایی از دو سایت رایج
یکی میهن نیک که از این روش محافظت استفاده نکرده
و یکی گوگل که اجازه باز شدن در فریم را نمی دهد
تمام مثالهای سرور و کلاینت را open new tab هم بکنید تا بازشدن در خارج فریم انها را هم ببینید
توضیحی هم در مورد X-XSS-Protection
این مورد علاوه بر ie در کروم هم اعمال شده و انتظار می رود مرورگرهای دیگر نیز در توسعه خود قرار بدهند
ضمن اینکه چه کسی گفته ما قرار نیست از طریق IE هک شویم پس استفاده از یک هدر هیچ مشکلی ایجاد نمی کند جز اینکه ما را با فیلترهای تعریف شده در IE و chrom در برابر حملات XSS بیمه می کند
شاید تصور کنید که
- X-Content-Type-Options هم فقط چک میکند که content-type و mime سازگار باشن ولی ارتباطی با جلوگیری از sniff شدن نداره : http://security.stackexchange.com/questions/12896/does-
من صفحه لینک داده شده را خواندم نوشته شده:
is only supported on some IE browsers, it does not protect attacks against users who use other browsers.
درحالیکه اشتباه نویسنده است چون کروم هم آن را اجرایی کرده
اسنیف گفته شده را با اسنیف از بین مسیر isp ها اشتباه نکنید منظور از این اسنیف قرار دادن کدهای php مثلا درون عکس برای کدخوانی است که توسط مرورگرهای کروم و اینترنت اکسپلورر ممانعت میشود(عکس هایی از این دست را باز نمی کنند)
اینجا هم ما یک هدر ساده اضافه می کنیم که مشکلی ایجاد نمی کند
اما در مورد X-UA-Compatible
بدین منظور مایکروسافت الگوریتم نسبتا پیچیده ای را برای تغییر موتور مرورگر خود دارند که شماتیک آن را در زیر آورده ام
ضمنا برای مشهود شدن این مورد نیز یکی از باگهای جدی نسخه های قبل از 8 اینترنت اکسپلور را در اینتر یافته و برای تست انتخاب کردم
در این باگ به دلایلی یک متن شناور(float) مانع نمایش بلوک قبل از خود می شود
من این باگ را در یک صفحه ساده پیاده سازی کردم
بعد با یک select option هم قابلیت انتخاب تغییر Engine مرورگر را برای کاربر قرار دادم
با تغییر Engine یوزر ایجنت تغییر نمی کند بلکه تنها به مرورگر اعلام میشود که موتور خود را بر روی این نسخه قرار بده
به عبارتی ما با این کار لازم نیست برای تمام نسخه های اینترنت اکسپلور استایل بنویسم
فقط یک موتورش مثلا 8 را انتخاب می کنیم
اینطوری حتی اگر طرف نسخه 10 اینترنت اکسپلور مایکروسافت را مورد استفاده قرار دهد خودمرورگر مثل مرورگر نسخه 8 کار می کند
صفحه تستی من برای همه نسخه ها هست می تونید خودتان تست کنید
اینجا را ببینید:http://google724.com/x_ua_compatible