PDA

توجه ! این یک نسخه آرشیو شده می باشد و در این حالت شما عکسی را مشاهده نمی کنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : چگونگی بازنویسی آدرس ها (UrlRewriting) در ASP



Borna66
07-29-2010, 01:11 PM
ویسی آدرس ها در ASP.NET یکی از موارد پرکاربرد امنیتی است که فوايد زیادی دارد. سهولت ایندکس شدن سایت توسط موتور های جستجو ، مخفی کردن Query String و نمایش ظاهری یک سایت پویا به صورت ایستا و بالا بردن امنیت نسبی سایت از مهمترین این فواید هستند. در این مقاله سعی می کنیم بصورت مختصر و مفید چگونگی بازنویسی آدرس ها را در ASP.NET توضیح دهیم.



کار UrlRewriting تبدیل یک آدرس اینترنتی واضح و با معنا به یک آدرس واقعی دارای Query String جهت تفسیر موتور Asp.net است.




یقینا" آدرس دوم با معنی تر از آدرس اول است.در ضمن تا حدودی امکان هک شدن سایت از طریق تزریق عبارات Sql را کاهش می دهد. اجازه دهید ابزار های موجود برای UrlRewriting را بررسی کنیم.

بعد از ظهور Asp.net 2.0 خبر پشتیبانی استاندارد این تکنولوژی از UrlRewriting بسیار جالب توجه بود. برای این منظور در Asp.net 2.0 تنها کافیست مقداری تغییر در Web.Config دهید :





<urlMappings enabled="true">
<add url="~/show-5.htm"
mappedUrl="~/show.aspx?id=5" />
</urlMappings>


دقت فرمایید تنظیمات فوق متعلق به شاخه <system.web> می باشد و باید در این بخش از Web.Config تعریف شود. در مثال بالا url آدرسی است که کاربر مشاهده می کند و mappedUrl آدرس حقیقی ماست. اما همانطور که از ظواهر امر پیداست این روال کاری، تنها برای مواقعی مفید خواهد بود که تعداد دفعات استفاده محدود باشد و در صورتی که تعداد آدرس ها بالا باشد ، مدیریت آنها بسیار کار مشکل و زمانبری خواهد بود.

برای حل این مشکل ابزار های دیگری در دسترس برنامه نویسان قرار گرفته است. یکی از بهترین ابزار ها را می توان در سایت www.UrlRewriting.net (http://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 را باز و محتوای آن را به صورت زیر تنظیم نمایید :








<configSections>
<section name="rewriter" type="Intelligencia.UrlRewriter.Configuration. RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter"/>
</configSections>

<httpModules>
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
</httpModules>

<rewriter>
<rewrite url="show.htm" to="show.aspx"/>
</rewriter>




لطفا" به محل قرار گرفتن تغییرات دقت ویژه ای داشته باشید :

<configSections> : داخل تگ <configuration> قرار گیرد.
<httpModules> : داخل تگ <system.web> قرار گیرد.
<rewriter> : داخل تگ <configuration> و خارج و بعد از تگ<system.web> قرار گیرد.

توجه فرمایید کد کامل برنامه را نیز می توانید در انتهای برنامه دانلود نمایید.

مخفی کردن 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 را بصورت زیر تغییر دهید :





<rewrite url="show-(.+).htm" to="show.aspx?id=$1"/>



در صورتی که آدرس شما دارای بیش از یک پارامتر Query String است (برای مثال سه پارامتر) بصورت زیر عمل کنید :





show-(.+)-(.+)-(.+).htm
Show.aspx?Page=$1&amp;Id=$2&amp;state=$3



همچینین تگ rewrite را مانند مثالها قبلی تغییر دهید.
فکر می کنم با مثال های متعدد در این مقاله، شما این مهارت را پیدا کرده باشید تا آدرس ها را بصورت مجازی ایجاد کنید.

نکته :

دقت کنید که در بازخوانی آدرسهای با چندین پارامتر Query String در قسمت آدرس حقیقی قبل از & ، amp; را قرار دهید. در ضمن برای بازخوانی مقدار Query String نیاز به کد نویسی خاصی نیست و با در نظر گرفتن مثال فوق بعد از UrlRewriting با دستور زیر در صفحه show.aspx می توانیم مقدار Query String را بخوانیم :


Response.Write((string)Request.QueryString["id"]);
دانلود فایل ضمیمه | دریافت کد (http://www.aspcode.ir/Download/UrlRewriting_aspcode.zip)