Безопасность для приложения Flex, когда ssl недоступен - PullRequest
0 голосов
/ 30 августа 2009

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

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

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

... и нет, я не дам вам URL:)

Ответы [ 3 ]

1 голос
/ 30 августа 2009

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

[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, мы сделали то же самое, но вместо возврата «string» мы обычно возвращаем класс, подобный следующему ...

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

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

[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 };
    }
}
1 голос
/ 30 августа 2009

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

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

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

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

Удачи.

0 голосов
/ 30 августа 2009

Как вы общаетесь с сервером SOAP. Отдых и т. Д.

Если это SOAP, взгляните на ответ на этот вопрос

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

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

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

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

Jon

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...