Asp.Net Web Sayfalarını Şifreleme-Lisanslama

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

Kaynak:

Gökhan BAĞCI

  • Tarih : 18.01.2013 10:49:11


Etiketler: asp şifreleme , asp.net şifreleme , site gizleme , kod saklama , kod şifreleme ,

Yapılan Yorumlar

  • yorumcu websaati Tarafından Gönderildi

    elinize sağlık.. güzel bir yazı olmuş

  • yorumcu mero Tarafından Gönderildi

    Örnek dosya silinmiş tekrar ypload edilmesini rica ederim.

  • Sizde Bir Yorum Yazın...