Безопасность для приложения Flex при недоступности SSL

Итак, я знаю, что лучше всего было бы запустить мое приложение Flex через ssl вместе с реализацией других форм безопасности, однако на данный момент это не вариант (по финансовым причинам, и приложению просто не нужен Так много безопасности, иначе мои спонсоры заплатили бы за это). Однако я хотел бы реализовать некоторую форму безопасности, и мне интересно, стоит ли оно того, если у меня нет ssl для защиты транзакций.

Итак, моя установка такова, что у меня есть серверная часть ASP.Net с пользовательским интерфейсом Flex. Прямо сейчас пользовательский интерфейс - единственное, что защищает доступ к серверу: сервер не выполняет никаких проверок во время каждого запроса, он просто предполагает, что человеку разрешено это делать. Очевидно, что любой мог бы написать программу для генерации сообщений (даже если бы я мог использовать SSL, это было бы похоже на швейцарский сыр). Как я уже сказал, безопасность не имеет большого значения, это внутреннее приложение, и в нем нет ничего критического, однако я верю, что все делать правильно. Будет ли целесообразным сохранение информации о пользователе в сеансе с последующей проверкой наличия у данного пользователя разрешения и т. Д. Возможно, какая-то система токенов?

Каким будет ваш предпочтительный метод защиты этой установки?

... и нет, я не дам вам урл :)


person Chris Thompson    schedule 30.08.2009    source источник


Ответы (3)


Сам сеанс ASP.NET - это безопасность на основе токенов, и да, вы можете легко реализовать это, выполнив

[WebMethod(true)]

и да, любой веб-метод требует, чтобы сначала был выполнен вход, он должен вызывать User.IsAuthenticated, который проверяет токен сеанса.

Вы можете легко реализовать аутентификацию с помощью формы (пусть web.config пуст, вы можете использовать FormsAuthentication в коде).

Например,

[WebMethod(true)]
public string DoLogin(
    string username,
    string password)
{

    //.. do your verification
    FormsAuthentication.SetAuthCookie(username,false);
    return "Login Sucessful";
}

[WebMethod(true)]
public string ChangePassword(
    string oldPass,
    string newPass)
{
     // verify user is logged on or not..
     if(!User.IsAuthenticated)
          return "Please Login";
     // The code below is secure, only 
     // authenticated user will go through below
     // change pass...


     return "Password Changed Successfully.";
}

Мы разработали много сайтов Flex + ASP.NET, мы сделали то же самое, но вместо возврата «строки» мы обычно возвращаем такой класс, как следующий ...

public class WSResult<T>{
     public bool Successful;
     public string Message;
     public T Result;
     public T[] Results;
}

Соглашение простое: если метод был успешным, вы возвращаете Success = true, и в зависимости от того, хотите ли вы вернуть массив элементов или только один элемент, вы можете вернуть либо Results, либо Result. В случае, если произошла какая-либо ошибка или несанкционированный доступ, вы можете установить Successful = false и установить сообщение как подробную строку. Как в следующем примере.

[WebMethod(true)]
public WSResult<BusinessUser> DoLogin(
    string username,
    string password)
{
    try{
       BusinessUser user = BusinessUser.GetByUsername(username);
       if(user==null)
            throw new Exception("User not found");
       if(user.Password != password)
            throw new Exception("Password did not match");
       return new WSResult<BusinessUser>{ Result=user };
    }catch(Exception ex)
    {
        // this will even catch any DAL exceptions or any system error as well
        // Log Exception... somewhere for tracking...
        return new WSResult<BusinessUser>{ Successful=false, Message = ex.Message };
    }
}
person Akash Kava    schedule 30.08.2009
comment
Спасибо, Акаш, как вы справляетесь с сериализацией объекта? - person Chris Thompson; 30.08.2009
comment
Мы используем чистые веб-службы SOAP 1.2 XML, поэтому все правильно сериализуется в формате xml, а в Flex Builder вы можете легко импортировать WSDL, и типы будут правильно сериализованы. WSResult ‹long› сериализуется как WSResultOfInt64 во флексе, вы также можете выводить полученные обобщенные типы на основе. Сериализация XML не требует больших затрат, однако мы используем [XmlAttribute] в основном для уменьшения сетевого трафика. - person Akash Kava; 31.08.2009
comment
Еще один момент, который я хотел бы сделать, это то, что обработчики Http требуют больше времени для написания, а попытки реализации JSON и т. Д. Слишком затратны по времени для более крупных проектов. Мало того, еще одна проблема - обработка ошибок. Чистые веб-службы ASP.NET SOAP намного стабильнее и быстрее пишутся. - person Akash Kava; 31.08.2009

К сожалению, я знаю диддли приседания о флексе, но думаю, что все равно могу помочь. Я думаю, у вас есть два достаточно хороших варианта.

Но сначала нам нужно кое-что прояснить ... Вы говорите, что сервер не выполняет никакой авторизации? Есть ли у него хотя бы возможность аутентифицировать пользователя? У вас есть контроль над серверным кодом? В противном случае я не думаю, что следующие предложения помогут. Я не уверен, как вы должны защитить сервер с помощью только клиентского кода. Может быть, способ есть, но я не могу его придумать.

1) Используйте дайджест-аутентификацию HTTP. Для этого необходимо, чтобы сервер был настроен для его понимания и чтобы в гибком API была поддержка для добавления соответствующего заголовка аутентификации в HTTP-запрос. Сервер аутентифицирует пользователя по его паролю и может проверить, какие операции могут выполняться указанным пользователем с использованием какого-либо механизма авторизации.

2) Следуйте инструкциям в этой статье, чтобы реализовать схема аутентификации, которую используют многие конечные точки публикации атома. Flex api должен будет обеспечивать для этого некоторую поддержку, хотя, возможно, существует уже существующая сторонняя библиотека. Если вы можете получить доступ к заголовкам HTTP, вы сможете реализовать остальное.

Удачи.

person stinkymatt    schedule 30.08.2009
comment
Отличная ссылка, спасибо. Просто чтобы заполнить вас, сервер выполняет первоначальную аутентификацию, но мне стало лень, когда я изначально написал это некоторое время назад, и никогда ничего не проверяет после этого - person Chris Thompson; 30.08.2009

Как вы общаетесь с сервером SOAP. ОТДЫХ и т. Д.?

Если это SOAP, посмотрите ответ на этот вопрос.

Общая защита паролей и реализация в ActionScript 3

и вот ссылка, как добавить заголовок в сообщение SOAP

Как добавить плоский заголовок сообщения к вызову гибкой веб-службы?

Надеюсь это поможет

Джон

person Jon    schedule 30.08.2009