HNHacker News
TopNewBestAskShowJobs

JackWritesCode

344 karma · joined July 22, 2019

submissionscomments
JackWritesCode··on Make your website a black hole to big tech
It's got an upsell in it but it's not an advert.
JackWritesCode··on Make your website a black hole to big tech
We have a Lite version too if $14 is too much: https://github.com/usefathom/fathom
JackWritesCode··on Make your website a black hole to big tech
Hell yah to that too!
JackWritesCode··on Make your website a black hole to big tech
Oh crikey. Appreciate the criticism and totally appreciate if you don't trust us. You should not use Fathom and should consider going with our Lite version which you can self-host. We'll be making more changes to that version in the new year. With regards to data collection, check out: https://usefathom.com/news/anonymization

If you're feeling this way already, we'll likely never earn your trust, and that's fine. We appreciate you voicing your concerns, as you obviously care about privacy.

Have a great rest of day.

JackWritesCode··on Make your website a black hole to big tech
It's most certainly a plug for privacy-focused products. We're as surprised as you that this ended up on the front page.
JackWritesCode··on Make your website a black hole to big tech
Here: https://fathom.transistor.fm/episodes/the-open-source-dilemm...

:)

JackWritesCode··on Make your website a black hole to big tech
Scary thoughts. More people are moving to Brave, which is great.
JackWritesCode··on Make your website a black hole to big tech
Lite - https://github.com/usefathom/fathom
JackWritesCode··on Make your website a black hole to big tech
Good luck. Building a sustainable business at $2 / month will be hard but we wish you the best :)
JackWritesCode··on We Rebuilt Fathom Analytics from the ground up and moved to Laravel Vapor
Appreciate the nice comment. And we always expect to be challenged when we post to Hacker News. It keeps our minds sharp as people ask some good questions ;)
JackWritesCode··on We Rebuilt Fathom Analytics from the ground up and moved to Laravel Vapor
We're on track to hit around $450 this month. Includes a ton of migration-related spikes though. Comparatively, Heroku would've been $700-750.

Also, we have over-provisioned cache & RDS with Vapor, whereas Heroku we were running on the edge.

JackWritesCode··on We Rebuilt Fathom Analytics from the ground up and moved to Laravel Vapor
You're not a troll, we thought you were. We were very wrong. You were the complete opposite and wanted to help.

Paul has publicly admitted that he was wrong on the podcast. It is funny in hindsight. He denied that we said we would OS it then I reminded him that he made the graphic announcing it!

Big mistakes made on the messaging of this and lessons have been learned.

JackWritesCode··on We Rebuilt Fathom Analytics from the ground up and moved to Laravel Vapor
Pretty much bang on. The only piece I'd point out is that Paul didn't have a meltdown, he thought you were a troll.

We're looking to make the business sustainable so that we are in this for the long run. Without money, we couldn't spend the same amount of time on it that we are.

And we were definitely bad on the messaging and are going to be more careful in the future as it does cause upset.

JackWritesCode··on We Rebuilt Fathom Analytics from the ground up and moved to Laravel Vapor
Fantastic idea! Don't wait for someone to start it, start it yourself!

We're still going to be updating the OS version of Fathom but I 100% support anybody creating another privacy-focused analytics platform. Additional alternatives to Google Analytics are great!

Good luck :)

JackWritesCode··on We Rebuilt Fathom Analytics from the ground up and moved to Laravel Vapor
Until I spoke to you, I thought you were a troll and so did Paul :P That call with you was very useful and gave us a lot to think about. We recorded a podcast about OS and I mentioned our call: https://fathom.transistor.fm/episodes/the-open-source-dilemm...
JackWritesCode··on We Rebuilt Fathom Analytics from the ground up and moved to Laravel Vapor
It totally could!

I would suggest listening to https://fathom.transistor.fm/episodes/the-open-source-dilemm... too (published 10 days ago) as that'll give insight into our plans.

JackWritesCode··on We Rebuilt Fathom Analytics from the ground up and moved to Laravel Vapor
Awesome. And yeah, we haven't made many updates to the codebase, sorry! Getting Fathom V2 out the door was priority number 1, as we are not currently full time on Fathom. The plan is to grow Fathom to support us near full time so we can spend more time on things. I'd also like to learn Go. We both have full time jobs outside of this.

There will ALWAYS be an OS version. We don't know how the future will look but we know we have to keep a free privacy-focused analytics option available. It's the right thing to do.

JackWritesCode··on We Rebuilt Fathom Analytics from the ground up and moved to Laravel Vapor
Hey there,

Appreciate the comment. Good or bad, anything that makes us think about things is welcomed, so thank you!

1) The OSS version isn't going anywhere (listen to our podcast from 10 days ago, we talk about it: https://fathom.transistor.fm/episodes/the-open-source-dilemm...)

2) If you don't trust us, you shouldn't use our service.

3) Our fundamental guarantee regarding user data is that we don't sell it and we never will. We are already profitable and don't need to sell data.

JackWritesCode··on We Rebuilt Fathom Analytics from the ground up and moved to Laravel Vapor
So it's not Laravel that's making it hard, it just means that we'd have to rethink how we've tied our product to the infastructure. It's definitely possible, and if we go down that route, the software in Laravel will make it a breeze to export. We spoke with a chap on twitter who made a great point that we'd likely see more contributions since it's in PHP / Laravel. Less people know Go, and one of the big reasons we didn't feel the obligation to OS the new version was because next to nobody contributed to the Lite version.

And you're right. There are a segment of people who won't use analytics unless they're self-hosted. Totally understandable. We'll see what happens. It's not on the roadmap in the immediate future but we're not ruling it out.

JackWritesCode··on We Rebuilt Fathom Analytics from the ground up and moved to Laravel Vapor
Great questions.

1) They are different codebases. OS was written in Go by the previous developer. I rewrote everything in Laravel

2) We don't think we'll be porting it to OS but there's no decision on this yet

3) That's a great idea regarding a license, because a lot of people want to self-host... We'll have a think because we've purposely tied our app to certain infastructure, so we'd need to put in significant work to make it transportable. I'm not saying never, I just don't know.

We address some of the complications on the podcast.

These are solid questions, thank you.

JackWritesCode··on We Rebuilt Fathom Analytics from the ground up and moved to Laravel Vapor
Hey there,

Thanks for the love! The OS version has not been shitcanned. We spoke about our plans on our podcast 10 days ago: https://fathom.transistor.fm/episodes/the-open-source-dilemm...

Running 2 software products & working a full time job is hard but we'll get some updates to the OS version. We're likely going to hire a contractor to help us!

JackWritesCode··on How we built a GDPR-compliant website analytics platform without using cookies
> I am stating that the described hash dance offers no exclusion from GDPR as saying "we promise we won't look" would do.

Under your logic, you would never trust us because we could just add $log->write(UserIp, UserAgent, Hostname, Path) in plain text. Trust is very important and what you do with the data is important under GDPR.

And we don't hold all the information to re-create the hash, that's the thing.

I thought a lot about "Oh but you could just do this, this and this" but, no, that argument doesn't hold. Our obligation under GDPR is what we actually do with data.

JackWritesCode··on How we built a GDPR-compliant website analytics platform without using cookies
The visit expires 30 minutes after the visitor lands. The expiration isn't generic.

It's an interesting idea. We have multiple servers under the load balancers, so we'd be able to store them in Redis, but that is no better than permanent storage, since Redis could still be breached and you'd see it with ease.

JackWritesCode··on How we built a GDPR-compliant website analytics platform without using cookies
So that needs to be our next target point (access logs). We want to move to a position to keep no access lgos.

And a hacker could indeed "win" if they broke into our system, got the salt and exported the DB. We didn't focus on this in our article, as it's unbelievably unrealistic, but it's still possible. Our next step is to address that.

Without the hash, it's practically impossible to brute force.

JackWritesCode··on How we built a GDPR-compliant website analytics platform without using cookies
I think what’s been helpful for us with posting this here is to hear of different ideas for how someone might hack Fathom. When we came up with it, our starting point wasn’t “you have the salt and IP address”, go break a hash. It was on the assumption that you don’t have the salt or IP. I think we can improve what we’ve built. 720 salts improves resilience in a few areas but not in the scenario you are painting here. The scenario you’re painting here has made me think of additional ideas though.

If they had the salt, IP and user agent, they’d have to also brute force every possible hostname and pathname, which would be insane. But I suppose they’d only have to do a few million based on the data we have on hostnames / pathnames...

Lots of ideas for improvement are popping into my head and I love how this community keeps challenging you to improve things. We had feedback on Reddit but it was much angrier!

The next step is to take your feedback and look into how we would defend against the scenario you’ve provided. Thank you!

JackWritesCode··on How we built a GDPR-compliant website analytics platform without using cookies
Identifier is used for previous view only. Previous view is updated when a new view is inserted into the temp table & previous view's user identifier is wiped.
JackWritesCode··on How we built a GDPR-compliant website analytics platform without using cookies
I’m not worried about hash collision with sha256. Any reason why I should be? :)

And we can’t use cookies because of PECR!

JackWritesCode··on How we built a GDPR-compliant website analytics platform without using cookies
Trust me, we're not relying on Recital 26, that is just my thought experiment :) See here for our GDPR compliance: https://usefathom.com/data/
JackWritesCode··on How we built a GDPR-compliant website analytics platform without using cookies
For GDPR compliance notes please see: https://usefathom.com/data/

> You don't need to "brute-force" the hash, you just need to find a user that matches your hash... which is 1 in 7 billion (or so), much more tractable. This is also the principle e.g. MD5 rainbow tables are based on...

Not quite. We use a SHA256 hash as our salt, and that changes each day, so you'd need to brute force that.

In terms of how many possible combinations there are for this salt, please see: https://stackoverflow.com/a/49520766 - you would need to brute force it and try each possible combination with every single possible IP / User Agent / Site combination to break a hash. This is why it's not theoretically impossible but it's practically impossible.

We would love to approach things in an easier way but PECR doesn't want cookies, even anonymous ones.

Now, one thing that we have uncovered thanks to someone on here is that we need to increase our resistance to data breaches. If someone had complete, unlimited access to all our data / servers, including the daily salt, then they could de-hash page views from the last 30 minutes. I have no idea how long that would take. There are 4,294,967,296 (?) possible IP addresss, and then over 3M (?) user agents, so it'd be an absurd, pointless exercise.... Anyway, we're going to be bringing in multiple salts that depend on the user IP address, meaning that, in the event of a data breach, a hacker won't know which salt has been used for a hash :) Perhaps we base the salts on the first 3 digits of an IP address? That would mean we'd have 720 possible SHA256 salts!

JackWritesCode··on How we built a GDPR-compliant website analytics platform without using cookies
So if someone had unlimited access to our servers, that would be a problem. One piece to note is that page views get deleted after around 30 minutes.

So one of the reasons we posted to HN was for conversations like this. Reading what you put makes me think we need to do more when creating the PageRequestSignature and the SiteRequestSignature, because if someone had access to our server, got the hash, stopped all cron jobs from processing data, then they could work it out after a huge amount of time / computing power. But to be honest, at this point, they could also add log($_SERVER) and get the entire request body of a user, so we would have much bigger problems in that scenario.

Anyway, you've given me a few new thoughts on hardening from data breaches. Because, yes, if they know the hash & have full access to our server then it becomes easier. So we almost need to move it to the point where they won't know the salt that was used for a particular user. So we'd not recycle a single salt, we'd recycle multiple salts that are based on, perhaps, the first 2-3 digits of a users IP address combined with the last 2-3 digits.... Then it would be much harder to break without first knowing the $_SERVER dump (the user's IP etc.). Obviously this wouldn't stop a "complete control of server" attack where they could just start logging everything but it would really ruin a brute forcers day because they wouldn't know what salt to start with.

What do you think of that idea? I'm running on little sleep so be nice ;) Also thanks so much for all your feedback so far, it's so appreciated!

← PreviousPage 5 of 6Next →