了解强盗网站

时间:2017-11-22 11:05:31

标签: javascript ajax safari captivenetwork captiveportal

我们创建了一个强制门户网站,只要您连接到Wi-Fi网络,该门户网站就会打开。最初,强制网络门户上显示的页面在服务器端呈现。

现在我们在页面上添加一些由某些用户操作触发的AJAX功能。但是,我们看到非常不确定和随机的行为。有时AJAX调用是成功的,有时它甚至没有进入网络(通过 WireShark 检查)。

关于AJAX调用的重要事实 -

  1. 正在对与页面不同的域进行ajax调用。服务器允许使用CORS标头,并且在普通浏览器中工作正常,但在强制网络门户中失败。

  2. ajax调用本质上是异步的(虽然尝试过同步调用 - 但没有运气)。

  3. 我在ajax调用中设置了几个标头(authorization,client-id,user-id)。

  4. GET和POST都面临着这个问题。

  5. 失败的呼叫的状态代码为0.

  6. 问题主要出在Apple设备上。在Mac中它每次都失败,在iPhone中它是随机的。奇怪的是 - 相同的iPhone在不同的时间表现不同。

  7. 没有太多资源可以找到有关强制网络门户的技术规范。可用的少数几个没有帮助或已经过时(因为我测试了cookie正在工作,我读到它的某个地方在强制网络中不可用)。

    这里需要考虑的一件事是 - 如果对同一个域进行AJAX调用,它总是成功的。但如果相同的域策略是事物,则无法解释行为的随机化。我也检查了WebKit代码中的一些信息(https://github.com/WebKit/webkit/blob/b46afedc13edea0847ebf02414f803bbe9781b70/Source/WebCore/xml/XMLHttpRequest.cpp#L567),但也没有太多运气。

    以下内容就像是一个失败的浏览器信息 - Mozilla / 5.0(iPhone; CPU iPhone OS 11_1_1,如Mac OS X)AppleWebKit / 604.3.5(KHTML,如Gecko)Mobile / 15B150

    以下是ajax调用的Javascript代码 -

    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            // do something good
        } else {
            // do something evil
        }
    };
    // Call is made to some IP different than the domain
    xhttp.open("GET", "http://255.255.255.255:255/xyz", true);
    xhttp.setRequestHeader('authorization', 'some-random-hex-digit');
    xhttp.setRequestHeader('client-id', 'some-random-client-id');
    xhttp.send(JSON.stringify({}));

      

    任何人都遇到过类似问题或者可能会在这里提出一些建议吗?我是   坚持了2天。

0 个答案:

没有答案