Web Sayfalarında Lisanslama

Yazar: Gökhan BAĞCI
Kategori: ASP.NET
Eklenme Tarihi: 19.11.2008 08:01:42



Bu makalemde sizlere Web Sitelerinde lisanslama kullanımı ile ilgili bilgiler vereceğim. Kısaca lisanslamadan söz edecek olursak, genelde yaptığımız programlar ya da web siteleri freeware(ücretsiz) değilse tek kullanıcı hakkına sahiptir. Yani bir program satın aldığımızda sadece bir pc?de o lisansı kullanabiliriz. Web siteleri için düşündüğümüzde yaptığımız paket web sitelerini domain bazında lisanslama işlemi için kullanabiliriz.

Bu makalemde sizlere Web Sitelerinde lisanslama kullanımı ile ilgili bilgiler vereceğim. Kısaca lisanslamadan söz edecek olursak, genelde yaptığımız programlar ya da web siteleri freeware(ücretsiz) değilse tek kullanıcı hakkına sahiptir. Yani bir program satın aldığımızda sadece bir pc?de o lisansı kullanabiliriz. Web siteleri için düşündüğümüzde yaptığımız paket web sitelerini domain bazında lisanslama işlemi için kullanabiliriz.

Lisanslama işlemlerinde temel olarak iki aşama var. Biri encoding(şifreleme), diğeri decoding(şifre çözme). Encoding aşamasında domain adına göre bir anahtar değer oluşturacağız. Oluşan bu değeri daha sonra kontrol işlemleri için decoding edip domain adı ile karşılaştıracağız. Bu karşılaştırma sonucunda eğer değerler eşleşiyor ise sitenin açılışına devam edilecek, değilse belirlediğimiz bir işlemi gerçekleştireceğiz. Bu arada decoding edilmiş domain adını web.config dosyamızda saklayacağız.

web.config

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="licenseKey" value="bABvAGMAYQBsAGgAbwBzAHQAOgA0ADMAOQAyAA=="/>
  </appSettings>
</configuration>

Öncelikle encoding ve decoding işlemleri için iki ayrı class oluşturalım ve bunları farklı dll ?lerde barındıralım. Aynı dll ?de olursa encoding ve decoding işlemlerini gerçekleştireceğimiz methodlara kullanıcı erişmiş olur. Bu durum çok sağlıklı değil çünkü bu algoritmalara göre sistem çökertilmeye çalışılabilir. Mantık olarak kullanıcı sadece decoding işlemini görmeli, encoding işlemi üretici elinde bulunmalıdır.

Aşağıda basit olarak iki adet şifreleme algoritması yazacağım. Siz kendiniz belirlediğiniz bir algoritmayı kullanabilirsiniz.

Encoding

using System;
using System.Text;
namespace Crypt
{
    public class Encode
    {
        public string Create(string Url)
        {
            try
            {
                UnicodeEncoding ue = new UnicodeEncoding();
                Byte[] buffer = ue.GetBytes(Url);
                return Convert.ToBase64String(buffer);
            }
            catch
            {
                return null;
            }
        }
    }
}

Decoding

using System;
using System.Text;
namespace Crypt
{
    public class Decode
    {
        public string Create(string Url)
        {
            try
            {
                UnicodeEncoding ue = new UnicodeEncoding();
                Byte[] buffer = Convert.FromBase64String(Url);
                return ue.GetString(buffer);
            }
            catch
            {
                return null;
            }
        }
    }
}

Daha sonra bir web projesi oluşturup, proje içerisine bir global.asax dosyası ekliyoruz. Bu aşamada da  Global.asax dosyamız içerisinde Application_BeginRequest eventında gelen istekleri kontrol ederek doğrulama işlemlerini kontrol edeceğiz.

Global.asax

<%@ Application Language="C#" %>
<%@ Import Namespace="Crypt" %>
<script RunAt="server">
    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        //Decoding işlemi için kullanacağımız classımızı oluşturuyoruz
        Decode decode = new Decode();
        //web.config içerisinde tuttuğumuz domain adından encoding edilmiş key değerini alıyoruz
        string licenseKey = decode.Create(ConfigurationManager.AppSettings["licenseKey"].ToString());
        //Bu kısımda domain ile key karşılaştırıyoruz
        //bize dönen değer ör. www.domainadi.com
        if (Request.Url.Authority != licenseKey)
        {
            Response.Redirect(http://www.google.com);
        }
    }
</script>

En son yapmamız gereken işlem ise web sitemizi publish edip kullanıcıya kodlara müdahele edemeyecek şekilde teslim etmek. Daha fazla güvenlik için oluşan kodları dotfuscator tarzı third parti programlar ile encrypt edebiliriz.

Örnek projeyi indirmek için tıklayın

Gökhan BAĞCI
gokhanbagci.com


Gökhan BAĞCI

2003 yilindan itibaren .Net teknolojilerini takip etmektedir. Freelance olarak bir çok sahis ve firma için proje gelistirmistir.

Erol Ergül - 5.3.2012 1
Linkler silinmiş ve sitenizde çalışmıyor rica etsem linkli yenileyebilirmisiniz ?

ahmet faruk - 19.11.2008
Gökhan hocam Çok teşekkürler gerçekten faydalı ve herkes tarafından merak edilen bir konuya değinmişsin tebrikler yanlız ben asp.net hakkında tecrübe sahii değilim bilgim yok başlamayı düşünüyorum fakat bir türlü başlayamadım şuanda asp çlışıyorum ve bana daha eğlenceli geldi asp onun için asp üzerine ilerlemeye gayret gösteriyorum şuanda fakat bir yandanda c# v asp.net öğrenmek istiyorum bu lisanslama işlemini asp ilindede anlatımı olsa çok güzel olurdu...

Yorumunuz