GeirGrusom Skrevet 15. oktober 2006 Del Skrevet 15. oktober 2006 Jeg har laget et program, der jeg bruker Micrsoft.CSharp.CSharpCodeProvider til å lage et script til manipulering av tall og tekststrenger, men jeg vil hindre de som bruker den i å bruke f.eks. System.IO eller System.NET, hvordan kan jeg få til det, annet en å si ifra hvis koden inneholder System.IO eller System.NET? Lenke til kommentar
j000rn Skrevet 15. oktober 2006 Del Skrevet 15. oktober 2006 Jeg har laget et program, der jeg bruker Micrsoft.CSharp.CSharpCodeProvider til å lage et script til manipulering av tall og tekststrenger, men jeg vil hindre de som bruker den i å bruke f.eks. System.IO eller System.NET, hvordan kan jeg få til det, annet en å si ifra hvis koden inneholder System.IO eller System.NET? 7076729[/snapback] Tar jeg feil hvis jeg tror denne klasser er kun for å kompilere? Er vel MANGE andre ting du må ta hensyn til for å få det sikkert da Tror heller du bør tenke på sikkerhet når koden skal kjøres. .Net har ekstremt god støtte for dette i .Net. Denne burde få deg litt igang: http://msdn.microsoft.com/msdnmag/issues/01/03/clr/ Hva skal du bruke dette til forresten? Skriv gjerne inn et innlegg for å fortelle hvordan det går (siden jeg er litt nysgjerrig) Lenke til kommentar
GeirGrusom Skrevet 16. oktober 2006 Forfatter Del Skrevet 16. oktober 2006 Dety gjelder et program (noe lignende Adobe Acrobat) der en tekstbox som en setter ut, har nå en egenskap som heter Expression, denne Expression starter en funksjon i et Interface kalt IStringExpression og er ment at man skal kunne legge inn verdier, og kunne addere, multiplisere etc. flere verdier (for f.eks. å summere alle verdier i en faktura) Det funker fint nå, men jeg vil ikke at folk skal kunne bruke det til å ta over datamaskinen, og siden en ikke kan legge til flere referances, så ville jeg tro at å hindre noen i å bruke fil, eller netverk, skal man kunne hindre dem i å gjøre noe alvorlig galt. Lenke til kommentar
j000rn Skrevet 16. oktober 2006 Del Skrevet 16. oktober 2006 Dety gjelder et program (noe lignende Adobe Acrobat) der en tekstbox som en setter ut, har nå en egenskap som heter Expression, denne Expression starter en funksjon i et Interface kalt IStringExpression og er ment at man skal kunne legge inn verdier, og kunne addere, multiplisere etc. flere verdier (for f.eks. å summere alle verdier i en faktura) Det funker fint nå, men jeg vil ikke at folk skal kunne bruke det til å ta over datamaskinen, og siden en ikke kan legge til flere referances, så ville jeg tro at å hindre noen i å bruke fil, eller netverk, skal man kunne hindre dem i å gjøre noe alvorlig galt. 7079034[/snapback] Kan du poste litt eksempelkode? Lenke til kommentar
GeirGrusom Skrevet 16. oktober 2006 Forfatter Del Skrevet 16. oktober 2006 Jeg har nå gjort det slik at en kan kun skrive én linje med kode, altså begynner koden alltid med "return " og slutter med ";" her er hvordan jeg har gjort det: public IStringExpression CreateStringExpressionSolver(string expression, Dictionary<string, string> variables) { string code = ""; // Create code header. code += "using System;"; code += "namespace MathExpression {"; code += "public class StringExpressionSolver : ReassuranceLib.MathExpression.IStringExpression { "; code += "public string Solve(System.Collections.Generic.Dictionary<string, string> var) { "; // Add variables into the code as variables, for ease of use. foreach (string varname in variables.Keys) { code += "string " + varname + " = var[" + varname + "];"; } code += "return "; // code += Substitute(expression) // Find a way to get rid of this, // since the function may in rare cases render the code uncompilable. code += expression; code += "; }"; // We need a provider to compile the code m_provider = new Microsoft.CSharp.CSharpCodeProvider(); m_params = new System.CodeDom.Compiler.CompilerParameters(); // Add this assembly (ReassuranceLib) as a referanced assembly // Or the compile will fail, due to missing interfaces (IStringExpression) m_params.ReferencedAssemblies.Add(System.Reflection.Assembly.GetExecutingAssembly().Location); m_params.GenerateExecutable = false; // We don't need an exe file output m_params.GenerateInMemory = true; // But we need the program to be placed in memory m_results = m_provider.CompileAssemblyFromSource(m_params, code); // Compile from generated code Type t = m_results.CompiledAssembly.GetType("MathExpression.StringExpressionSolver"); return (IStringExpression)Activator.CreateInstance(t); } Lenke til kommentar
j000rn Skrevet 16. oktober 2006 Del Skrevet 16. oktober 2006 Det var noen syntaxfeil i koden din, men det regner jeg med at du vet om. Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed. Noe sånt du er ute etter? System.Security.Policy.Evidence evidence = new System.Security.Policy.Evidence(); evidence.AddHost( new System.Security.Policy.Zone( System.Security.SecurityZone.Internet ) ); m_params.Evidence = evidence; Lenke til kommentar
j000rn Skrevet 16. oktober 2006 Del Skrevet 16. oktober 2006 Og den kan du jo selvfølgelig catch'e i programmet ditt... try { Solve(); } catch(SecurityException sex) { MessageBox.Show("Ikke prøv å hacke!"); } catch(Exception ex) { MessageBox.Show("Lær deg å programmere!"); } Lenke til kommentar
GeirGrusom Skrevet 16. oktober 2006 Forfatter Del Skrevet 16. oktober 2006 Jeg var klar over feilene, for en programmerer blir vel aldri ferdig med noe som helst Det er de security attribute sakene jeg er ute etter ja! Konge, du er en helt Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå