8 03 2014

How To Clone A Generic List in C#

static class Extensions
{
    public static IList<T> Clone<T>(this IList<T> listToClone) where T: ICloneable
    {
        return listToClone.Select(item => (T)item.Clone()).ToList();
    }
}

5 07 2013

Cross Side Request Forgery attack nedir? [Anti Forgery in MVC]

CSRF (Cross Side Request Forgery) aynı zamanda XSRF olarak da kısaltılmıştır. Türkçeye "çapraz site sahteciliği" olarak çevrilmiştir. Şu şekilde kısa ifade edebiliriz, bir saldırganın siteniz üzerinde verilere erişip değiştirebilmesi, silebilmesi veyahut veri yazabilmesi. Bunun önüne geçilebilmesi için ajax methodları için yazdığımız servisleri yetkilendirmeye tabi tutacağız, bunu da sitemizi barındırdığımız IIS üzerinde bir machine key oluşturup, sitemiz dahilinde bu servisi kullanan sayfada bu key ile kriptolanmış bir token oluşturup istemcinin makinasına cookie ile atacağız, daha sonra gelen her istekte bu tokenı okuyarak karşılaştıracağız ve açık ajax methodları (webapi restful servisler) güvenli hale getirilmiş olacak. Tüm bu token oluşturma, cookie oluşturma vs. işlerini her sayfada biz değil de bizim yerimize Microsoftun getirmiş olduğu Antifoırgery token sistemi yapacak. Şimdi uygulamalı örneğimizle daha iyi açıklayalım;

Otel listesi dönen view;
HotelList.cshtml
@{
    ViewBag.Title = "Hotel List";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@Html.AntiForgeryToken()
<< formumuzun arama butonu, webapi controllera çağrıda bulunur.
 viewımız her ne kadar GET methodu kullansada bir form ve tokenı değerini üretip sayfaya bir hidden field ile basacak olan
@Html.AntiForgeryToken()​ fonksiyonunu ekledik. sayfa render edildiğinde sayfa kaynağında aşağıdaki gibi bir token eklendiğini görürüz,
<form id="__AjaxAntiForgeryForm" action="#"><input name="__RequestVerificationToken" type="hidden" value="AcKivtXxcbUSPqyNM9FC1N2Olunc3IWK6tZPxr3rTeOTikbFOPb3NCJiL5pwZEW9xk9E7JmuP3KDdTaUCxc3MYWbUycnbbWWIr9Gi-TFaFbgVt9xIRCiAs9LHG3-hwSgclziMQ2" /></form>

Şimdi webapi controller ımıza antiforgery token validate ettirecek atrribute ekleyelim,


    [ValidateHttpAntiForgeryToken]
    public class TApi1Controller : ApiController
    {
           // GET api/tapi1
        public IEnumerable GetHotelList() 
        {
            var hotels = BusinessLayer.DataProvider.GetHotelList("", "", "", 1, 0);
            return hotels;
        }

Projemize Filters adında yeni bir klasör yaratalım, ve antiforgery validate edecek olan attribute classımızı ekleyelim,

public class ValidateHttpAntiForgeryTokenAttribute : AuthorizationFilterAttribute
    {
        public override void OnAuthorization(HttpActionContext actionContext)
        {
            HttpRequestMessage request = actionContext.ControllerContext.Request;
            try
            {
                var cookie = request.Headers
               .GetCookies()
               .Select(c => c[AntiForgeryConfig.CookieName])
               .FirstOrDefault();
                AntiForgery.Validate(cookie != null ? cookie.Value : null, request.Headers.GetValues("__RequestVerificationToken").FirstOrDefault());
            }
            catch (HttpAntiForgeryException e)
            {
                actionContext.Response = request.CreateErrorResponse(HttpStatusCode.Forbidden, e);
            }
        }

Ve son olarak ajax methodumuzu çağıran javascript dosyamıza gerekli düzenlemeyi yapıyoruz,

var token = $('[name=__RequestVerificationToken]').val();
var headers = {};
headers["__RequestVerificationToken"] = token;

function GetHotelSearchList() {
    jQuery.support.cors = true;
    $.ajax({
        url: 'http://mydomain/GetHotelList',
        type: 'GET',
        contentType: "application/json;charset=utf-8",
        cache: false,
        headers: headers,
        success: function (data) {
            WriteResponseHotelList(data);
        },
scriptte görüldüğü üzere, token değerini header olarak ajax requestimize ekleyip sunucuya gönderiyor ve validate edilmesini sağlıyoruz, bunu yapmazsak istenen responseu vermeyecek ve header error dönecektir.
Ürettiğimiz token, session bazlı cookie oluşturur, token değerini web.config system.web altında de belirteceğimiz machineKey tag ile belirteceğiz,
 <machineKey validationKey="C155B0F32216020427A11841A17E9792B1FD7AAB7B0916EDF334788BCDFD1FB96093D1FD2AA94D270C6FFD47E55178549143623E435773732D67C16F78974059" decryptionKey="AD4A4DB683704373A30CF9BA109EFB13C0DA5E2345823905F61BBBD56BD3F12B" validation="SHA1" decryption="AES" />
</system.web>  
machineKey üretmek için şu adresi kullanabilirsiniz,
http://aspnetresources.com/tools/machineKey
Artık CSRF attack larına karşı güvendeyiz, sitemizi test ettikten sonra saldırıya karşı nasıl cevap verdiğini görmek için test amaçlı olarak şu kısmı kapatıp sabit bir değer vermeyi deneyin resimdeki gibi hata verecektir ,

<form id="__AjaxAntiForgeryForm" action="#"><input name="__RequestVerificationToken" type="hidden" value="fBoEFIJVpx8kdsgD0l9jWQI0sTKr2aZkeFyLlt143IOwfMDBKhGFFzNUFD7sdsuxGkVVd51-jhB8ZFIc7hkfj2Apuik_bAaQ94xp7hwOb_CCPrRvhAzMwK04-ZWEHVsS0hStRQ2" /></form>
 
Önlemin çalıştığından emin olduktan sonra tekrar eski haline çevirip kaydetmeyi unutmayalım,
@Html.AntiForgeryToken()

Herkese iyi çalışmalar dilerim.
Mücahid Uslu

11 03 2013

How To Build Responsive Web Design

Responsive design is a skill for developing the next generation of muiti-device applications and websites.
There is a great article on responsive designat foloowing link,

https://www.simple-talk.com/dotnet/asp.net/responsive-design-using-foundation-with-asp.net-mvc/



11 01 2013

How to fix rewrite rule for excluding media content folder

rule name="ModX IIS7 Rule 2" stopProcessing="true">
             match url="^(wp-content)" ignoreCase="false" />              
                           action type="None"
                       
       

add this rule script into your web.config for except media content

21 12 2012

Benefits Of ASP.NET MVC



Testable Structure
Inteligible Model
Performance
Separation of concerns
Reuseable & more readable code
Clean HTML
Clearly appears the advantage of MVC in larger multi-developer sites !

The main advantages of ASP.net MVC are:
1.      Enables the full control over the rendered HTML.
2.      Provides clean separation of concerns(SoC).
3.      Enables Test Driven Development (TDD).
4.      Easy integration with JavaScript frameworks.
5.      Following the design of stateless nature of the web.
6.      RESTful urls that enables SEO.
7.      No ViewState and PostBack events

  • Separation of concerns (SoC) • From a technical standpoint, the organization of code within MVC is very clean, organized and granular, making it easier (hopefully) for a web application to scale in terms of functionality. Promotes great design from a development standpoint.
  • Easier integration with client side tools (rich user interface tools) • More than ever, web applications are increasingly becoming as rich as the applications you see on your desktops. With MVC, it gives you the ability to integrate with such toolkits (such as jQuery) with greater ease and more seamless than in Web Forms.
  • Search Engine Optimization (SEO) Friendly / Stateless • URL's are more friendly to search engines (i.e. mywebapplication.com/users/ 1 - retrieve user with an ID of 1 vs mywebapplication/users/getuser.aspx (id passed in session)). Similarly, since MVC is stateless, this removes the headache of users who spawn multiple web browsers from the same window (session collisions). Along those same lines, MVC adheres to the stateless web protocol rather than 'battling' against it.
  • Works well with developers who need high degree of control • Many controls in ASP.NET web forms automatically generate much of the raw HTML you see when an page is rendered. This can cause headaches for developers. With MVC, it lends itself better towards having complete control with what is rendered and there are no surprises. Even more important, is that the HTML forms typically are much smaller than the Web forms which can equate to a performance boost - something to seriously consider.
  • Test Driven Development (TDD) • With MVC, you can more easily create tests for the web side of things. An additional layer of testing will provide yet another layer of defense against unexpected behavior.

20 12 2012

How to Fix Windows 8 store install pending problem


for troubleshooting (press win+w >then type troubleshooting).

click -fix problems with windows updates-
click next.
when windows ask  you want to try in administrator mode, click -yes-
and windows will find problem and solve the problem.

10 12 2012

Installing Virtaual Linux using Hyper-V and Linux Integration Services


Example for CENTOS 6.3

1 - Download LIC 3.4
2- Connect your Virtual machine
3- as root user, mount /dev/cdrom /media
4- chmod 777 /media
5- cd /media
6- cd RHEL63  (or whatever your os system version exist, for centos6.3 choose RHEL63)
7- ./install.sh

This also is a solution for "Failed dependencies" problem !
problem described as "is needed by kmod-microsoft-hyper-v- ...."
 LIC 3.4 is a MUST package to fix it !

And final result ; :)





Share It