簡體   English   中英

如何以編程方式驗證 web 表單的登錄憑據?

[英]How to programmatically verify login credentials for a web form?

我正在構建一個應用程序,讓用戶從大學系統中導出數據。 目前,他們可以登錄並查看 HTML 中的數據,但我想讓人們將其下載為 CSV。

我有一個應用程序,用戶提供他們的用戶名和密碼。 我想登錄大學系統,然后 HTML 抓取結果頁面。 我怎樣才能做到這一點?

我正在構建一個 GWT 應用程序。 我可以在客戶端上的 Java-transliterated-JS 或服務器上的 Java 中執行此操作。

更新: Selenium 可能不錯,但看起來有點矯枉過正。

除非域相同,否則您將不得不從服務器執行此操作。 您需要確定其他服務器用於登錄步驟的 POST 事務是什么樣的 - 參數名稱等。然后您將執行該操作並對返回的內容做任何您想做的事情。 如果您需要查看多個頁面,您還需要維護適當的 session cookie,以便服務器知道您仍然在后續的 HTTP 請求中登錄。

如果您必須訪問另一個站點來驗證憑據,那么我不太確定人們是否應該願意向您提供這些憑據。 也就是說,如果您無權直接檢查憑據,為什么您值得信賴地接收它們? 我知道有時人們需要與他們不擁有的系統集成,所以這只是一個問題。

首先,由於同源策略對客戶端腳本的限制,這必須在服務器端完成。

您提到的處理“屏幕抓取”的典型方法是將 web 頁面視為 XML 服務。 首先,檢查頁面的源代碼,然后使用 Internet/HTTP 堆棧,將 POST 發送到正確的 URL 並使用標准 XML 庫讀取響應。 要想出一個很好的方法來挖掘 XML 以找到您需要的部分,該部分將盡可能避免對頁面的更改,這將需要一些獨創性。 請記住,您的系統可能會在網站所有者更改其頁面的任何時候中斷。

有時,您不能只發送 POST,而是必須首先請求空白頁,以便獲取需要在 POST 中返回的隱藏表單值。 您必須進行試驗以找出它需要什么。

Additionally, you probably have to handle cookies as well, since they usually are an integral part of the web site's authentication and session management (though you might get lucky that the session doesn't matter between the initial POST and the first response).

最后,您可能很不幸,該站點使用 javascript 來完成部分身份驗證工作,這可能需要額外挖掘才能了解憑據是如何發布到站點的。

還有其他潛在的障礙,例如站點檢查以查看引用者是他們自己的站點,可能使用 SSL (HTTPS) 等等。

我很確定 web 瀏覽器中的跨站點腳本保護意味着您無法使用在 web 瀏覽器中運行的 javascript 登錄大學的應用程序。 因此,從大學獲取數據的程序部分將需要在您的服務器上運行。 獲得數據后,您可以在服務器上或瀏覽器中的 javascript 中處理它,但我認為在服務器上處理會更容易。

http://en.wikipedia.org/wiki/Same_origin_policy

我不太確定 GWT,但一般來說,您會獲取用戶提交的表單數據,對照用戶名和哈希密碼的數據庫進行檢查。 如果數據庫簽出,則設置一個 session cookie,表明用戶已登錄。

在您的頁面中,檢查 session cookie 是否表明用戶已登錄。如果沒有,則重定向到登錄頁面,否則允許他們查看頁面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM