javascript - 尝试自动访问使用 Javascript 加密表单数据的 Web 界面

标签 javascript php curl encryption

首先,感谢您花时间阅读本文。我很确定这不是我的 google-fu 的失败。

我正在尝试构建一个自动化工具来访问具有 HTTP/HTML 接口(interface)的设备。 (具体来说,它是一个 IP 电话。)登录页面有一个用户名字段和一个密码字段,但该表单不会提交。在提交隐藏表单之前,隐藏表单将使用来自设备的额外数据(用作 RSA key )、MD5 散列和 AES 加密字符串的组合进行填充。

它还通过 Javascript 设置 session cookie,并通过 Ajax 获取 session ID。一两年前,当我陷入尝试将 Javascript 函数移植到 php 和/或复制结果的泥潭时,我放弃了一个类似的项目,但我必须相信有比这更好的方法。

function ajaxSucceedCallBack(req, res)
{
if (/^[\w,]+$/.test(res))
{
    var res = res.split(",");
}
var rsa = new RSAKey();
var sessid = "";

if (res.length == 3)
{
    rsa.setPublic(res[0], res[1]);
    sessid = res[2];
    document.cookie = "JSESSIONID=" + sessid;
}

var key = CryptoJS.MD5(Math.random().toString()).toString();
document.formInput2.key.value = rsa.encrypt(key);
key = CryptoJS.enc.Hex.parse(key);
var iv = CryptoJS.MD5(Math.random().toString()).toString();
document.formInput2.iv.value = rsa.encrypt(iv);
iv = CryptoJS.enc.Hex.parse(iv);
var data = "rand=" + Math.random() + ";";
data += "sessionid=" + sessid + ";";
data += "username=" + document.formInput.username.value + ";";
data += "pwd=" + document.formInput.pwd.value + ";";
data = "MD5=" + CryptoJS.MD5(data) + ";" + data;
var encrypted = CryptoJS.AES.encrypt(data, key, 
  { iv:iv, mode:CryptoJS.mode.CBC, padding:CryptoJS.pad.ZeroPadding });
document.formInput2.data.value = encrypted.toString();
document.getElementById("notice").innerHTML="";
document.formInput2.submit();
}

最终目标是在单个系统上拥有一个 Web 界面,能够自动登录并从/向所有设备下载和上传配置文件。我在 php 中开始这个,但如果它有效,我对 perl、python、调用curl 甚至 bash 脚本(如果它完成了工作)感到满意。

感谢您的宝贵时间。

最佳答案

如果您不关心自动化的性能,一个简单的方法是使用 WebDriver。请参阅 Python 中的示例: http://selenium-python.readthedocs.io/getting-started.html

本质上,它会启动一个可以通过 Python(或其他语言)控制的浏览器。如果您不想启动浏览器的开销,您可以使用 Node.js。

关于javascript - 尝试自动访问使用 Javascript 加密表单数据的 Web 界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44731109/

相关文章:

azure - 如何将笔记本从本地计算机导入到 Azure Databricks 门户?

php - 将自己的代码添加到 Joomla 3.0 中

javascript - 跨站点脚本 (XSS) 可能吗?

php - 监控文本身份验证背后的网页

php - 使用 javascript 调用 farbtastic 颜色选择器

php - 从谷歌地图 v3 上的数据库 MySQL 加载标记

android - cURL 不遵守 TLS v1

javascript - 将单个单击事件绑定(bind)到多个按钮时,如何使单击的按钮做一件事而所有其他按钮做另一件事?

javascript - 如何访问 axios 加载的对象属性?

php - Symfony2.0.15 Doctrine-Fixtures Windows 命令行 fatal error