Makale Özeti

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.

Makale

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