ایجاد: ۱۳:۲۶ ۱۳۹۱/۱۱/۱۲
ویرایش: ۱۳:۴۸ ۱۳۹۴/۱/۲۶
»
الف) کاربردها
تعیین و احراز هویت کاربری که به صفحه فعلی آمده است، کاربردهای زیادی دارد. از جمله مهمترین این کاربردها میتوان این موارد را نام برد:
- تشخیص نام کاربری (User Name)
که جهت نمایش فضای شخصی یا مشخص شدن مقدار دسترسی لازم است.
- اطلاعات آماری
گاهی لازم است که علاوه بر تعداد درخواست (بازدید) یک صفحه، تعداد مشاهدهکنندگان (بازدیدکنندگان) نیز جداگانه شمارش شود چون یک نفر ممکن است چند صفحه از سایت ما را مشاهده کند. همچنین گاهی داشتن اطلاعاتی از بازدیدهای اخیر یک کاربر و یا مشخصات سیستمش میتواند فوایدی داشته باشد یا سایت ما را در ارائه بهتر و متناسبتر محتوا کمک کند.
- جلوگیری از کاربران فیک و غیرواقعی یا بعضا تکراری
که این مورد هم نیاز به توضیح ندارد و مشخص است.
ب) روشها
در صورتی که از طریق یک اپلیکیشن سیستم عامل، با کاربر رابطه داشته باشیم (مثلا نرم افزار تحت ویندوز یا اندروید)، که در اینصورت میتوان با توجه به مشخصات سختافزار (شناسه سریال سختافزارها مانند مک آدرس و ...) شناسایی و احراز هویت دقیقی انجام داد. اما موضوع این مطلب ما در مورد کاربران آنلاین است که یک برنامهنویس فقط در حد دسترسیهای براوزر به آن دسترسی دارد.
یک نکته مهم: برخی از این روشها برای احراز هویت یک user برای کارهای حساس نیست بلکه صرفا ارزش آماری و تفننی دارد.
-
سشن و کوکی
سشن و کوکی پرکاربردترین ابزار تشخیص است که علاوه بر شناسایی کاربر لاگین شده، برای ردگیری و آمارگیری توسط بسیاری از سایتها و حتی سرویسها تبلیغاتی (از جمله گوگل) مورد استفاده قرار میگیرد. ابَر کوکی که در براوزرهای جدید (بیش از از 90 درصد کاربران) قابل استفاده است و همچنین کوکی ایجاد شده توسط فلش نیز دو موردی هستند که علاوه بر سشن و کوکی رایج قابل استفاده بوده و قابلیت ذخیره دادههای بزرگتر یا در فضایی مخفیتر در کامپیوتر کلاینت را برای برنامهنویسان فراهم میکند.
-
token based
این روش جدید، نسبت به روش قدیمی (سشن و کوکی) محاسن بسیاری دارد که در ابتدای این مقاله اشاره شده است. یکی از این پیادهسازیهای استانداردهای این روش jwt (تلفظ کنید: جُت) است که مخفف JSON Web Token است و توسط گوگل و مایکروسافت و ... استفاده میشود و برای انواع زبانهای سمت سرور از جمله PHP و زبان جاوا اسکریپت سمت کلاینت و ... نیز پلاگین و کتابخانههای آن موجود است. این روش هم از لحاظ پرفرمنس و هم از لحاظ امنیت، بهتر از روش مبتنی بر سشن/کوکی است.
در این روش بجای اینکه اطلاعاتی همچون نام کاربر و دسترسیهای او و ... را پس از لاگین، به صورت سشن در سرور ذخیره کنیم، آن را با کمک یک کلید secret که فقط در سرور موجود است، رمزنگاری میکنیم و بجای سشن به کلاینت ارسال میکنیم. کلاینت برای ارتباطات بعدی، از طریق header درخواست یا حتی خود url، توکن را ارسال میکند و در سمت سرور به سادگی با کلید secret بازگشایی میشود. این روش محدودیتهای کوکی (مانند وابسته بودن به دامنه) را ندارد و از نظر امنیتی هم بهتر از سشن است چون امکان حمله CSRF روی آن نیست. همچنین همانطور که میبینید، این روش statless است و اطلاعات را همراه خود دارد لذا نیازی به دیتابیس برای تائید آن نیست لذا این روش همچنین راهحل خوبی برای احراز هویت بین دو سرویس مختلف است که به وسیله API با هم در ارتباط هستند.
-
User Agent و HTTP_ACCEPT Headers
در سرآیند هر درخواست که به سرور ارسال میشود، علاوه بر کوکی، شناسههای فوق نیز ارسال میشود که یک اثر انگشت برای براوزر محسوب میشود و به سرور میگوید که درخواست فعلی توسط چه براوزری (نام و ورژن و ...) ارسال شده است. البته این شناسه به وسیله افزونهها قابل دستکاری است.
-
Screen Size, Color Depth, Time Zone
برخی مشخصات سختافزاری سیستم مانند ساعت (که در اثر اختلافش با گرینویچ، ناحیه شما را مشخص میکند) و همچنین رزولوشن براوزر و رزولوشن صفحه نمایش و همچنین عمق رنگ را نشان میدهد، تا حدودی میتواند در شناسایی کاربر نقش ایفاء کند.
-
Browser Plugin Details
پلاگینهای نصب شده بر روی براوزر و ورژن آنها، میتواند تا حد زیادی یک کلاینت را در بین کلاینتها مشخص کند.
-
System Fonts
نام فونتهای نصب شده بر روی کلاینت، به وسیله فلش و همچنین به وسیله java قابل دستیابی است. این مشخصه مهم (لیست فونتها) تا حد بسیار زیادی یک کلاینت را در بین هزاران کلاینت یونیک میکند چون هر کسی فونتهای دلخواه خود را نصب میکند.
-
وضعیت فعال بودن js و cookie و سایر قابلیتها به وسیله browserCap و ...
-
دسترسیهایی که html5 به شما میدهد
با کمک html5 شما میتوانید دسترسی بسیار گستردهتری به سیستم کاربر داشته باشید که البته برای برخی از این دسترسیها ابتدا از کاربر اجازه گرفته میشود. دسترسی به مکاننما (gps)، میکروفون، دوربین، لیست مخاطبین گوشی/تبلت، میزان استفاده از باتری و ... از جمله این موارد هستند که هر یک در جای خود میتواند در احراز هویت کاربر نقش خاصی بازی کند.
ج) پلاگینها و کلاسها و سایر منابع مربوط به این بحث
با کمک
این نمونه تست یکتایی کاربر که مربوط به موسسه EFF است، میتوانید برخی موارد فوق را تست کنید. همچنین به کمک پلاگین
jquery browser fingerprint میتوانید به سایت خودتان به سادگی این قابلیت تشخیص را بیفزایید.
سایت
browser spy نیز با تفصیل بیشتری برخی از مواردی که موسسه eff گفته را بررسی کرده است.
گوگل نیز سیستمی دارد به نام
UTM که از آن برای شناسایی کاربران برای آمارگیری استفاده میکند که توضیحات بیشتر درمورد آن را در لینک بالا میبینید
سایت
evercookie نیز راهی برای ایجاد یک کوکی سرسخت! معرفی کرده که در نوع خود جالب است.
اخیرا بحث ترک و دنبال کردن کاربر با
ETag مطرح شده که توضیحات بیشتر درباره آن را میتوانید در
این مقاله ببینید.
یادداشتهای مرتبط
- API چیست؟
- ارتقاء امنیت وردپرس
- آشنایی با دو قابلیت جدید مرورگرها: WebRTC و ضبط صدا و تصویر!
- لیست مواردی که برای امنیت برنامه PHP لازم است چک شود
- ابرکوکی و ذخیره ساز جدید HTML5
- امنیت در انگولر جی اس
- تولید کپچای ضد گلوله!
- تشخیص و کشف نوع، نام و مشخصات مرورگر کاربران سایت
- ثبت نام و ورود به بخش کاربری با حساب گوگل، فیس بوک، توئیتر و ...
- پیشگیری از حملات جعل درخواست بین سایتی
- ساخت PDF آنلاین
- کار با قابلیت Page Visibility و کاربردهای آن
- موثرترین روش برنامه نویسان برای مقابله با کی لاگر ها
- بهینه سازی و کاهش حجم تصاویر برای استفاده در صفحات وب
- ارسال و دریافت ایمیل با PHP و ساختن اکانت ایمیل
- حملات ضدامنیتی XSS یا تزریق کد
- تنظیم اچ تی ام ال پیوریفایر
- کشف فونت های نصب شده در کلاینت
- همه آن چیزهایی که لازم است درباره ی فید بدانید
- بهینه سازی آنلاین سی اس اس و جاوا اسکریپت