ASP.NET MVC: JQuery Адрас Прадухіліць карыстальнік з Пераход да прамога адрасе

Мы распрацоўваем прыкладанне Ajax і выкарыстанне адрасу ўбудовы jQuery для загрузкі розных старонак прыкладання Так URLs для нашага сайта выглядае наступным чынам: www.app.com #/SomeController/SomeAction. Пераход да такога URL загружае маршрут па змаўчанні для прыкладання, а затым jQuery адрас выкарыстоўваецца для загрузкі SomeController/SomeAction URL ў DIV на гэтай старонцы.

Праблема заключаецца ў тым, што карыстальнік можа атрымаць доступ www.app.com/SomeController/SomeAction (без хэш-знак) непасрэдна увёўшы URL у браўзэры. Як мы прадухіляем карыстальнік не зможа атрымаць доступ да старонак наўпрост і патрабуем, каб яны маюць хэш-знак у там, каб пераканацца, што старонкі загружаюцца з дапамогай запыту Ajax?

1
Глядзіце таксама stackoverflow.com/questions/5567721/… .
дададзена аўтар Robert Harvey, крыніца

3 адказы

Вы можаце стварыць фільтр, які правярае request.isajaxrequest (). Вы адкідаеце любую запытаную, якія не з'яўляюцца, акрамя як на маршруце па змаўчанні.

Я не ўпэўнены, калі гэта лепшы спосаб, хоць.

1
дададзена

Стварэнне маршруту дадаць да вашага маршруту па змаўчанні, напрыклад, так:

routes.MapRoute(
    "404 non-hashed",
    "{*fullPath}",
    new { controller = "Error", action = "Show404" },
    new { fullPath = @"^(?!#).+" }
);

Гэты маршрут будзе апрацоўваць любы запыт, які не пачынаецца з хэш-сімвалам. Любы запыт, пачынаючы з хэш-сімвала не атрымаецца абмежаванне маршруту, і будзе ісці на свой маршрут па змаўчанні.

Стварэнне кантролера і дзеянні, каб паказаць старонку 404, ці некаторыя карыстацкія старонкі памылак, і вы ўстаноўлены.

1
дададзена

counsellorben правільна, вы можаце зрабіць маршрутызацыі хітрыкі, каб паспрабаваць абмежаваць шлях законных кліентаў або прыкладанняў запытаць пэўны рэсурс, але вы ніколі не будзеце ў стане абараніць сябе ад пакоўкі (З вусцілкі або іншай прыладай). Падыход, прапанаваны counsellorben карысна толькі патэнцыйна пазбегнуць непаразуменняў і абмежаваць «API» вобласць прыкладання. Вядома, вы не павінны на самай справе ёсць дадатак, якое залежыць толькі ад # глыбокіх сувязяў, таму што выклікае праблемы з SEO і г.д. Але гэта іншае абмеркаванне.

Іншы падыход, а не фільтр, вы можаце дадаць наступны радок у ваш метад дзеянні

if (this.HttpContext.Request.IsAjaxRequest() != true)
            return RedirectToAction("Index");

стандартная практыка тут, каб даць якар пусты або фіктыўны HREF уласнасці і мець падзея пстрычкі выканаць зваротны выклік AJAX? Такім чынам, калі карыстальнік капіюе праз гіперспасылку, ён проста аўтаматычна атрымлівае правільны URL.

0
дададзена
Дзякуй за каментар. Я цалкам згодны з праблемай SEO гэта можа прывесці, але ўсе гэтыя старонкі не будзе сканавацца ботам, як карыстальнік павінен прайсці праверку сапраўднасці для доступу да дадатку.
дададзена аўтар Nick Olsen, крыніца