پیکربندی خودکار پراکسی

یک پرونده پیکربندی خودکار پراکسی یا Proxy auto-config (PAC) برای مرورگرهای وب و دیگر عوامل کاربری تعیین می‌کند که چگونگه می‌توانند پراکسی سرور(خدمات دهنده پیشکار) مناسب را برای برقراری ارتباط با یک نشانی وب (URL) انتخاب کنند.
فایل پی‌ای‌سی حاوی یک رویه (تابع یا همان فانکشن) جاواسکریپت با چنین ساختاری ست «FindProxyForURL(url, host)». این فانکشن مشخصات یک یا چندین روش دسترسی را به صورت رشته (سترینگ) باز می‌گرداند (return). این رشته مشخصات، عامل کاربری را به استفاده از یک پراکسی سرور مشخص گاهی براساس یوآرال هدایت می‌کند یا اینکه دستور می‌دهد که مستقیم و بدون پراکسی با نشانی وب ارتباط برقرار کند.
در یک رشته می‌توان مشخصات چندین پراکسی را که بواسطه نقطه ویرگول (سمی کالن) از هم تفکیک می‌شوند وارد نمود تا در صورتی که هر یک از پراکسی‌ها پاسخ نداد به پراکسی بعدی مراجعه شود. مرورگر دقیقاً پیش از اینکه درخواست را به نشانی وب بفرستد، این فایل را واکشی(fetch) می‌کند تا تغییرات جدید کد این فایل برای مرورگر به روزرسانی شود. آدرس این پی‌ای‌سی، هم می‌تواند به صورت دستی پیکربندی شود هم اینکه توسط WPAD یا پروتکل یافتن خودکار پراکسی وب به صورت خودکار تعیین شود.

تاریخچه

چهارچوب این پرونده در ابتدا توسط نتسکیپ در ۱۹۹۶ برای نتسکیپ نویگیتور ۲٫۰ طراحی شد

پرونده PAC

پرونده‌ای نوشتاری ست که حداقل یک رویه جاواسکریپت را تعریف می‌کند، یعنی «FindProxyForURL(url, host)»، با دو ورودی: url که نشانی مقصد است و هاست که نام رایانه میزبان است که از این نشانی استخراج شده. طبق اصول و به‌طور معمول، پرونده پی‌ای‌سی proxy.pac نامگذاری می‌شود. استاندارد WPAD از نام wpad.dat استفاده می‌کند. در برخی مرورگرها مثل فایرفاکس اگر از پسوندی غیر از pac در نام پرونده استفاده شود کار نخواهد کرد زیرا مرورگر در لیست پسوندهای نامه اینترنتی چند منظوره(MIME) فقط انتظار یکی از انواع استاندارد را دارد یعنی: application/x-ns-proxy-autoconfig یا application/x-javascript-config. اما در افزونه FoxyProxy در فایرفاکس و برخی نرم‌افزارها می‌توان از هر پسوندی مثل js نیز استفاده کرد.
در مواردی که این فایل توسط یک هاست یا سرور برخط (آنلاین) قرار می‌گیرد، دربارهٔ اینکه کدامیک از این دو MIME بهتر است که توسط سرور برای کلاینت (عامل کاربر) در آغازینه(Header) ایچ تی تی پی در پاسخ(response) تعریف شود دلایل کافی وجود ندارد. اگرچه به نظر می‌رسد که application/x-ns-proxy-autoconfig باید توسط کلاینت‌های بیشتری استفاده شود زیرا همان مشخصات اصلی تعریف شده توسط نتسکیپ بوده و گزینه دوم جدیدتر است.
در برخی موارد، ورودی تعیین مکان این پرونده فقط برای یک نشانی برخط اختصاص داده شده مثل فایرفاکس و اینترنت اکسپلورر که برای تعیین یک پرونده پی‌ای‌سی محلی بر خلاف آنلاین (در حافظه رایانه یا تلفن همراه) می‌توان از پیشوند فایل به جای پروتکل استفاده نمود برای مثال در ویندوز برای فایرفاکس: file:///D:/proxy.pac

راهنمای کد

لیست دستورهای تعیین روش ارتباط در رشته بازگشتی از فانکشن شامل: PROXY، SOCKS، SOCKS5 و DIRECT می‌باشد.
یک نمونه کد ساده برای نشانی سرور محلی یا لوکال برای ساکس ۵ در پورت ۱۰۸۰ و و پراکسی ایچ تی تی پی در پورت ۸۵۵۵ :
function FindProxyForURL(url, host){
 return "SOCKS5 127.0.0.1:1080; PROXY 127.0.0.1:8555; DIRECT";}
ابتدا از راه پورت ۱۰۸۰ روی آی‌پی ۱۲۷٫۰٫۰٫۱ با ساکس ۵ تلاش می‌کند و اگر به هر دلیل ارتباط شکست خورد و سرور پراکسی پاسخ نداد، بعدی را تست می‌کند یعنی ۸۵۵۵ و با پراکسی و در نهایت اگر هر دو شکست بخورد ارتباط را بدون پراکسی و به صورت مستقیم برقرار می‌کند.

رویه‌های فطری

رویه‌های از پیش تعریف شده و فطری(native) برای آسان کردن کار در پی‌ای‌سی نیز وجود دارد همچون shExpMatch. نمونه‌ای از یک نشانی و یک آی‌پی رینج استثنا :
function FindProxyForURL(url, host) {
 if (shExpMatch(host, "*.localhost")
  || isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0")){
  return "DIRECT";
 }
 return "SOCKS5 127.0.0.1:1080; DIRECT";}

کدبندی نویسه

مرورگرهایی چون موزیلا فایرفاکس و اینترنت اکسپلورر فقط از کدبندی(encoding) پیشفرض سیستم برای فایل‌های PAC پشتیبانی می‌کنند، و نمی‌توانند از کدبندی یونی‌کد همچون یوتی اف-۸ پشتیبانی کنند.

dnsResolve و احتمال قفل شدن مرورگر

رویه dnsResolve(و توابع مشابه دیگر) یک لک آپ از دی ان اس سرور انجام می‌دهند که اگر DNSServer برای مدتی طولانی پاسخ ندهد باعث می‌شود که مرورگر قفل کند.

کاشه اینترنت اکسپلورر و DNS

کش کردن نتایج پی‌ای‌سی براساس نام دامنه در اینترنت اکسپلورر ۵٫۵ یا جدیدتر انعطاف‌پذیری استاندارد پی‌ای‌سی را محدود می‌کند. در واقع، شما می‌توانید پراکسی را براساس نام دامنه انتخاب کنید نه بر اساس نشانی وب. به عنوان راهکار، می‌بایست کش PAC را از رجیستری ویندوز غیر فعال نمایید.
در تغییر وضعیت پیکربندی شبکه (همچون زمانی که به وی پی ان وارد یا خارج می‌شوید)، dnsResolve ممکن است به دلیل کاشه DNS برای مدتی کوتاه نتایج منسوخ را برگرداند. برای نمونه، فایرفاکس معمولاً ۲۰ دامنه استفاده شده را برای ۶۰ ثانیه کش می‌کند. این پیکربندی کش می‌تواند توسط متغیرهای network.dnsCacheEntries و network.dnsCacheExpiration تنظیم شود. همچنین فلاش کردن (شستن) کاشه سرور نام می‌تواند کمک کند. دستور فلاش در لینوکس sudo service dns-clean start می‌باشد.

isInNet، اینترنت اکسپلورر و دات نت

توصیه می‌شود که در رویه isInNet همیشه از آی‌پی به جای نام دامنه استفاده نمایید، این توصیه برای سازگاری با دیگر اجزا (کامپوننت) ویندوز که از تنظیمات پی‌ای‌سی اینترنت اکسپلورر استفاده می‌کنند همچون چهارچوب دات.نت می‌باشد.

myIpAddress

فانکشن myIpAddress معمولاً با این عنوان گزارش می‌شود که نتایج نادرست و غیر مفید را برمی گرداند همچون ۱۲۷٫۰٫۰٫۱ که آی‌پی محلی ست. این فانکشن می‌تواند برای استثنا گرفتن همه آی‌پی‌های محلی (localhost و مشابه) (/etc/hosts در لینوکس و %windir%\System32\drivers\etc\hosts در ویندوز) مفید باشد.
اگر چند آی‌پی محلی موجود باشد، در اینترنت اکسپلورر ۹، فرمان isInNet("localhost name", "second ip", "255.255.255.255") نتیجه true را برمی گرداند.
فانکشن myIpAddress فرض می‌کند که سیستم فقط یک آی‌پی نسخه چهار (IPv4) دارد. اگر بیش از یک آی‌پی نسخه ۴ موجود باشد یا آی‌پی نسخه ۶ باشد نتیجه undefined خواهد بود.

دیگر محدودیت‌ها

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

امنیت

در سال ۲۰۱۳، محققان دربارهٔ ریسک‌های امنیتی PAC هشدار دادند. در این گزارش می‌گوید که متهاجم در صورتی که بتواند دستوری را روی سیستم قربانی اجرا کند (برای مثال بواسطه یک برنامه آلوده) که تنظیمات PAC را تغییر دهد آنگاه می‌تواند بدون اینکه شناسایی شود داده‌های اینترنتی یا همان ترافیک اینترنتی کاربر را بر اساس نشانی وب (برای مثال انتخاب نشانی درگاه‌های پرداخت اینترنتی بانک‌ها) به سیستم میانجی یک سارق که به عنوان پراکسی عمل می‌کند هدایت کند. البته لایه ایمن SSL که برای مرورگرها با عنوان پروتکل HTTPS شناخته می‌شود با کدگذاری دوکلیدی (خصوصی-عمومی) نامتقارن می‌تواند از افشا شدن داده‌هایی که کاربر برای مثال به بانک مفرستد جلوگیری کند. زیرا در رمزگذاری دو کلیدی، اطلاعاتی که با کلید عمومی کاربر رمزگذاری می‌شود تنها با کلید خصوصی که فقط در اختیار بانک است قابل رمز گشایی می‌باشد. در این صورت رمزگشایی داده‌ها برای سارق میانجی امری تقریباً غیرممکن است.