none
asp.net'te url şifreleme RRS feed

  • Genel Tartışma

  • merhaba, hazırlanan bir web sayafasının url'sine dışarıdan bir karakter girildiğinde sayfanın değişmemesi, sayfa yönlendirilmesi veya url uzantısının örneğin microsoft.com/Forums/Gj89734hg gibi şifrelenmesini nasıl sağlayabilirim.
    3 Şubat 2013 Pazar 01:32

Tüm Yanıtlar

  • Merhabalar, dediğiniz olayı şu şekilde yapabilirsiniz.

    Öncelikle url değerini bir şifreleme ile şifrelemeniz gerekmektedir.

    Örn: md5 şifreleme metodu paylaşıyorum

     public string Encrypt_Password(string input)
            {
                MD5 md5 = System.Security.Cryptography.MD5.Create();
                byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
                byte[] hash = md5.ComputeHash(inputBytes);
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < hash.Length; i++)
                {
                    sb.Append(hash[i].ToString("X2"));
                }
                return sb.ToString();
            }


    Şimdi gelelim url'ye, varsayalım ki Urunler ve  UrunDetay sayfanız var ve Urun sayfasındaki bir urunun detayını göstermek istiyoruz. Urun detay sayfasına  bir ürünün id'sini vs. göndericeksiniz, ve buna göre ürün detaylarını göstericeksiniz.

    Urun.aspx Sayfası :

    Örneğin bir butonun click eventi içerisinde yönlendirme yapalım.

     Response.Redirect("Detay.aspx?id="+ idd.ToString()+"&"+"enc="+Encrypt_Password(idd));

    ve sonrasında Urun Detay sayfasında şöyle bir if kontrolü sağlamalısınız.

    if (Request.QueryString["id"] != null && Request.QueryString["enc"] != null)
            {
    
                if (Encrypt_Password(Request.QueryString["id"].ToString()) != Request.QueryString["enc"].ToString())
                {
                    Response.Write("url ile oynanmış");
                    Response.End();
    
                }
                else
                {
                }
            }

    Anlamadığınız yer olursa daha detaylı anlatabilirim.

    Kolay gelsin.



    3 Şubat 2013 Pazar 02:14
  • 1.

    Url yi yazan kişi istediği şekilde yazar engelleyemezsin. Url ile sizden bir sayfa talep eder, işte bu talebe hangi sayfa ile cevap vereceğine sen karar verirsin. Eğer url ye önceden hazırlayıp koyduğun değerler değişiyorsa kod zaten hata verecektir. 404.html gibi bir hata sayfası işini görür.

    2.

    Verdiğin örnekteki gibi url içindeki kriptolar genellikle ANSI olmayan karakterleri taşımak için kullanılır. Taşınan veride / ? boşluk gibi karakterler varsa bunlar Base64 algoritması ile kriptolanır. Bu algoritma gizleme algoritması değildir, sadece karakterleri url'ye uygun hale getirmede kullanılır.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
    MCC

    3 Şubat 2013 Pazar 07:25
    Moderatör
  • Şu şifrelemek için kullanacağın class;

    public static class StringHelper
        {
            public static string Sifrele(this string strQueryStringParameter)
            {
                MD5CryptoServiceProvider hash_func = new MD5CryptoServiceProvider();
                byte[] key = hash_func.ComputeHash(Encoding.ASCII.GetBytes("Anahtar1"));
                byte[] IV = new byte[8];
                SHA1CryptoServiceProvider sha_func = new SHA1CryptoServiceProvider();
                byte[] temp = sha_func.ComputeHash(Encoding.ASCII.GetBytes("Anahtar2"));
                for (int i = 0; i < 8; i++)
                    IV[i] = temp[i];
                byte[] toenc = System.Text.Encoding.UTF8.GetBytes(strQueryStringParameter);
                TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
                des.KeySize = 192;
                MemoryStream ms = new MemoryStream();
                CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(key, IV), CryptoStreamMode.Write);
                cs.Write(toenc, 0, toenc.Length);
                cs.FlushFinalBlock();
                return Convert.ToBase64String(Encoding.UTF8.GetBytes(Convert.ToBase64String(ms.ToArray())));
            }
    
            public static string SifreCoz(this string strQueryStringParameter)
            {
                MD5CryptoServiceProvider hash_func = new MD5CryptoServiceProvider();
                byte[] key = hash_func.ComputeHash(Encoding.ASCII.GetBytes("Anahtar1"));
                byte[] IV = new byte[8];
                SHA1CryptoServiceProvider sha_func = new SHA1CryptoServiceProvider();
                byte[] temp = sha_func.ComputeHash(Encoding.ASCII.GetBytes("Anahtar2"));
                for (int i = 0; i < 8; i++)
                    IV[i] = temp[i];
                byte[] todec = Convert.FromBase64String(Encoding.UTF8.GetString(Convert.FromBase64String(strQueryStringParameter)));
                TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
                des.KeySize = 192;
                MemoryStream ms = new MemoryStream();
                CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(key, IV), CryptoStreamMode.Write);
                cs.Write(todec, 0, todec.Length);
                cs.FlushFinalBlock();
                return System.Text.Encoding.UTF8.GetString(ms.ToArray());
    
            }
        }
    

    bir stringi şifrelemek için örn;

    string a="veri"

    a.sifrele() fonksiyonu şifreliyor, a.sifrecoz() fonksiyonuda çözülmüş halini getirir.

    3 Şubat 2013 Pazar 16:05
  • calpazhan hocam; bunların name spacelerini alabilirmiyim...

    birde benim kodlar şöyle olduğunu varsayarsak...

    sil butonu;

    <a href="Default.aspx?ID=<%#Eval("ID")%>&islem=onay">Sil</a>

    cs tarafı...

                           


    public partial class _Default : System.Web.UI.Page
    {        string islem="";
             string ID = "";
        protected void Page_Load(object sender, EventArgs e)
        {   
            islem= Request.QueryString["islem"];
            ID = Request.QueryString["ID"];

            if (islem=="onay")
            {
                SqlConnection baglann = new SqlConnection("Data Source=YENI\\SQLEXPRESS;Initial Catalog=data;Integrated Security=True");
                baglann.Open();
                SqlCommand cmdSil = new SqlCommand("delete from Ogrenciler Where ID='"+ID+"'",baglann);
                cmdSil.ExecuteNonQuery();

                baglann.Dispose();
                baglann.Close();

            }
            SqlConnection baglan = new SqlConnection("Data Source=YENI\\SQLEXPRESS;Initial Catalog=data;Integrated Security=True");
            baglan.Open();



            SqlCommand cmdGetir = new SqlCommand("select * from Ogrenciler ",baglan);
            SqlDataAdapter daa = new SqlDataAdapter(cmdGetir);
            DataTable dt = new DataTable();

            daa.Fill(dt);

            DataList1.DataSource = dt;
            DataList1.DataBind();

            baglan.Dispose();
            baglan.Close();

        }
    }

    3 Şubat 2013 Pazar 21:13