2013-03-28 232 views
0

我需要發佈數據以在不受我控制的外部網站上形成。我正在構建一個工具,允許用戶在一個地方填寫數據,然後發佈到多個存放相似表單的外部網站,而不是單獨填寫每個表單。將數據發佈到外部表格

基本上,工作流程是這樣的:

  1. 用戶填寫全面形成我的網頁
  2. 這個數據被存儲到我的分貝
  3. 用戶被重定向到感謝頁面,鏈接到外部形式
  4. 點擊任何鏈接時,新窗口應打開窗體部分字段與我的表格匹配的字段

這最後一步是駭人聽聞的。我依靠外部表單進行正確編碼,所以當我發佈數據不足時(captcha和其他幾個必填字段丟失),我會在該頁面上重新加載發佈的數據並將其合併到表單中,並標記缺少數據的字段。這樣,用戶可以只填寫那些缺失的數據(理想情況下僅用於驗證碼),而不必再花一小時再次輸入相同的數據。

這意味着做捲曲發佈不會削減它,所以我採用以下JS方法。

function repostForm(id, url) {  

var map = fieldMap[id]; // this is map between my field names and external form field names 

// construct form 
var form = document.createElement('form'); 
form.setAttribute('method', 'post'); 
form.setAttribute('action', url); 
form.setAttribute('target', '_blank'); 

for (i=0; i<map.length; i++) { 
    var input = document.createElement('input'); 
    input.setAttribute('name', map[i].external); 
    input.setAttribute('value', submissionData[map[i].local]); 
    form.appendChild(input); 
} 

document.body.appendChild(form); 
form.submit(); 

}

此代碼執行以及我可以看到數據被髮布到外部形式。然而,我並沒有向部分填寫的表格顯示某些字段缺失,而只是空白表格。

我現在試着用兩種不同的形式,他們都這樣做。

我是不是夠運氣了,所以這些表單有額外的安全檢查(比如檢查HTTP Referer字段)還是我在更基本的層面上丟失了一些東西?我不能發送鏈接到這些表格,因爲這些信息可能是敏感的,所以我很感興趣,如果這個基本的想法應該工作,理想的情況下,如果一切正常,或者它有一些根本的缺陷。

我知道會有一些邊緣案例,我只對原則感興趣。

感謝事先配發

+0

他們可以使用某種CSRF保護 –

+0

您要麼建立一個瀏覽器插件,要麼你將不得不面對的事實是你無能爲力。如果他們不接受來自其他域的帖子請求,則由於相同的原始策略使您幾乎不可能與另一個頁面進行交互,所以您運氣不佳。 – epascarello

+0

使用瀏覽器插件會使這個問題變得輕而易舉,但是我僅限於PHP,JS和類似的。 – user2219715

回答

0

「然而,不是我展示部分填充形式與一些現場失蹤,我只是得到空白表單」
那麼,服務器端的部分仍需要顯示的部分填充的形式,如果那個'post-reciever'的編碼員沒有將該功能編碼到該代碼中,然後,就像所有與計算機相關的通用規則都是一樣的:「如果你沒有告訴它做什麼,它就不會這麼做。」

這和HTTP Referer字段以及人們用來保護它們免受外部表單提交的其他技巧一樣。

如果您的用戶通過代理服務器導航到外部網站,您可以控制...提示。你可以在php中編寫一個代碼,解析html/ecmascript(在php中)(或者嘗試將它正則表達),在源代碼中設置字段並將修改過的源發送給用戶。這是一個'中間人'(攻擊)。

當使用這個解決方案時,請記住這最終會讓你在黑客的雷達上:因爲你擁有的用戶越多,「獎品」就越大,它就是破解你的系統並獲得所有這些美味的用戶 - 數據!同樣,如果他們設法接管了代理服務器(您的用戶信任您不會濫用),他們可以訪問所有用戶的無數用戶帳戶!

祝你好運!

+0

這似乎是我可以嘗試的事情,因爲我沒有想法。我僅限於PHP + JS和相關技術。今天我會嘗試做一個粗略的版本,只是作爲一個概念證明。 – user2219715

+0

不客氣,不要忘記最終接受答案。祝你好運! – GitaarLAB