All in all, this should prove relatively inaccurate. A vanilla http server from node sets neither server nor x-powered-by headers. Many frameworks don't set them, either (Walmart's hapi, PayPal's krakenjs, etc).
Fun toy project but if you're really interesting in fingerprinting, check out the OWASP entry on the subject[1].
Yes, it is just a toy project. It is a lot more work to fingerprint successfully. OWASP looks very interesting. Thanks for the link and subsequently the white paper links!
Pretty pointless since all this does is check the x-powered-by HTTP response header (which can be turned off[1]). If this captured other web frameworks as well (eg PHP also outputs to x-powered-by in it's default config) then this might be a little less pointless - but even then, most production sites should have those information leaks sealed anyway (you don't actually improve security, but at least it slows the attacker down a little as you're not spoon-feeding them information about your server build)
Just a heads up, there's already a handful of private staging/demo server URLs @ http://dotheyusenode.herokuapp.com/cache - you may want to reconsider exposing that for the publicly available instance.
I guess it's just checking for some header,like express has a special header... by the way, framework authors, please refrain from doing stuffs like that. The framework i use is nobody's business but mine.
I'm not sure what they are using to serve up their site, other than nginx. But they do have this header, "X-Hi-Human: The AIRBNB SRE team added this header. Come work with us! Email [email protected]"
If your server is detected, that's a security vulnerability.
You should never be able to identify the underlying technology of your stack or you open yourself to attack on any known vulnerabilities where as if your stack is unknown, then the vectors for attack are much less obvious.
[+] [-] sisk|12 years ago|reply
Fun toy project but if you're really interesting in fingerprinting, check out the OWASP entry on the subject[1].
[0]: https://github.com/dotheyusenode/dotheyusenode/blob/ea235619...
[1]: https://www.owasp.org/index.php/Testing_for_Web_Application_...
[+] [-] wlaurance|12 years ago|reply
[+] [-] laumars|12 years ago|reply
[1] http://stackoverflow.com/questions/5867199/cant-get-rid-of-h...
[+] [-] wlaurance|12 years ago|reply
It also tries to read through the Javascript served up to see if it uses browserify. https://github.com/dotheyusenode/dotheyusenode/blob/master/c...
But yes it is a glorified `curl -I www.foo.com | grep -i 'x-powered-by` UI
[+] [-] avree|12 years ago|reply
I thought you need a framework (like Express.js) and then to not have turned off the header.
[+] [-] dylanpyle|12 years ago|reply
[+] [-] panarky|12 years ago|reply
"Maybe, but we cannot tell"
[+] [-] wlaurance|12 years ago|reply
[+] [-] Gurrewe|12 years ago|reply
You can simply add ?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000 to the URI of most PHP-sites and the server will respond with the PHP-credits [0].
[0]: http://thepiratebay.se/?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C1...
[+] [-] avree|12 years ago|reply
[+] [-] nly|12 years ago|reply
[+] [-] pornel|12 years ago|reply
[+] [-] wlaurance|12 years ago|reply
[+] [-] unknown|12 years ago|reply
[deleted]
[+] [-] randunel|12 years ago|reply
[+] [-] hayksaakian|12 years ago|reply
[+] [-] camus2|12 years ago|reply
[+] [-] wlaurance|12 years ago|reply
[+] [-] meritt|12 years ago|reply
[+] [-] ebbv|12 years ago|reply
I win!
[+] [-] vivekn|12 years ago|reply
[+] [-] ninjakeyboard|12 years ago|reply
[+] [-] dmytrish|12 years ago|reply