2013-05-10 47 views
3

通常我們使用驗證碼驗證表單不是由機器人或腳本提交。 但在我們的應用程序中,我們無法在任何地方進行驗證。如何驗證授權表單提交

可以使用什麼策略來驗證該請求是否來自我們自己的表單並且不是重複/組裝的表單?

特別針對jsp/servlet。雖然我在談論戰略,而不是更多關注技術。

回答

5

一種方法是將一些安全令牌作爲請求參數嵌入到html表單中。您可以使用各種算法來生成安全令牌。像基於非常久遠的會話ID一些隨機數的安全令牌,這樣,如果一些如何黑客竊取會話還,他將無法在你的應用程序來訪問資源

+1

是的,我想過。但是,一旦我登錄,我可以創建一個腳本,它將使用相同的會話並請求頁面,從中檢索訪問令牌並使用它來進一步查詢。即使通過調用URL腳本也可以檢索cookie。並可以使用它們來複制我們的表單請求...你能給我更多的東西嗎? – Patriks 2013-05-10 07:11:33

2

兩個更多的可能性:

  1. 你可以添加一個蜜罐輸入字段添加到您的表單中,使用CSS規則 - display:none,您對人類用戶不可見。爲輸入字段命名爲'email'。你可以在服務器端驗證這個字段是空白的,因爲人類看不到它。由於機器人可能會在蜜罐字段中提供虛假的電子郵件地址,因此拒絕任何包含該字段值的提交。

  2. 當.jsp呈現時,您可以在表單中呈現隱藏的時間戳字段。檢查提交表單時返回的時間戳。人們通常會花幾秒鐘閱讀表格並填寫每個字段。從請求表單到機器人發送POST提交時,機器人提交會非常快。

+0

嗨,感謝您的回覆。(1)想要複製您的請求的人首先會分析您在網絡上的真實請求,並顯示電子郵件未被髮送,並且可以相應地生成腳本。 (2)有點不好,但不準確,就像50-50的情況 – Patriks 2013-05-16 18:48:21

0

我的卑鄙觀點是,你正在分析這一點。不幸的是,沒有解決方案將是100%的傻瓜證明。即使驗證碼也不是100%可靠的,並且公開可用。即使基於聲音的驗證碼也已被分解。其他人發佈的答案是很好的選擇。從他們開始,看看有多少不好的請求被過濾掉。如果他們過濾掉了90%的不良請求,那麼您只需要分析和了解其餘10%的模式,並輸入解決方案(IP過濾,節流等)來解決這些問題。

您無法100%的時間阻止100%的錯誤請求觸發您的服務器。你只是盡全力阻止它們並制定計劃來減輕這種損害。

+1

我知道100%是不可能的,並且上面貼出的答案都不錯,但是他們能過濾90%的不良請求或黑客?沒有。大公司只是在做什麼以上回答?沒有。所以這些都不是滿足我的答案。而且我知道1種技術無法阻止所有的黑客行爲,但我正在尋找一系列可以應用的技術。是的,ipfiltering是其中之一,謝謝指出。 – Patriks 2013-05-18 01:31:27

+0

您是如何得出這些方法不會阻止90%攻擊的結論?直到你嘗試它,你才知道。大公司花了很多時間和金錢來實施安全檢查。他們不斷在多個項目上迭代多個解決方案。他們僱用獨立的安全公司來審計他們的系統。如果你想要一個與大公司一樣的安全系統,你需要投入更多的錢/時間/資源。 Stackoverflow當然不是獲得這種建議的地方。 – 2013-05-18 21:54:04

+0

謝謝,:)(1)如果你有點意識到什麼樣的攻擊是可能的,那麼你自己可以估計出可以防止的攻擊百分比。 (2)是的大公司花錢和時間在他們身上。告訴我,如果你想開發一個軟件,那麼你會開始編寫一門編程語言嗎?或者你會使用現有的? :)。如果工業使用某種東西,那麼爲什麼又要花時間呢?爲什麼我們不能開始使用它們並繼續前進? (3)這不是我的答案,我試圖去理解它。所以如果你沒有答案,那麼請不要浪費別人的時間。再次感謝.. – Patriks 2013-05-19 10:19:01

1

這可能有些複雜,但是您可以設計一種算法,根據時間戳中的時間戳更改令牌。所以,用戶被髮出一個令牌,應用程序也會記下時間。該算法然後基於定義的(祕密)模式來改變令牌。然後,當提交表單時,您會分析初始登錄和有人提交表單以確保2件事情之間的令牌和時間戳增量。 1.你的三角洲是人類可能的。和2.模式匹配令牌和時間戳。

+0

非常接近我正在尋找的東西..你能詳細點嗎? – Patriks 2013-05-23 06:38:19

+1

從定義的(隱祕的)字符模式開始,然後當有人登錄時記錄時間戳併發出令牌。然後,您可以根據該人員登錄的每個「時鐘」(分鐘,小時,秒等)的上述模式的因素來修改此令牌。然後當這個人提交表單時,你可以獲取你發給他們的標記以及你記錄的修改後的版本,然後將這兩個數據與模式和時間戳增量進行比較,從登錄人到登錄時提交到表格 – 2013-06-06 16:08:48

3

聽起來你很擔心Cross-site Request Forgery攻擊(CSRF)。

如果是這種情況,那麼存在的框架可以在每個表單中包含一個隨機標記,作爲服務器驗證的隱藏字段。我會開始爲您的特定平臺尋找CSRF保護方法。

+0

可能是類似JSF的框架。但是這些字段可以用腳本檢索,對吧?然後它可以發回請求。如何對策呢?對不起,但我問了很多問題,但我想深入瞭解它。我如何在不使用框架的情況下做到這一點? – Patriks 2013-05-23 06:37:07

+0

防止可能通過腳本提交的唯一方法是在您的應用程序中要求身份驗證。即便如此,如果能夠有效地進行身份驗證的人知道他們在做什麼,他們仍然可以編寫提交。 CSRF令牌可以減慢進程並阻止簡單腳本,因爲腳本每次都必須加載新頁面以獲取新的有效CSRF令牌。 你爲什麼如此擔心通過腳本提交的表單?如果你想防止機器人發送垃圾郵件,CAPCHA真的是你需要的。 – computmaxer 2013-05-23 14:19:16

+0

我同意CAPTCHA,但我們可以打擾通過它在網站的任何地方通過它..我正在制定一個戰略,我會在這裏發佈.. – Patriks 2013-05-24 16:12:34