繁体   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