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

یک پرونده **پیکربندی خودکار پراکسی** یا  برای مرورگرهای وب و دیگر عوامل کاربری تعیین می‌کند که چگونگه می‌توانند پراکسی سرور(خدمات دهنده پیشکار) مناسب را برای برقراری ارتباط با یک نشانی وب (URL)  انتخاب کنند.

فایل **پی‌ای‌سی**  حاوی یک رویه (تابع یا همان فانکشن) جاواسکریپت با چنین ساختاری ست «». این فانکشن مشخصات یک یا چندین روش دسترسی را به صورت رشته (سترینگ) باز می‌گرداند (return). این رشته مشخصات، عامل کاربری را به استفاده از یک پراکسی سرور مشخص گاهی براساس یوآرال هدایت می‌کند یا اینکه دستور می‌دهد که مستقیم و بدون پراکسی با نشانی وب ارتباط برقرار کند.

در یک رشته می‌توان مشخصات چندین پراکسی را که به واسطه نقطه ویرگول (سمی کالن) از هم تفکیک می‌شوند وارد نمود تا در صورتی که هر یک از پراکسی‌ها پاسخ نداد به پراکسی بعدی مراجعه شود. مرورگر دقیقاً پیش از اینکه درخواست را به نشانی وب بفرستد، این فایل را واکشی(fetch) می‌کند تا تغییرات جدید کد این فایل برای مرورگر به روزرسانی شود. آدرس این پی‌ای‌سی، هم می‌تواند به صورت دستی پیکربندی شود هم اینکه توسط WPAD یا پروتکل یافتن خودکار پراکسی وب به صورت خودکار تعیین شود.

## [[تاریخچه نسخه‌های اندروید|تاریخچه]]
چهارچوب این پرونده در ابتدا توسط نتسکیپ در ۱۹۹۶ برای نتسکیپ نویگیتور ۲٫۰ طراحی شد

## لایه‌های پیکربندی پراکسی
مرورگرهای مدرن، لایه‌های متعددی از خودکارسازی را پی ریزی می‌کنند که کاربران می‌توانند سطح مناسب را براساس نیازهایشان انتخاب کنند. روش‌های زیر به صورت رایج در مرورگرها پی ریزی می‌شوند:
* انتخاب اتوماتیک پراکسی یا همان پیکربندی دستی: تعیین یک هاست نیم یا آی‌پی و یک شماره درگاه یا پورت نامبر برای استفاده در برقراری ارتباط با همه نشانی‌های وب. بیشتر مرورگرها به شما اجازه تعیین یک لیست از دامنه‌های مستثنی (همچون localhost) را می‌دهند که ارتباط با آن‌ها مستقیم و بدون پراکسی باشد.
* پیکربندی خودکار پراکسی یا پی‌ای‌سی: تعیین نشانی وب برای یک فایل پی‌ای‌سی حاوی یک تابع یا فانکشن که پراکسی مناسب را برای هر یوآرال تعیین می‌کند. این روش برای کاربران لپ‌تاپ که نیاز به پیکربندی‌های متعدد پراکسی دارند و کلاً کسانی که به پیکربندی پیچیده پراکسی نیاز دارند مناسب تر است.
* پروتکل یافتن خودکار پراکسی وب (WPAD): به مرورگر اجازه می‌دهد که محل فایل پی‌ای‌سی را بواسطه واکاوی(lookup) دی ایچ سی پی و دی ان اس حدس بزند.

## پرونده PAC
پرونده‌ای نوشتاری ست که حداقل یک رویه جاواسکریپت را تعریف می‌کند، یعنی «»، با دو ورودی: url که نشانی مقصد است و هاست که نام رایانه میزبان است که از این نشانی استخراج شده. طبق اصول و به‌طور معمول، پرونده پی‌ای‌سی  نامگذاری می‌شود. استاندارد WPAD از نام  استفاده می‌کند. در برخی مرورگرها مثل فایرفاکس اگر از پسوندی غیر از pac در نام پرونده استفاده شود کار نخواهد کرد زیرا مرورگر در لیست پسوندهای نامه اینترنتی چند منظوره(MIME) فقط انتظار یکی از انواع استاندارد را دارد یعنی:  یا . اما در افزونه FoxyProxy در فایرفاکس و برخی نرم‌افزارها می‌توان از هر پسوندی مثل js نیز استفاده کرد.

در مواردی که این فایل توسط یک هاست یا سرور برخط (آنلاین) قرار می‌گیرد، دربارهٔ اینکه کدامیک از این دو MIME بهتر است که توسط سرور برای کلاینت (عامل کاربر) در آغازینه(Header) ایچ تی تی پی در پاسخ(response) تعریف شود دلایل کافی وجود ندارد. اگرچه به نظر می‌رسد که  باید توسط کلاینت‌های بیشتری استفاده شود زیرا همان مشخصات اصلی تعریف شده توسط نتسکیپ بوده و گزینه دوم جدیدتر است.

در برخی موارد، ورودی تعیین مکان این پرونده فقط برای یک نشانی برخط اختصاص داده شده مثل فایرفاکس و اینترنت اکسپلورر که برای تعیین یک پرونده پی‌ای‌سی محلی بر خلاف آنلاین (در حافظه رایانه یا تلفن همراه) می‌توان از پیشوند فایل به جای پروتکل استفاده نمود برای مثال در ویندوز برای فایرفاکس: 

## راهنمای کد
لیست دستورهای تعیین روش ارتباط در رشته بازگشتی از فانکشن شامل: PROXY، SOCKS، SOCKS5 و DIRECT می‌باشد.
یک نمونه کد ساده برای نشانی سرور محلی یا لوکال برای ساکس ۵ در پورت ۱۰۸۰ و و پراکسی ایچ تی تی پی در پورت ۸۵۵۵ :

```javascript
function FindProxyForURL(url, host){
 return "SOCKS5 127.0.0.1:1080; PROXY 127.0.0.1:8555; DIRECT";
}
```

ابتدا از راه پورت ۱۰۸۰ روی آی‌پی  با ساکس ۵ تلاش می‌کند و اگر به هر دلیل ارتباط شکست خورد و سرور پراکسی پاسخ نداد، بعدی را تست می‌کند یعنی ۸۵۵۵ و با پراکسی و در نهایت اگر هر دو شکست بخورد ارتباط را بدون پراکسی و به صورت مستقیم برقرار می‌کند.

### رویه‌های فطری
رویه‌های از پیش تعریف شده و فطری(native) برای آسان کردن کار در پی‌ای‌سی نیز وجود دارد همچون shExpMatch. نمونه‌ای از یک نشانی و یک آی‌پی رینج استثنا :

```javascript
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";
}
```


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

### کاشه اینترنت اکسپلورر و DNS
کش کردن نتایج پی‌ای‌سی براساس نام دامنه در اینترنت اکسپلورر ۵٫۵ یا جدیدتر انعطاف‌پذیری استاندارد پی‌ای‌سی را محدود می‌کند. در واقع، شما می‌توانید پراکسی را براساس نام دامنه انتخاب کنید نه بر اساس نشانی وب. به عنوان راهکار، می‌بایست کش PAC را از رجیستری ویندوز غیر فعال نمایید.

در تغییر وضعیت پیکربندی شبکه (همچون زمانی که به وی پی ان وارد یا خارج می‌شوید)، dnsResolve ممکن است به دلیل کاشه DNS برای مدتی کوتاه نتایج منسوخ را برگرداند. برای نمونه، فایرفاکس معمولاً ۲۰ دامنه استفاده شده را برای ۶۰ ثانیه کش می‌کند. این پیکربندی کش می‌تواند توسط متغیرهای  و  تنظیم شود. همچنین فلاش کردن (شستن) کاشه سرور نام می‌تواند کمک کند. دستور فلاش در لینوکس  می‌باشد.

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

### myIpAddress
فانکشن myIpAddress معمولاً با این عنوان گزارش می‌شود که نتایج نادرست و غیر مفید را برمی گرداند همچون  که آی‌پی محلی ست. این فانکشن می‌تواند برای استثنا گرفتن همه آی‌پی‌های محلی (localhost و مشابه) ( در لینوکس و  در ویندوز) مفید باشد.اگر چند آی‌پی محلی موجود باشد، در اینترنت اکسپلورر ۹، فرمان  نتیجه true را برمی گرداند.

فانکشن myIpAddress فرض می‌کند که سیستم فقط یک آی‌پی نسخه چهار (IPv4) دارد. اگر بیش از یک آی‌پی نسخه ۴ موجود باشد یا آی‌پی نسخه ۶ باشد نتیجه undefined خواهد بود.

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

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

## جستارهای وابسته

* http://findproxyforurl.com
* Cybercriminals Likely To Expand Use Of Browser Proxies?

## منابع

رده:پراکسی سرورها
رده:مرورگرهای وب
رده:ویکی‌سازی رباتیک
رده:فایل‌ها
رده:جاوااسکریپت