执行JS服务器站点以生成xhr的哈希

时间:2016-01-23 08:41:45

标签: javascript php logging hash web-scraping

有一个scrapebot-proof form。 登录&密码输入具有模糊的名称属性:

<input id="login-username" name="r0pUsRqARu" value=""
 type="text" class="form-control" placeholder="Login">

根据这些输入(包括登录名和密码值)和隐藏字符串输入字段,哈希值由客户端按js功能(md5.js)生成。

$("#btn-login").click(function(){
     var ser = $( "#loginform" ).serialize();  
     $.post("/post.php",ser+"&hash="+md5(ser),function(){
         location.replace("/logged.php");});
     });

表单已序列化,并作为POST xhr(ajax)发送到 post.php 以进行登录(请参阅上面的代码)。

我想编写 php脚本以自动通过表单登录

在服务器上获取表单,获取名称属性,粘贴登录/密码值以及通过POST xhr请求带有序列化字符串的 /post.php 没问题。

cV2sD3JzH2=login&3JX2zJ7QlC=password&char=%C2%AA&hash=...

然而,由于哈希是由js (由md5.js)在客户端生成的,我不能通过php生成哈希服务器端 ...什么是出路?

一些想法:

  1. md5.js 转换为服务器端脚本并执行它以生成哈希。怎么样?
  2. 在服务器上使用AngularJS(或类似的JS框架)在服务器上运行md5.js以生成哈希。 免责声明:我不熟悉AngularJS。
  3. 更新

    抱歉,我一直以为我可以获取混淆的名称属性值和 char 输入值服务器端。然而,正如 RamRaider 所提到的,当禁用javascript时,html中的without javascript enabled they are named *email* and *password*并且没有隐藏的 char 输入。 因此,当使用php cUrl(没有js服务器端)获取内容时,我有一个 clean form 而没有隐藏的 char 输入和未经模糊处理的名称值,请参阅下面的内容(删除样式) ):

    <form id="loginform" method="post" action="/post.php">
      <input id="login-username" type="text"  name="email" value="" >                   
      <input id="login-password" type="password" name="password" >
      <a id="btn-login" href="#" class="btn btn-success">Login  </a>
    </form>
    

    再一次在服务器端无用的JS技巧。我该如何解决?

    我正在搜索JS插入某个新属性值,但是徒劳无功。它应该是smth。如下:

    $('login-form').attr('name', <new value>); 
    

1 个答案:

答案 0 :(得分:1)

在那里使用的md5.js来自何处以及该文档所针对的地方并不明显。因此,您有以下选择:

  1. 您可以测试它是否在一堆不同的输入上生成与PHP的MD5功能相同的结果。
  2. 您可以尝试找到该md5.js的作者并询问他们。
  3. 你可以把它移植到PHP(它只是数学),并确保你有相同的算法。
  4. 您可以研究这两种实现的来源,看看您是否可以推断它是否实现了完全相同的算法。
  5. 我建议您从第一个选项开始,因为这是最简单的方法,可以立即判断它们是否是相同的算法。