代码之家  ›  专栏  ›  技术社区  ›  Chris Thompson

当SSL不可用时,Flex应用程序的安全性

  •  0
  • Chris Thompson  · 技术社区  · 15 年前

    因此,我知道最好的做法是通过SSL运行我的flex应用程序,同时实现其他形式的安全性,但目前这不是一个选项(出于金钱原因,应用程序根本不 需要 那么多的安全,否则我的赞助商会为此付出代价的)。但是,我想实现某种形式的安全性,我想知道当我没有SSL来保护事务时,它是否值得。

    所以我的设置是我有一个带有flex用户界面的ASP.NET服务器端。现在,用户界面是保护对服务器访问的唯一方法:服务器在每个请求期间都不进行任何类型的验证,它只是假设允许用户进行验证。显然,任何人都可以编写一个程序来生成帖子(即使我可以使用ssl,它也像瑞士奶酪)。正如我之前所说,安全性不是什么大问题,这是一个内部应用程序,它并不重要,但是我相信做正确的事情。将用户信息保存在会话中是一个可行的选项,然后验证给定的用户是否具有权限,等等,也许是某种令牌系统?

    保护此设置的首选方法是什么?

    …不,我不会给你网址:)

    3 回复  |  直到 15 年前
        1
  •  1
  •   Akash Kava    15 年前

    ASP.NET会话本身是基于令牌的安全性,是的,您可以通过这样做轻松实现它

    [WebMethod(true)]
    

    是的,任何Web方法都要求首先登录,它应该调用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,并且根据是要返回一个项目数组还是只返回一个项目,可以返回结果或结果。如果有任何错误或未经授权的访问,您可以设置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 };
        }
    }
    
        2
  •  1
  •   stinkymatt    15 年前

    不幸的是,我知道屈体蹲下,但我想我无论如何都能帮上忙。我认为你有两个相当好的选择。

    首先,我们需要澄清一些事情…你是说服务器不行吗? 任何 授权?它是否至少能够对用户进行身份验证?您对服务器代码有任何控制权吗?如果没有,我认为下面的建议不会有帮助。我不知道如何用客户端代码保护服务器。也许有办法,但我想不起来。

    1)使用HTTP摘要身份验证。这要求将服务器配置为能够理解它,并且在flex API中支持向HTTP请求添加适当的auth头。服务器通过其密码对用户进行身份验证,并根据某种授权机制检查该用户可以执行哪些操作。

    2)遵循 this article 实现许多Atom发布端点使用的身份验证方案。flex API必须为此提供一些支持,但可能存在现有的第三方lib。如果您可以访问HTTP头,那么应该能够实现其余的头。

    祝你好运。

        3
  •  0
  •   Community CDub    7 年前

    如何与服务器SOAP通信。休息等?

    如果是肥皂,看看这个问题的答案。

    General Password Security && Implementation in Actionscript 3

    下面是一个如何将头添加到SOAP消息的链接

    How to add a "flat" message header to a flex web service call?

    希望这有帮助

    乔恩

    推荐文章