Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试自动访问使用Javascript加密表单数据的web界面_Javascript_Php_Curl_Encryption - Fatal编程技术网

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

尝试自动访问使用Javascript加密表单数据的web界面,javascript,php,curl,encryption,Javascript,Php,Curl,Encryption,首先,感谢您抽出时间阅读本文。我很确定这不是我谷歌fu的失败 我正在尝试构建一个自动化工具来访问具有HTTP/HTML接口的设备。具体来说,它是一部IP电话。登录页面有一个用户名字段和一个密码字段,但该表单不会被提交。在提交隐藏表单之前,使用设备中的额外数据(用作RSA密钥)组合填充隐藏表单,然后使用MD5哈希和AES加密字符串 它还通过Javascript设置会话cookie,会话id通过Ajax获得。一两年前我放弃了一个类似的项目,当时我陷入了将Javascript函数移植到php和/或复制

首先,感谢您抽出时间阅读本文。我很确定这不是我谷歌fu的失败

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

它还通过Javascript设置会话cookie,会话id通过Ajax获得。一两年前我放弃了一个类似的项目,当时我陷入了将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中的一个示例:


本质上,它启动了一个浏览器,您可以从Python或其他语言控制它。如果您不想增加启动浏览器的开销,可以使用Node.js作为例子。

那么什么不起作用了?curl不运行Javascript。如果不运行Javascript,我就无法登录。如果未登录,则无法访问设置。