[Owasp-turkey] Onerileriniz

Bedirhan Urgun urgunb at hotmail.com
Tue Jun 12 02:02:38 EDT 2007


 merhaba,
 >Sql server ile windows makine arasinda windows authtentication yapmam icin bunlari ayni domaine almam gerekir mi ? gerekmez ise, sql >makinesi, iisden gelen ticket I nasil authorize edecek ?; ayni domaine almak gerekirsede; internete actigim makine ile sql serveri >nedense ayni domaine almak istemem; bu konuda ne dusunuyorsunuz?
 
(birakalim veritabanini) IIS'i herhangi bir domain yapisina almayin diyorlar. Yani haklisin. Ancak yasadigim bi tecrubeyi anlatayim. 1-2 sene once bi ASP.NET <-> SQL Server 2005 arasini Windows Auth. kullanarak baglamak istedim. Burda yapilmasi gerekenin iki taraftada ayni isim/password'e sahip kullanicilar olusturulmasi gerektiginden bahsediyorlardi. :)
 Denedim ama olmadi. Uzerine de fazla gitmedim. 
 Yanliz soyle bi durum var; olusturdugum kullaniciyi/sifreyi, ASP.NET tarafinda Machine.config'e yazmam gerekti, hem de acik sifreli, ki ASP.NET bu kullanici ile calissin. Yani eskiden web.config'de olan sifre simdi machine.config'de ve acik.
 Windows Auth'u daha guvenli kullanmanin (makinalari ayni domain'e almamak disinda) mutlaka daha baska yontemleri de vardir, yani olmali :), arastirmak lazim.
 
 bedirhan


Date: Mon, 11 Jun 2007 08:31:05 -0700From: vuzun at csusb.eduTo: bunyamindemir at gmail.comCC: owasp-turkey at lists.owasp.orgSubject: Re: [Owasp-turkey] Onerileriniz






Selamlar tekrardan,

Sifreleme isleminden sorumlu sinif asagidaki gibi bir yapiya sahip ; umarim cok kod copy paste yuzunden sizleri sikmam.
 
public class EncDec
{
    public static string strAlgoName = "TripleDES";    
    public static byte[] GenerateKey(bool bWriteToFile,string targetFile)
    {
        SymmetricAlgorithm des3Algo = SymmetricAlgorithm.Create(strAlgoName);
       // des3Algo.KeySize = 192;        
        des3Algo.GenerateKey();
        byte[] key = des3Algo.Key;
        if (bWriteToFile == true)
        {
            using (FileStream fs = new FileStream(targetFile, FileMode.Create))
            {
                fs.Write(key, 0, key.Length);
            }
        }
        return key;
    }
 
    public static byte[] GetKeyFromFile(string keyFile)
    {
        byte[] key;
        using (FileStream fs = new FileStream(keyFile, FileMode.Open))
        {
            key = new byte[fs.Length];
            fs.Read(key, 0, (int)fs.Length);
        }
        return key;
    }
 
    public static string DecryptData(byte[] key, byte[] data)
    {
        SymmetricAlgorithm algo = SymmetricAlgorithm.Create(strAlgoName);
        algo.Key = key;
        MemoryStream memStream = new MemoryStream();
        int ReadPos = 0;
        byte[] IV = new byte[algo.IV.Length];
        Array.Copy(data, IV, IV.Length);
        algo.IV = IV;
 
        ReadPos += algo.IV.Length;
        CryptoStream cs = new CryptoStream(memStream, algo.CreateDecryptor(), CryptoStreamMode.Write);
        cs.Write(data, ReadPos, data.Length - ReadPos);
      //  cs.Write(data,0,data.Length);
        cs.FlushFinalBlock();
        return Encoding.UTF8.GetString(memStream.ToArray());
    }
 
    public static byte[] EncryptData(byte[] key, string data)
    {
        //convert data in the byte arr
        byte[] clearTextData = Encoding.UTF8.GetBytes(data);
        SymmetricAlgorithm algo = SymmetricAlgorithm.Create(strAlgoName);
        algo.Key = key;
 
        MemoryStream memStream = new MemoryStream();
        //append IV
        algo.GenerateIV();
        memStream.Write(algo.IV, 0, algo.IV.Length);
        CryptoStream cs = new CryptoStream(memStream, algo.CreateEncryptor(), CryptoStreamMode.Write);
        cs.Write(clearTextData, 0, clearTextData.Length);
        cs.FlushFinalBlock();
        cs.Close();
        return memStream.ToArray();
    }
    public EncDec()
      {
            //
            // TODO: Add constructor logic here
            //
      }

}
 
Algoritmanin kullandigi key web.configte tutuluyor, ve aspnet_regiis –p ile bu kisim sifreleniyor. Bu sayede web.config en azindan bir derece daha guvenli.
Sql server ile windows makine arasinda windows authtentication yapmam icin bunlari ayni domaine almam gerekir mi ? gerekmez ise, sql makinesi, iisden gelen ticket I nasil authorize edecek ?; ayni domaine almak gerekirsede; internete actigim makine ile sql serveri nedense ayni domaine almak istemem; bu konuda ne dusunuyorsunuz?
 

Bu arada basitce sifrelemeyi soyle kullaniyorum :
Configuration webConfig = WebConfigurationManager.OpenWebConfiguration("~");
            AppSettingsSection appSettings = webConfig.GetSection("appSettings") as AppSettingsSection;
            string strkey = appSettings.Settings["TripleDesKey"].Value;
            byte[] key = Convert.FromBase64String(strkey);
 
            byte[] arrSSN = EncDec.EncryptData(key, ssn);

            byte[] arrDOB = EncDec.EncryptData(key, dateofBirth.ToString());            
 
bunun disinda hastalari ziyaret eden danismanlar, yazdiklari raporlari sisteme yukleyecekler, ve bu dosyalari daha sonra isterlerse sisteme giris hakki olan diger danismanlarla paylasabilecekler. Benim yapmak istedigim bir sekilde, dosyayi ilk yukleyen kisinin imzasini dosyaya atabilmek; bunu nasil yaparim henuz bilemiyorum; ( kullaniciya kibar bir mesajla lutfen imzalayin demeden )
 
 
Saygilar
Volkan

_________________________________________________________________
Live Earth is coming.  Learn more about the hottest summer event - only on MSN.
http://liveearth.msn.com?source=msntaglineliveearthwlm
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://lists.owasp.org/pipermail/owasp-turkey/attachments/20070612/d0ba4058/attachment.html 


More information about the Owasp-turkey mailing list