Как я могу препятствовать тому, чтобы несанкционированный код получил доступ к моему блоку в.NET 2.0?

Это должно работать, но иногда таблица Primeng не сталкивается с изменениями, внесенными в данные, поэтому, в этом случае, попробуйте этот сценарий -

onSave(newItem){
  this.dataItems = []; // Refresh datatable data by set it yo e
  this.dataItems= [newItem];
  this.showMyDialog = false; //to hide the dialog.
}
7
задан Daniel Fischer 26 August 2012 в 15:37
поделиться

3 ответа

Согласно предложению Eric, я решил его путем проверки ключа сам. В коде я хочу защитить, я добавляю следующий вызов,

EnsureAssemblyIsSignedByMyCompany( Assembly.GetCallingAssembly() );

Затем реализация того метода

  /// <summary>
  /// Ensures that the given assembly is signed by My Company or Microsoft.
  /// </summary>
  /// <param name="assembly"></param>
  private static void EnsureAssemblyIsSignedByMyCompany( Assembly assembly )
  {
     if ( assembly == null )
        throw new ArgumentNullException( "assembly" );

     byte[] pubkey = assembly.GetName().GetPublicKeyToken();
     if ( pubkey.Length == 0 )
        throw new ArgumentException( "No public key token in assembly." );

     StringBuilder builder = new StringBuilder();
     foreach ( byte b in pubkey )
     {
        builder.AppendFormat( "{0:x2}", b );
     }
     string pkString = builder.ToString();
     if ( pkString != "b77a5c561934e089" /* Microsoft */ &&
          pkString != "abababababababab" /* Ivara */ )
     {
        throw new ArgumentException( "Assembly is not signed by My Company or Microsoft. You do not have permission to call this code." );
     }
  }

** Имена и ключи, измененные для защиты невинного. Любое сходство с настоящими именами или компаниями является просто совпадением.*

5
ответ дан 7 December 2019 в 07:51
поделиться

Как Joel указал, Вам не повезло относительно CAS. Однако Вы можете делать проверку сами в любом методе, который необходимо защитить при помощи блока. GetCallingAssembly () для получения ссылки на блок, содержащий код вызова, затем проверьте строгое имя на том блоке вручную.

1
ответ дан 7 December 2019 в 07:51
поделиться

См. эту статью:
http://blogs.msdn.com/ericlippert/archive/2008/10/06/preventing-third-party-derivation-part-two.aspx

Особенно эта часть:

В последних версиях.NET, "полное доверие означает полное доверие". Таким образом, полностью доверяемый код удовлетворяет все требования, включая требования вещей как "был подписан с этим ключом", был ли он на самом деле подписан или нет.

Разве это не смертельный дефект в системе безопасности? Нет. Полностью доверяемый код всегда имел способность сделать это, потому что полностью доверяемый код имеет способность управлять доказательством, связанным с данным блоком. Если можно управлять доказательством, то можно подделать блок, который похож на него, прибыл из Microsoft, без проблем. (И если у Вас уже есть злонамеренный код полного доверия в Вашем процессе затем, Вы уже проиграли - оно не должно являться олицетворением подписанных Microsoft блоков; это уже имеет власть делать независимо от того, что пользователь может сделать.)

По-видимому, разработчики .NET чувствовали, что этот атрибут не был очень эффективным для полного доверительного кода при.Net 1.x также.

1
ответ дан 7 December 2019 в 07:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: