چگونگی بازنویسی آدرس ها (UrlRewriting)
توسط : محمد علي محموديار
بازنویسی آدرس ها در ASP.NET
یکی از موارد پرکاربرد امنیتی است که فوايد زیادی دارد. سهولت ایندکس شدن سایت توسط
موتور های جستجو ، مخفی کردن Query String و نمایش ظاهری یک سایت پویا به صورت
ایستا و بالا بردن امنیت نسبی سایت از مهمترین این فواید هستند. در این مقاله سعی
می کنیم بصورت مختصر و مفید چگونگی بازنویسی آدرس ها را در ASP.NET توضیح دهیم.
کار UrlRewriting تبدیل یک آدرس اینترنتی واضح و با معنا به یک آدرس واقعی دارای Query String جهت تفسیر موتور Asp.net است. دو آدرس زیر را در نظر بگیرید :
| http://aspcode.ir/article.aspx?id=4&type=print http://aspcode.ir/article-4-print.html |
یقینا" آدرس دوم با معنی تر از آدرس اول است.در
ضمن تا حدودی امکان هک شدن سایت از طریق تزریق عبارات Sql
را کاهش می دهد. اجازه دهید ابزار های موجود برای UrlRewriting را بررسی
کنیم.
بعد از ظهور Asp.net 2.0 خبر پشتیبانی
استاندارد این تکنولوژی از UrlRewriting بسیار جالب توجه بود. برای این منظور در
Asp.net 2.0 تنها کافیست مقداری تغییر در Web.Config دهید :
| mappedUrl="~/show.aspx?id=5" /> |
دقت فرمایید تنظیمات فوق متعلق به شاخه
برای حل این مشکل ابزار های دیگری در دسترس برنامه
نویسان قرار گرفته است. یکی از بهترین ابزار ها را می توان در سایت www.UrlRewriting.net یافت. جهت
استفاده از این ابزار که Open Source هم می باشد ، می
توانید مستندات آن و تمام آنچه که نیاز دارید از آدرس فوق دانلود کنید.
هر چند
که مستندات و مطالب ارائه شده در سایت فوق کاملا" جامع است ، ولی در ادامه این
مقاله، توجه شما را به مثال هایی از UrlRewriting در Asp.net جلب می کنم.
ابتدا فایل
ضمیمه مقاله را دریافت کنید و Intelligencia.UrlRewriter.dll
را به پوشه Bin پروژه خود انتقال دهید. حال مراحل
زیر را جهت بازخوانی یک آدرس ثابت دنبال کنید :
فایل Global.asax را باز و رویداد Application_BeginRequest را بصورت زیر کد نویسی می کنیم. همانطور که از نام این رویداد پیداست زمانی
کد اجرا می شود که درخواستی به سمت موتور Asp.net
ارسال شود.
| if (Request.Url.ToString().Contains("show.htm")) { Context.RewritePath("show.aspx"); } |
در این مثال محتوای صفحه ای با نام show.htm که بصورت مجازی ایجاد شده است و وجود خارجی ندارد از صفحه ای دیگر با نام show.aspx خوانده می شود.
سپس فایل web.config را باز و محتوای آن را به صورت زیر تنظیم نمایید :
لطفا" به محل قرار گرفتن تغییرات دقت ویژه ای
داشته باشید :
توجه فرمایید کد کامل برنامه را نیز می توانید در انتهای
برنامه دانلود نمایید.
مخفی کردن
Query String :
شاید به ذهن شما
رسیده باشد که چگونه می توان آدرس های مجازی دارای Query
String را نیز بازنویسی کنیم. این کار نیز بسیار ساده است
و تفاوتهای جزئی با مثال بالا دارد.
برای اینکار دوباره
فایل Global.asax را باز و رویداد
Application_BeginRequest را بصورت زیر کد نویسی می کنیم
:
| if (Request.Url.ToString().Contains("show-(.+).htm")) { Context.RewritePath("show.aspx?id=$1"); } |
علامت (.+) نماینده یک متغیر است که مقدار Query String را می گیرد و $1 در خط بعدی همان مقدار (.+) و نماینده مقدار Query String در آدرس حقیقی است. همچنین تگ rewrite را بصورت زیر تغییر دهید :
در صورتی که آدرس شما دارای بیش از یک پارامتر Query String است (برای مثال سه پارامتر) بصورت زیر عمل کنید :
| show-(.+)-(.+)-(.+).htm Show.aspx?Page=$1&Id=$2&state=$3 |
همچینین تگ rewrite را مانند مثالها قبلی تغییر
دهید.
فکر می کنم با مثال های متعدد در این مقاله، شما
این مهارت را پیدا کرده باشید تا آدرس ها را بصورت مجازی
ایجاد کنید.نکته :
دقت
کنید که در بازخوانی آدرسهای با چندین پارامتر Query String در قسمت آدرس حقیقی قبل از & ، amp; را قرار دهید. در ضمن
برای بازخوانی مقدار Query String نیاز به کد نویسی خاصی
نیست و با در نظر گرفتن مثال فوق بعد از UrlRewriting با دستور زیر در صفحه show.aspx می توانیم مقدار Query String
را بخوانیم :
| Response.Write((string)Request.QueryString["id"]); |






کد: