Модераторы: diadiavova, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как запустить WebBrowser без предупреждения. 
V
    Опции темы
vladd
Дата 13.3.2012, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



VS 2010
Есть вот такой код
Код

Public Sub RemovePlaceBets(ByVal lngHwnd As Integer)
        If lngHwnd <> 0 Then
            NativeMethods.DestroyWindow(lngHwnd)
            Call TestForm.ClearColumnAllGreen()
            TestForm.AvtoPoiskOn()
            TestForm.WebBrowser1.Navigate("about:<b></b>")
        End If
    End Sub

Анализ кода делает такое предупреждение

Предупреждение    1    CA2122 : Microsoft.Security : 'PlaceBets.RemovePlaceBets(Integer)' выполняет вызов в 'WebBrowser.Navigate(String)', для которого задана проверка LinkDemand. Выполняя этот вызов, 'WebBrowser.Navigate(String)' косвенно предоставляется пользовательскому коду. Рассмотрите следующий стек вызова, который может раскрыть способ обхода защиты безопасности: 
   
->'PlaceBets.RemovePlaceBets(Integer)'
->'PlaceBets.RemovePlaceBets(Integer)'    

Как сделать чтобы не было предупреждения.
PM MAIL   Вверх
diadiavova
Дата 13.3.2012, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



vladd, вся информация по кодам предупреждений(в том числе способы устранения проблем) есть в мсдн
http://msdn.microsoft.com/ru-ru/library/ms182303.aspx


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
vladd
Дата 13.3.2012, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



Спасибо. Смотрим msdn.
CA2112: защищенные типы не должны предоставлять поля
Причина
Открытый или защищенный тип содержит открытые поля и защищен Требования связывания.

Описание правила
Если код имеет доступ к экземпляру типа, защищенного запросом компоновки, то для получения доступа к полям типа коду не требуется удовлетворять запросу компоновки.

Устранение нарушений
Чтобы устранить нарушение этого правила, необходимо сделать поля неоткрытыми и добавить открытые свойства или методы для возвращения данных их этих полей. Проверки системы безопасности LinkDemand для типов защищают доступ к методам и свойствам типа. Однако управление доступом для кода не применяется к полям.
Следующий класс предоставляет приложению возможность получить экземпляр защищенного типа.
Код

C#

using System;
using System.Reflection;
using System.Security;
using System.Security.Permissions;

// This assembly executes with full trust. 

namespace SecurityRulesLibrary
{
   // This type creates and returns instances of the secured type.
   // The GetAnInstance method incorrectly gives the instance 
   // to a type that does not have the link demanded permission.

   public class Distributor
   {
      static SecuredTypeWithFields s = new SecuredTypeWithFields(22,33);
      public static SecuredTypeWithFields GetAnInstance ()
      {
            return s;
      }

      public static void DisplayCachedObject ()
      {
         Console.WriteLine(
            "Cached Object fields: {0}, {1}", s.xValue , s.yValue);
      }
   }
}


А как это перевести на vb net. На vb net примера я не нашел. Да и в этом мало что понял.  

Это сообщение отредактировал(а) vladd - 13.3.2012, 11:16
PM MAIL   Вверх
diadiavova
Дата 13.3.2012, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



vladd, Ты не то скопировал, тут скорее первый пример уместен
Код

      // Library method with link demand.
      // This method holds its immediate callers responsible for securing the information.
      // Because a caller must have unrestricted permission, the method asserts read permission
      // in case some caller in the stack does not have this permission. 

      [EnvironmentPermissionAttribute(SecurityAction.LinkDemand, Unrestricted=true)]
      public static string EnvironmentSetting(string environmentVariable)
      {
         EnvironmentPermission envPermission = new EnvironmentPermission( EnvironmentPermissionAccess.Read,environmentVariable);
         envPermission.Assert();

         return Environment.GetEnvironmentVariable(environmentVariable);
      }
Тут дело в атрибуте, на бейсике это выглядит так
Код

      <EnvironmentPermissionAttribute(SecurityAction.LinkDemand, Unrestricted := True)>
      Public Shared Function EnvironmentSetting(string environmentVariable) As String
      
         Dim envPermission As New EnvironmentPermission( EnvironmentPermissionAccess.Read,environmentVariable)
         envPermission.Assert()

         Return Environment.GetEnvironmentVariable(environmentVariable)
      End Function
Иными словами надо установить атрибут для метода, чтобы параметры безопасности твоего кода были такими же как и у вызываемого тобой кода.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
vladd
Дата 13.3.2012, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



Спасибо за обьяснения. Но для меня это все равно темный лес. Изредка солнышко проскакивает благодаря таким людям как ты. Я пытаюсь освоить vb net, но видимо до понимания твоего уровня языка мне еще далеко. Поэтому не сердись за назойливые вопросы. Но я на форуме задаю вопросы те в которых ноль и ничего не могу понять. Так же и этот вопрос. Так пытаюсь научится языку. И все равно как же мне сделать, чтобы не было этого предупреждения СА 2112. Пока еще не знаю, несмотря на твои старания. 
PM MAIL   Вверх
diadiavova
Дата 13.3.2012, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(vladd @  13.3.2012,  12:52 Найти цитируемый пост)
И все равно как же мне сделать, чтобы не было этого предупреждения СА 2112. 

Сделай вот так
Код

<EnvironmentPermissionAttribute(SecurityAction.LinkDemand, Unrestricted := True)>
Public Sub RemovePlaceBets(ByVal lngHwnd As Integer)
        If lngHwnd <> 0 Then
            NativeMethods.DestroyWindow(lngHwnd)
            Call TestForm.ClearColumnAllGreen()
            TestForm.AvtoPoiskOn()
            TestForm.WebBrowser1.Navigate("about:<b></b>")
        End If
    End Sub
Студия предложит добавить импорт нужного пространства имен - сделай это или заранее добавь как в примере на мсдн. То есть вместо
Код

using System.Security.Permissions;
напиши
Код

Imports System.Security.Permissions




--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
vladd
Дата 13.3.2012, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



Спасибо.Все работает. Но вот вопрос. Что делает эта строка? В этой строке 
Код

EnvironmentPermissionAttribute
 
это класс позволяет применять действия по обеспечению безопасности для объекта EnvironmentPermission к коду, использующему декларативную безопасность. 
 
Код

<EnvironmentPermissionAttribute(SecurityAction.LinkDemand, Unrestricted := True)>
  
А что такое SecurityAction.LinkDemand и Unrestricted := True?
Что делает эта строка?
Еще раз спасибо.

Это сообщение отредактировал(а) vladd - 13.3.2012, 14:05
PM MAIL   Вверх
diadiavova
Дата 13.3.2012, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(vladd @  13.3.2012,  15:04 Найти цитируемый пост)
Что делает эта строка?

Я так понимаю, ты не знаком с атрибутами?
Почитай здесь
http://msdn.microsoft.com/ru-ru/library/z0w1kczw.aspx
ну и по связанным разделам пробегись, если чего не поймешь.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
vladd
Дата 13.3.2012, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



Я так понял что данный атрибут  <   >
Код

<EnvironmentPermissionAttribute(SecurityAction.LinkDemand, Unrestricted := True)>

закрывает поля от общего доступа. Возникают вопросы.
1. Какие это поля TestForm.WebBrowser1.Navigate("about:<b></b>")
2. Как этот атрибут защищает эти поля. 
PM MAIL   Вверх
diadiavova
Дата 14.3.2012, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(vladd @  13.3.2012,  18:15 Найти цитируемый пост)
закрывает поля от общего доступа. 

Это из чего следует? smile Атрибут устанавливает политику безопасности для метода, к которому он применен и все.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
vladd
Дата 14.3.2012, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



А как это попроще Атрибут устанавливает политику безопасности для метода. Я так понимаю если атрибут обьявлен перед процедурой RemovePlaceBets. То он и добавляет какие то свойства этой процедуре. А именно этот атрибут делает одинаковым доступ ко всем ее методам, переменным и др. таким же безопасным как и доступ к WebBrowser.Navigate(String).  В чем неправ прошу поправить.  

Это сообщение отредактировал(а) vladd - 14.3.2012, 14:34
PM MAIL   Вверх
diadiavova
Дата 14.3.2012, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(vladd @  14.3.2012,  15:33 Найти цитируемый пост)
В чем неправ прошу поправить.  

В первую очередь в терминологии. Я не понимаю, что ты имеешь в виду, употребляя слова "поля", "свойства" и "методы". Все вышеперечисленное является членами типов(классов, структур или интрефейсов), когда ты говоришь о каких-то свойствах, методах и полях процедуры, ты явно имеешь в виду что-то другое. На самом деле метод - это именно то, что ты называешь процедурой, поэтому, что такое
Цитата(vladd @  14.3.2012,  15:33 Найти цитируемый пост)
 А именно этот атрибут делает одинаковым доступ ко всем ее методам.

я не понял. Доступ к переменным метода в любом случае возможен только внутри самого метода. 
Устанавливая атрибут безопасности ты указываешь права доступа к самому методу и ничего больше. Подробнее о той или иной политике в мсдн читай, ну вот здесь хотя бы
http://msdn.microsoft.com/ru-ru/library/3ky50t49.aspx
http://msdn.microsoft.com/ru-ru/library/8a3x2b7f.aspx



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
vladd
Дата 14.3.2012, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



Значит наоборот.WebBrowser является наиболее опасным, так как через него можно попасть в этот метод, а далее во весь остальной код. Поэтому атрибут наш защищает остальной код от  этого метода. Сейчас я правильно понял или же нет?
PM MAIL   Вверх
diadiavova
Дата 14.3.2012, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(vladd @  14.3.2012,  17:22 Найти цитируемый пост)
так как через него можно попасть в этот метод

Это как это? smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
vladd
Дата 14.3.2012, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



Я не хакер поэтому на этот вопрос я тебе не отвечу. Знаю только что постоянно в IE находят дыры и их постоянно латают. А про WebBrowser наверное и говорить не надо, если он из интернета инфу берет. Это мое понимание безопасности такое.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0560 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.