2011-05-10 307 views
1

我有兩個網站A和B都用ASP.NET MVC 3編寫。在網站A中有一個表單,需要通過POST方法提交給網站B.用戶可以選擇直接發佈或在加密值後進行發佈。從一個網站到另一個網站的數據傳輸

當我提交沒有加密的表單時,它很簡單form.submit(),我能夠使用FormCollection對象獲取網站B中的值。但是,當用戶在加密後選擇提交時,我將重定向到網站A上的另一個操作,在該網站上進行加密,然後將此加密數據放置在相應視圖的隱藏文本框中,然後使用jQuery將網頁自動提交到網站B.但現在我無法在網站B上的FormCollection對象中獲得任何值。

問題是什麼?這是否因爲任何安全功能而發生,以防止XSS或類似的東西?

+0

數據如何被加密/解密?你真的需要提交數據客戶端,因此重定向用戶,或者你可以使用Web服務並將其稱爲服務器端? – roryf 2011-05-10 20:38:48

+0

@ roryf使用非對稱加密。它需要提交給一個網頁,而不是一個web服務。 – 2011-05-10 20:40:51

回答

2

其可疑它來自XSS的保護 - 在這種情況下,你會看到一個例外。 加載提琴手,並確保您在表單中的某個元素中看到此數據,該元素將發佈到網站b。如果它以提交的形式出現 - 應該可用。

+0

謝謝,使用Fiddler我發現數據沒有到達網站B.然後我發現我使用id作爲我的輸入控件。改名爲解決問題。 – 2011-05-11 13:25:55

1

不使用HTTPS並直接將表單提交到站點B的任何原因?

<form action="https://siteb/someaction" method="POST"> 
    <input type="text" name="key1" value="value1" /> 
    <input type="text" name="key2" value="value2" /> 
    <input type="text" name="key3" value="value3" /> 
    <input type="submit" value="Go ahead" /> 
</form> 

如果有任何理由在您要加密的值到一個單一隱藏的輸入並提交包含使用JavaScript這個隱藏字段形式的情況下,唯一的隱藏字段的值將被髮送到網站B.因此,舉例來說,如果你有以下形式:

<form action="http://siteb/someaction" method="POST"> 
    <input type="hidden" name="encrypted" value="some encrypted value" /> 
</form> 

在站點B,你會取這樣的加密值(不使用的FormCollection,相比視圖模型它有點醜陋):

[HttpPost] 
public ActionResult SomeAction(string encrypted) 
{ 
    // TODO: decrypt the encrypted value here to get the orginal string 
    ... 
} 

而且一個更優雅的方式將是對站點B和這種模式,會做解密的自定義模型綁定定義的視圖模式,使動作看起來簡直像這樣:

[HttpPost] 
public ActionResult SomeAction(SomeViewModel model) 
{ 
    // Directly use the model with all the fields in it. 
    // The custom model binder will take care of the creating it 
    // from the encrypted request string 
    ... 
} 
+0

我也在使用HTTPS,但用戶有一個使用加密的附加選項。在加密場景中,我有兩個隱藏字段,即用戶的加密值和電子郵件ID。需要電子郵件ID才能獲取用戶的私鑰進行解密。 – 2011-05-10 20:54:35

+0

@achinth,好的,但我還是不太明白你想要解決這個HTTPS尚未解決的*自定義加密場景的安全問題? – 2011-05-10 20:58:29

+0

表格包含支付細節,如果用戶偏好使用瀏覽器插件進行篡改,如果用戶更喜歡加密格式化,那麼網頁上的只讀字段的支付細節將從數據庫中再次讀取,然後進行加密以確保任何篡改 – 2011-05-10 21:01:46

相關問題