iPhone:如何安全地将数据从设备传输到服务器

时间:2011-04-24 18:34:16

标签: iphone objective-c

有人可以帮助我,我是新手,之前没有这样做过。 我有一个iPhone应用程序,它有一个“购物车”对象。一旦用户做出选择,我想将XML信息中的信息发送到服务器。我读到iPhone库可以让您轻松地将数据转换为XML。但据我所知,数据必须存储在数组或字典中。这是真的?例如,我的“Cart”是一个使用数组在内部存储数据的对象,但“cart”本身具有未存储在数组或字典中的变量。

问:如何将整个“购物车”转换为可以作为XML传输到我的服务器的东西?

此外,我要求客户为每个订单创建配置文件,但这将通过直接在Web上通过https连接启动UIWebview来完成。因此,设备上不会显示信用卡信息。

问)是什么最好的方式来链接网络上的个人资料和设备上的订单?

遇到此问题的人可以给我提示或链接吗?

由于

3 个答案:

答案 0 :(得分:3)

使用ssl可以安全地发送数据。

将您的购物车转换为XML可以使用XML Framework / lib完成,但您仍然必须为此编写代码。例如touchXML:

  

TouchXML是轻量级替代品   对于Cocoa的NSXML *类集群。   它基于常用的   开源libxml2库。

Here是一个不错的教程。

来源已经移动了一点,可以找到here

对于你的第二个问题:这很棘手,可能会变成黑客。但是,如果您不想切换到基于API的方式登录/创建帐户,我会有这些想法。

使用带有webViewDidFinishLoad:方法的UIWebViewDelegate协议检查webView的“结果”。 “结果”可以是:成功创建帐户或成功登录。

因此,您可以使用webview的NSURLRequest属性访问页面正文。或使用javascript:

使用类似的东西
NSString *html = [webView stringByEvaluatingJavaScriptFromString: @"document.body.innerHTML"];

您将不得不进行解析以查找某些内容,例如您可以与订单连接以进行最终结帐的令牌。

您也可以首先在设备上生成一个唯一的订单字符串,并在最初发送它以登录/创建配置文件以稍微提高安全性并将其传回以进行检查。

答案 1 :(得分:2)

第一部分:创建一个代表购物车的字典。对于每个变量,添加一个键,其变量名称作为键,cart对象的值作为该键的对象。

第二部分:这是一个非常开放的问题:-)。这取决于你如何识别两端的用户;当然 将取决于您的安全要求。一种选择是要求您的用户在首次启动设备时通过网站登录,然后将他们的用户ID存储在特定设备上的应用程序上(最好以保密方式)。不要出于任何原因使用它,除了跟踪您想法在设备上的用户之外:在每次购买之前再次进行身份验证,或者查看或更改帐户详细信息等其他敏感操作。顺便说一句,根据您的订购系统的工作方式,您可能更喜欢(或Apple要求)实施应用内购买。这实际上会带来很大的复杂性,而苹果公司的处理费用为30%。

如果您对此类系统的安全问题有特定疑问,请在security.stackexchange.com(我是那里的 pro tem 主持人之一)上提问。< / p>

答案 2 :(得分:-2)

如果您将加密字符串发送到如下代码中的URL,则在ASPX页面(.NET示例)中处理它,或者您可以在服务器端使用其他语言。然后,为了安全起见,只需忽略任何未解密的内容(基本加密 - 解密未显示)

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL   
   URLWithString:@"http://myzuresite.azurewebsites.net/test3.aspx?bigstring=dgrbthymgk"]];
    [request setHTTPMethod:@"POST"];
    [NSURLConnection connectionWithRequest:request delegate:self];}

然后,在http://myazuresite.azurewebsites.net/test3.aspx页面中:

<%@ Page Language="C#"%>
<html>
<head>
<title>Query Strings in ASP.NET: Page 2</title>
<script language="C#" runat="server">
</script>
</head>
<body>
<%
// retrieves query string values
string bigstring = Page.Request.QueryString["bigstring"];

System.Data.SqlClient.SqlConnection sqlConnection1 =
    new System.Data.SqlClient.SqlConnection("Data Source=myazuresite.database.windows.net;Initial Catalog=db_name;Integrated Security=False;Persist Security info=False;User ID=your_id;Password=your_Password”);

System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = "INSERT Scores (col1) VALUES (' "+name+" ')";
cmd.Connection = sqlConnection1;
sqlConnection1.Open();
cmd.ExecuteNonQuery();
sqlConnection1.Close();
%>
</body>
</html>

我在SQL Server中的插入触发器中处理解密,忽略坏URL,这是非常安全的。我在某种程度上使用包含时间的加密。