2013-04-23 104 views
1

我想實現一個POST調用虛擬POS進行卡支付操作。 POS僅僅是銀行提供的服務器程序,必須通過具有交易數據的表單進行訪問。這可以通過組合一個表單,方法帖子和一組隱藏參數來完成,然後將輸出定位到一個新窗口(這是必需的,因爲從這一點開始,銀行軟件才能控制)。 但是,對於安全問題,我想從支持bean進行POST調用。 因此:JSF支持bean的POS支付

  1. 我的facelet中的一個按鈕調用RequestScoped bean中的方法。這個bean可以訪問會話中的事務數據。
  2. 這個bean創造了一些東西。
  3. Inside該方法,我可以打開一個URLConnection,添加參數,然後調用銀行的程序(我認爲它是一個servlet)。
  4. 無論此servlet的輸出如何,它都必須重定向到客戶端的新窗口。這個新窗口將包含認證和實際支付的東西,但它是銀行的軟件。

這將是通過使用JSF來實現該行爲的正確模式?

在此先感謝。

+0

我不確定目標是什麼。銀行網站軟件「必須控制」,但你也想從服務器端控制這個?當您將表單POST提交給銀行服務器時,那麼付款尚未提交?有沒有辦法在POST中傳遞驗證委託人和付款信息? – 2013-04-23 11:30:52

+0

發送給銀行servlet的表單只傳遞金額,訂單ID和一些可選數據。此呼叫的輸出必須重定向到新窗口。並從該窗口進行身份驗證和卡片插入,以及最終付款。所以,我的應用程序不需要存儲(甚至讀取)卡信息。 – Carlos 2013-04-23 17:40:27

回答

0

我想我現在明白了,您希望將銀行servlet功能集成到您的JSF應用程序中,但不想打擾PCI合規性。

重定向是一個HTTP服務器響應代碼,指定執行GET的URL,因此您無法重定向表單POST的響應。

您也不希望以編程方式將此POST請求從服務器端傳遞到銀行servlet並呈現收到的響應,因爲您已經啓動了與銀行servlet分開的會話,而不是用戶與您的Web之間存在的會話應用。這實際上是一個嚴重的安全問題。

除非服務器正在處理與銀行servlet的所有HTTP通信,否則無法通過JSF啓動該銀行Servlet會話。

在您的情況下,我會這樣做的方式是使用Javascript打開一個帶有常規HTML表單的新窗口,並將表單的操作設置爲銀行servlet URL,並使該表單的初始輸入匹配HTTP帖子所需的參數名稱。當提交此HTML表單時,SSL證書將與用戶瀏覽器進行協商,並且POST響應將被呈現,而無需任何涉及您的Web應用程序的任何內容。客戶端將維護兩個單獨的會話,您的應用程序的會話以及銀行Servlet的會話。

這是一種安全的方式,它不會在您的Web應用程序上提出任何PCI合規性要求。

+0

你是對的。所有這些都是由銀行自己設計的,以避免必須在客戶端應用程序中實施PCI內容。你說的方式是正常(而且容易)的方法。如果我想從後臺bean那裏做是因爲我不想從頁面源代碼中看到params和bank servlet url本身。這些參數是隱藏的,但任何人都可以查看參數,包括爲該事務生成的安全密鑰。這不是一個更糟糕的安全漏洞嗎? – Carlos 2013-04-24 08:10:31

+0

@Carlos可能但只有客戶端計算機纔會收到驗證密鑰。關於登錄我銀行的網絡應用程序以查看我的家用計算機上的支票帳戶餘額,我可以提出相同的論點。不同的是,如果銀行應用程序使用SSL證書,那麼只有銀行應用程序和我的瀏覽器才能讀取該驗證密鑰或信用卡號碼。如果有人正在監視我的網絡流量,它將被加密。續... – 2013-04-24 08:59:23

+0

...續我同意,儘管從服務器與銀行進行所有通信是最好的方法,但是**您的**應用程序需要符合PCI標準,因爲信用卡信息將傳遞給您。 – 2013-04-24 09:00:42