【发布时间】:2014-11-25 16:07:31
【问题描述】:
我正在编写一个脚本来自动将工单提交到我们的帮助台系统。到目前为止,这是一个非常简单但有效的系统。我有一个带有表单的页面,该表单通过 JavaScript 自动提交,表单值基于请求的 URL。
当您从浏览器访问该页面时,这非常有用。假设您已经通过工单系统页面的身份验证,自动提交的表单会愉快地发送其表单数据,并且您会被定向到工单列表,您可以在其中看到新的自动提交的工单。当然不幸的是,票务系统是一个 HTTPS 安全站点,所以如果您没有登录,您将被定向到登录页面并且自动提交失败。
但是,我们的想法是按计划运行此自动提交,或者远程启动它,其中发起者不一定是人,也不会按照表单提交来使用美味的身份验证 cookie 来照看它。
因此,作为该领域的新手,我的选择似乎是 A)潜入并通过侦听自动提交响应获得真正的混乱,确定是否正在返回登录页面并通过 JS 提交一些凭据(不是一个巨大的交易,因为这种自动化将仅在安全的服务器上运行),然后重新提交表单......或 B)以某种方式通过事先进行身份验证以正确的方式做到这一点。但这就是我的知识结束的地方。
我已经通读了this similar question,但我仍然不够用。只有当相关服务器支持某种形式的身份验证令牌 API 时,这种适当的自动化才可能实现?有没有更直接的方式来连接和请求/提交数据到 HTTPS 站点?我一直在掩饰对 cURL 的一些介绍,但还没有深入研究。
注意:我无法直接访问票证数据库、代码,也无法直接访问运行它的 Web 服务器进程/帐户。我可能可以在同一台机器上运行进程,这就是为什么我并不真正关心自动提交凭据的安全性,但可能就是这样。
【问题讨论】:
-
除非您正在执行 ssl 级别的身份验证(例如,每个用户颁发的密钥),否则将 https 网络服务器作为常规 http 服务器进行身份验证没有区别。它仍然是响应 http auth 标头或正在提交的表单而提交的用户名/密码。只要您保留任何 cookie/标头和/或在每个请求中提交用户/传递,两种模式之间的唯一区别就是 url 中的
https而不是http。 -
它可能最简单的方法是在服务器超时之前在后台的计时器上继续重新加载 iframe 以保持会话处于活动状态。您可以隐藏 iframe。我已经在生产站点上做到了这一点,它运行良好,根本不需要修改后端。
-
这个“帮助台系统”有名字吗,很多都有API
-
你提交的那个服务器,它允许匿名提交吗?您解释的问题与https协议无关。
-
你能用 PHP 来代替吗?使用诸如 Goutte 之类的 cookie 感知浏览器库来执行此操作 - 只要不依赖于 JavaScript,它应该可以工作。 (Goutte 包装了 Guzzle,它包装了 cURL - 所以你的问题是正确的。但是,这将为你做很多工作)。
标签: javascript php forms authentication https