Go homepage(回首页) Upload pictures (上传图片) Write articles (发文字帖)
The author:(作者)delvpublished in(发表于) 2014/1/10 6:24:06 ASP.NET,2.0打造购物车和支付系统之二_[Asp.Net教程]
三、购物篮
四、一个值得注意的安全问题 在你的系统的用户有机会输入数据的任何地方都应该严格控制以确保他们没有输入任何不想实现的内容。一个普通问题就是SQL注入。在这种位置,有些人可以把SQL代码输入到一个站点的某个部分,然后你可以在你想使用的原始SQL语句内使用它。所以,比方说相应于quantity域,你可以使用:"UPDATE tbl_basket SET quantity = " + quantity.Text + " WHERE user_id = " + user_id; 如果顾客在"quantity"文本框内输入6并且他们的登录id是230,那么上面的代码将看起来象:UPDATE tbl_basket SET quantity = 6 WHERE user_id = 230; 而如果顾客输入:" 1 WHERE 1 = 1; DROP tbl_users; --" 那么,原始语句现在看起来象:UPDATE tbl_basket SET quantity = 1 WHERE 1 = 1; DROP tbl_users; -- WHERE user_id =; 这样以来,他们可以使用"1 WHERE 1 = 1;"来完成原始语句,然后继续"Drop tbl_ users;"操作,这很不妙!最后,他们可以注释掉原始语句的其它部分。其实,这仅是一个极其简单的示例。有关于SQL注入的问题,你可以在网站上搜到许多信息。 五、 支付 存在许多种使用电子业务方式接收支付的方法。下面列出几种: · 在线商店实际上并不仅仅是一个在线目录,顾客往往还必须能够电话联系到你以便进行订购。 · 类似上面这种情形,除非你亲自找到顾客来完成整个交易。如果这是有关一些建筑方面的工作(例如一个院子或一个厨房),并且在实地考察之后你需要当场向他们提出一个报价,那么这可能很重要。 · 使用一种内置安全的支付方法。通过这种方法,顾客能够输入他们的信用卡细节并且可以由系统自动处理交易。 · 使用例如PayPal、Worldpay或DebiTech等一种外部支付方法。 本文中的演示商店基于一种旧式风格的使用PayPal接收支付的方法。它应该与其它外部支付系统(例如稍经修改的WorldPay)结合在一起工作。我们之所以说是"旧式风格"是因为,现在的PayPal一般都提供其自己的.net工具包-实现它们自己的连接到它们的站点的系统。 整个收集购物篮数据并把它转移到PayPal的系统都是在shopBasketCheckout_OnServerClick()函数内实现的:protected void shopBasketCheckout_OnServerClick(object source,EventArgs e){ string postData = ""; postData += "currency_code=GBP"; postData += "&cmd=_cart"; postData += "&business=youremailaddress@yourdomain.net"; postData += "&upload=1"; postData += "&cancel_return=www.davidmillington.net"; DataTable dtBasket = getBasketDt(); double total = 0.00; for(int i = 0; i < dtBasket.Rows.Count; i++) { postData += "&item_name_" + (i + 1) + "=" + dtBasket.Rows[i]["name"]; postData += "&quantity_" + (i + 1) + "=" + dtBasket.Rows[i]["quantity"]; postData += "&amount_" + (i + 1) + "=" + Convert.ToDouble(dtBasket.Rows[i]["price"]); total += (Convert.ToDouble(dtBasket.Rows[i]["price"]) * Convert.ToInt32(dtBasket.Rows[i]["quantity"])); if(i == dtBasket.Rows.Count - 1) { postData += "&shipping_" + (i + 1) + "=" + calcDeliveryCost(total); } else { postData += "&shipping_" + (i + 1) + "=0.00"; } postData += "&shipping2_" + (i + 1) + "=0.00"; postData += "&handling_" + (i + 1) + "=0.00"; } postData += "&handling=" + calcDeliveryCost(total); byte[] data = Encoding.ASCII.GetBytes(postData); HttpWebRequest ppRequest = (HttpWebRequest)WebRequest.Create("https://www.paypal.com/cgi-bin/webscr");; ppRequest.Method = "POST"; ppRequest.ContentType = "application/x-www-form- urlencoded"; ppRequest.ContentLength = data.Length; //发送 Stream ppStream = ppRequest.GetRequestStream(); ppStream.Write(data, 0, data.Length); ppStream.Close(); //接收 HttpWebResponse ppResponse = (HttpWebResponse)ppRequest.GetResponse(); StreamReader sr = new StreamReader(ppResponse.GetResponseStream()); string strResult = sr.ReadToEnd(); sr.Close(); //输出到屏幕 Response.Clear(); Response.Write(strResult); Response.End();} 因为看起来没有一种办法使一个C#应用程序实现寄送并重定向到另一个站点(就象你通常使用一个
赞