Live data from Hacker News

jSpy: Automatically detect user's history

projects.milankragujevic.com

21–30 of 43 posts

Re: jSpy: Automatically detect user's history

#21

Unless I'm missing something, it doesn't collect your history but rather can test whether you have visited a URL before. While still a problem, it's certainly a different thing.

This vector has been known for many years.

And has been largely fixed for several. See e.g. https://developer.mozilla.org/en-US/docs/Web/CSS/Privacy_and...

Re: jSpy: Automatically detect user's history

#22
If you want to check the source code write in your console:

    var updateParams2 = updateParams;
    function (){debugger; updateParams2()};
then click the button and step in. Here is a part of the source, hope the author doesn't mind about this:

    urls = [
    function initStats() {
        currentUrl = 0;
        start = NaN;
        counter = 0;
        posTimes = [];
        negTimes = [];
        if (stop) {
            stop = false;
            loop()
        }
    }
    function updateParams() {
        out.style.textShadow = "black 1px 1px 60px";
        out.style.opacity = "0.5";
        out.style.fontSize = "15px";
        textLines = (window.textlines ? window.textlines : 100);
        textLen = (window.textlen ? window.textlen : 5);
        write();
        resetLinks();
        initStats()
    }
    function write() {
        var c = "";
        var a = urls[currentUrl];
        var d = "";
        while (d.length " + d;
            c += " "
        }
        out.innerHTML = c
    }
    function updateLinks() {
        var a = urls[currentUrl];
        for (var b = 0; b  4) {
                    if (currentUrl == 0) {
                        document.getElementById("nums").textContent = "Calibrating...";
                        posTimes.push(d);
                        timespans[currentUrl].textContent = posTimes.join(", ")
                    }
                    if (currentUrl == 1) {
                        negTimes.push(d);
                        timespans[currentUrl].textContent = negTimes.join(", ");
                        if (negTimes.length >= calibIters) {
                            var b = median(posTimes);
                            var a = median(negTimes);
                            if (b - a = 2) {
                        timespans[currentUrl].textContent = d;
                        linkspans[currentUrl].className = (d >= threshold) ? "visited yes" : "visited";
                        if ((d >= threshold) == true) {
                            window.links.push(urls[currentUrl])
                        }
                        incUrl = true
                    }
                    currentUrl++;
                    if (currentUrl == 2 && (negTimes.length Time elapsed: " + timeElapsed + "s, tested " + (((urls.length - 2) / timeElapsed) | 0) + " URLs/sec";
                        stop = true;
                        finishjSpy()
                    }
                    if (currentUrl > 2) {
                        $(".analyze_log").html(urls[currentUrl])
                    } else {
                        $(".analyze_log").html("Calibrating... ")
                    }
                    currentURLout.textContent = urls[currentUrl]
                }
            } else {
                updateLinks()
            }
        }
        requestAnimationFrame(loop)
    }
    function setupLinks() {
        window.links = [];
        var f = document.createElement("table");
        f.innerHTML = "URLTimes (ms)";
        f.className = "linklist";
        for (var e = 0; e " + b + "")
        });
        $(".content").fadeOut();
        $(".jspy").remove();
        setTimeout(function() {
            $(".content").remove();
            $(".results").fadeIn()
        }, 500)
    }
    ;

Re: jSpy: Automatically detect user's history

#23
post #22

If you want to check the source code write in your console: var updateParams2 = updateParams; function (){debugger; updateParams2()}; then click the button and step in. Here is a part of the source, hope the author doesn't mind about this: urls = [ function initStats() { currentUrl = 0; start = NaN; counter = 0; posTimes = []; negTimes = []; if (stop) { stop = false; loop() } } function updateParams() { out.style.tex…

Suggestions:

    - use if else;
    - replace "if(stop){return}" with "cancelAnimationFrame";
    - don't save data in the html nodes, DOM is slow, use js object to store data (timespans[currentUrl].textContent = d;).
    - no need to use "window.links = ..." you can simply "links = ..."

Re: jSpy: Automatically detect user's history

#24
post #23
post #22

If you want to check the source code write in your console: var updateParams2 = updateParams; function (){debugger; updateParams2()}; then click the button and step in. Here is a part of the source, hope the author doesn't mind about this: urls = [ function initStats() { currentUrl = 0; start = NaN; counter = 0; posTimes = []; negTimes = []; if (stop) { stop = false; loop() } } function updateParams() { out.style.tex…

Suggestions: - use if else; - replace "if(stop){return}" with "cancelAnimationFrame"; - don't save data in the html nodes, DOM is slow, use js object to store data (timespans[currentUrl].textContent = d;). - no need to use "window.links = ..." you can simply "links = ..."

Thanks for the suggestions, I implemented them, and also un-obfuscated and formatted the code. Also, now it's much faster since it doesn't use DOM.

Re: jSpy: Automatically detect user's history

#25
post #23

Earlier quoted context omitted.

Suggestions: - use if else; - replace "if(stop){return}" with "cancelAnimationFrame"; - don't save data in the html nodes, DOM is slow, use js object to store data (timespans[currentUrl].textContent = d;). - no need to use "window.links = ..." you can simply "links = ..."

Thanks for the suggestions, I implemented them, and also un-obfuscated and formatted the code. Also, now it's much faster since it doesn't use DOM.

I see you always omit the semicolon for the last statement in a block. Is this a Pascal influence?

Re: jSpy: Automatically detect user's history

#26

Earlier quoted context omitted.

Thanks for the suggestions, I implemented them, and also un-obfuscated and formatted the code. Also, now it's much faster since it doesn't use DOM.

I see you always omit the semicolon for the last statement in a block. Is this a Pascal influence?

No, I ran the code through an optimizer and checked "remove last semicolon".

Re: jSpy: Automatically detect user's history

#28
I run it in the Tint browser on Android and got Hacker News plus a few false positives, sites I never heard about and never been at (maybe some images included in other sites?). I got a much longer list of sites in Dolphin but that's my main Android browser. Again, many unknown sites but I can't remember or notice any random link I touch. I tried again with Chromium on Linux and got the cannot calibrate message. Firefox is my main browser and is not supported, luckily, let me add :-)

Re: jSpy: Automatically detect user's history

#29
post #28

I run it in the Tint browser on Android and got Hacker News plus a few false positives, sites I never heard about and never been at (maybe some images included in other sites?). I got a much longer list of sites in Dolphin but that's my main Android browser. Again, many unknown sites but I can't remember or notice any random link I touch. I tried again with Chromium on Linux and got the cannot calibrate message. Fire…

It has problems on mobile browsers because of the variations in CPU clock speed.
Post reply on HN