uForum.uz

uForum.uz (https://uforum.uz/index.php)
-   .NET & ASP.NET (https://uforum.uz/forumdisplay.php?f=159)
-   -   CAS Problems :( (https://uforum.uz/showthread.php?t=7577)

_TrachinuS_ 15.01.2009 11:31

CAS Problems :(
 
CAS (Code access security) problem occur when i want to implement StrongNameIdentityPermissionAttribute on my class/assembly. It always give me successful permission even without having public key.

Sample DLL Code
Код:

using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Permissions;

namespace SampleClass
{
    [StrongNameIdentityPermission(SecurityAction.Demand, PublicKey = "0024000004800000940000000602000000240000525341310004000001000100515bd67fd29477e06c5cddea9c9ef2a85579de908e8141784d22e4822b0c16586072a02d75e490a6621601c637b821de9009951ff8a220654aa3ddc62c0a5da80f1f629760ff194dd9dc3c1e69436e04ff870dc5657795aa9c7434e499bcc504150fb6e0100e6a047bae1de2a01c26d0027898ecfcec6e5fd747d449a8493399")]
    public class Class1
    {
        public string MySampleValue = "";

        public Class1(string SampleValue)
        {
            try
            {
               
                MySampleValue = SampleValue;
            }
            catch (Exception ex) { Console.WriteLine(ex.Message); }
        }
    }
}

Sample of calling
Код:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Security.Permissions;

using SampleClass;
using System.Security;

namespace SampleApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Encoding enc = Encoding.Default;
            //StrongNamePublicKeyBlob blob = new StrongNamePublicKeyBlob(enc.GetBytes("0024000004800000940000000602000000240000525341310004000001000100515bd67fd29477e06c5cddea9c9ef2a85579de908e8141784d22e4822b0c16586072a02d75e490a6621601c637b821de9009951ff8a220654aa3ddc62c0a5da80f1f629760ff194dd9dc3c1e69436e04ff870dc5657795aa9c7434e499bcc504150fb6e0100e6a047bae1de2a01c26d0027898ecfcec6e5fd747d449a8493399"));

            //StrongNameIdentityPermission per = new StrongNameIdentityPermission(blob, "SampleClass", new Version("1.0.0.0"));

            SampleClass.Class1 clss = new Class1("Wachach!");

            if (clss != null)
                MessageBox.Show(clss.MySampleValue);
            else
                MessageBox.Show("clss is null.");
        }
    }
}


_TrachinuS_ 16.01.2009 09:36

Is this forum alive???

ulugbek 16.01.2009 11:47

Siz .snk formatli fay hosil qilishingiz va uni AssemblyInfo faylida
saqlashingiz lozim. Masalan:

Код:

[assembly: AssemblyKeyFile("filenomi.snk")]
ko'rinishda.

Bu faylni("filenomi.snk") hosil qilish uchun .NET Framework SDK
dan foydalanasiz.
Masalan:
Код:

sn -k <filenomi>.snk
Bu faylda bitta ochiq kalit va bitta yopiq kalit saqlanadi.
Keyinroq ushbu classni ishlatish uchunsiz ochiq kalitdan
foydalanishingiz kerak.Bu ochiq kalitni olish uchun
Secutil.axe kere buladi.Siz hosil qilmoqchi bo'lgan DLL/Assembly
nomini ishlatgan holda ochiq kalitni(Public Key) 4iqarib olasiz.
Код:

secutil -hex -c -s <sizningdll>.dll > kalit.txt
Huddi shu kalitni
Код:

[StrongNameIdentityPermission(SecurityAction.Demand, PublicKey = "ochiq kalit")]
qo'llaysiz.


SecurityAction.Demand o'rniga SecurityAction.LinkDemand ni ham qo'llashingiz mumkin.

Bu dll ni bowqa loyihalarda qo'llashda loyiha DIRiga yuqoridagi .snk faylni ko'chirib o'tqizish
va AssemblyInfoda registrasiya qilish esizdan chiqmasin. Shunda har doim loyiha ochiq kalitdan foydalanib .snk ka orqali sizi klasizga murojaat qila oladi.
Shunda kod himoyalanadi.



Bu yerda yaxshigina misol bor.
http://www.developer.com/img/article...0/Securing.zip

_TrachinuS_ 16.01.2009 12:47

2 ulugbek,Before answering to this question Did u try yourself?

This works only on .Net Framework 1.1

And I need for .Net FrameWork 2.0 or later.

Any comments and ideas will appreciated.

Thank You!!!

PS. This Forum not breathing :)

_TrachinuS_ 16.01.2009 14:01

So I expected I found way myself:(

In AssemblyInfo.cs put following code regarding your case:
Код:

[assembly: InternalsVisibleTo("SampleApp, PublicKey=002400000480000094000000060200000240000525341310004000001000100795F3BFD920B13E0267CA46EAFA218237904BB262A6650CF21F6427BEC72699970F84699111C211C6A32726957A623CBCD73870BE2BA57F6EDC5F169AC369DFFDE58FBC65DEF2D9F9E7628853C7D25FB34F5F1A64873F31777E674E66168F8721F16D96F55336C9766280D032D30B510EB058A065C6FB4AFCDF42327757019AF")]
And All your sensitive classes and members put modifier as internal.

That's all:)

ulugbek 16.01.2009 21:50

jovob topganizdan hursandman. sizga havasim kelyapti oldin savol keyin javobiniyam beras. qoyil


Текущее время: 08:47. Часовой пояс GMT +5.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot
OOO «Единый интегратор UZINFOCOM»