[英]How to securely cross domain submit a form from a static html site to a server side backend?
我想創建一系列靜態HTML網站,這些網站將托管在Amazon S3上。
靜態站點將具有表格。 我的計划是將表單數據發布/ ajax提交到托管在其他域上的服務器端應用程序。 服務器端應用程序會將數據存儲在數據庫中以備將來參考,並將提交的數據通過電子郵件發送給相關人員。
從表面上看,這很簡單,HTML表單只需要將數據發布到服務器端腳本,類似於google form / wufoo / formspree等。
我擔心的是安全性。 該帖子將從靜態站點跨域發布,這似乎使CSRF難以在流行的Web框架中實現。 我已經閱讀了許多有關CSRF / CORS / Authentication的博客文章,但不清楚。
通過研究formspree.io的源代碼,似乎他們檢查了引薦來源和原始標頭,以驗證表單提交來自應有的網站和已注冊的網站。 但是我知道這些可以被欺騙嗎?
由於可以讀取和反向工程靜態站點上的任何javascript代碼,因此API樣式身份驗證似乎很困難...
還是我想得太過分了,如果我通過SSL發布表單,請驗證表單數據服務器端,並根據表單檢查引薦來源/來源標頭,以確保它足夠安全?
TLDR; 對於將表單數據發布到服務器端后端以存儲在數據庫中並通過電子郵件發送的靜態HTML網站,我需要采取哪些安全措施?
提前致謝!
在您的服務器上,您需要一些中間件來確保請求源是可信任的。 因此,如果您的靜態html站點是www.mysite.com
,請確保在服務器www.mysite.com
上允許訪問您的api。 就身份驗證而言,如果您不希望任何人訪問您的api,則需要某種身份驗證。 基本流程如下所示:
用戶發布登錄數據,服務器進行身份驗證,服務器生成令牌並作為響應發送回客戶端,令牌被存儲在客戶端上,並在進行任何請求時設置在標頭中。 然后在您的路由上,您將需要一些中間件來檢查請求標頭中是否存在令牌,如果存在,則允許訪問,否則,拒絕訪問。
希望能清除一些東西。
看來您的情況下的最佳解決方案是執行以下操作:
實際上,如果您只能訪問客戶端,則構建安全的應用程序非常困難。 如果您要發布的服務沒有內置的CSRF系統,如果您在HTML頁面上添加代碼並創建一個簡單的php腳本來接收表單字段,那將是一個很好的解決方案,請驗證重新分配表單字段並將其提交到您想要的任何目的地。
通過令牌進行CSRF保護也可以解決問題,實際上,如果最終您最終提交到自己的腳本,那么這實際上是干凈的編碼解決方案,但是,將其實施到靜態HTML頁面中仍然有些困難。 (您需要通過Javascript或php腳本生成它,將其存儲在會話中,然后在后端腳本中對其進行驗證),但如果能夠進行編碼,我建議您使用它。
在后端腳本中,您可以驗證引薦來源和來源,以確保請求不是來自HTML表單以外的其他來源。
盡管驗證碼不是一個非常用戶友好的解決方案,但是如果您能夠編寫CSRF保護系統代碼,則需要通過JavaScript或發送一個生成用戶會話唯一令牌的ajax請求來完成,該令牌位於其他PHP頁面中,但您需要實施驗證碼以防止反垃圾郵件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.