1,269 karma · joined June 9, 2008
- Telemetry is obviously a SAAS, not something you host yourself.
- Telemetry is real time and incorporates a push system that exposes an API where updates are immediately pushed to the dashboards.
- Telemetry has native apps on OSX, IOS and Windows
- Telemetry is drag and drop for arranging your visualization
- Telemetry supports the separation of the data and presentation layer as this blog post discusses.
- Telemetry has a much wider array of visualizations.
- Telemetry has 'viewers' allowing you to remotely control who can see what
- Telemetry's dashboards scale to any size dynamically
- Telemetry supports embedding individual widgets in a web page
- Telemetry has a number of integrations with third parties.
The problem here is that developers not taking the time to understand their application and how their tools work. Yes, MongoDB gives you enough rope to hang yourself and I certainly wouldn't suggest using it for a financial ledger, but you could have a durable application based on it if you really wanted to.
However if developers of a financial system cant grasp the need for atomicity in the transaction path then they're going to be buggering things up all over the place.
http://www.dailymail.co.uk/sciencetech/article-2478300/Pictu...
Fair enough. I think the interesting thing to debate is his conclusion: that two factor auth using SMS is so flawed as to be avoided completely. That's complete nonsense.
http://browser.primatelabs.com/ios-benchmarks
(The iPhone 5 is 2.5x faster than the 4S and 12x faster than the iPhone 1)
Twitter introduced SMS authentication as a second factor. Do you really think that their number of fraudulent logins for users protected by that second factor hasn't gone down to near zero?
Security is about systems, not individual components. Take a random Internet service protected by passwords and add a second factor to the login step where after login and password you must enter a code that gets SMS'd to your preconfigured phone number. The number of fraudulent logins will drop to near zero as password guessing is no longer sufficient to break in to an account. The number of attackers that will be able to attack your login page and intercept SMS's for a specific user within the phone network is limited to three letter agencies.
The best security is security that people will actually use. Virtually everyone has a mobile phone and thus why the SMS channel is attractive.
Sure, this isn't the be all and end all in security and an app like Google Authenticator is more secure but SMS as a second factor is ideal for most consumer applications.
Camera: http://www.amazon.com/Panasonic-DMC-GX1-Compact-System-Camer...
Lens: http://www.amazon.com/Panasonic-14mm-2-5-Aspherical-Intercha...
As a long time Ruby developer who's always in search of faster, better, cheaper I've found the following:
- Rails is still the safe, moderately fast to develop in do-anything framework. It excels at CRUD and will have a maintained library available for pretty much anything you need to do. It however is relatively slow and Ruby comparatively sucks at anything async.
- Node and its supporting frameworks are fantastic at async and smaller single page type web apps. But it's a bit trickier than Rails or similar to structure and manage larger code bases. NPM is awesome for web development, better than Gems. Packages in general are not as mature as Ruby Gems and will be some time until they are. ORMs are quite weak compared to what you have in Rails (see Mongoose vs Mongoid).
My current stack of choice is Rails+Bootstrap for CRUD, Node+Restify for APIs (or Express if you need to throw in a little HTML as well), MongoDB for the DB, Redis for caching/pubsub/jobs. I'd use Postgres instead of MongoDB if I had an application where data integrity is paramount above all. All the supporting processes like job workers I write in Ruby (Sidekiq is great).
I'd like to use Go and I'm keeping an eye out for an application for it -- something that needs really high performance.
Ideally you'd regenerate the key each time the user wants to show it or just use OAuth 2.0 (it's not as bad as everyone says it is).
I dont see any reason to continue the argument. It's clear to me that you should hash your API keys in your DB.
Use a config line like the following in nginx:
ssl_ciphers ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH;
RC4 is a problem right now but unfortunately there's not a good solution until we get more TLS 1.2 support out there.
If you don't do this sort of tuning you're exposed to some weak ciphers that can result in attacks.
Use SSL only, tune ciphers and you're good. You're wasting time trying to overthink the problem by adding another layer on top.
Since this API key is embedded within their app it'll require a programmer to change (and customers often may be non technical with sites built on contract). These are things you dont want to force customers to change with any frequency as it can cause pain and expense. You dont want to ever be forced to flush all your API keys, it could be a serious disaster.
Now there's protocols that rollover access keys hourly or the like such as OAuth a but that's a complex and often unnecessary use case that's beyond most API implementors. See how Google does OAuth 2.0 with their APIs for an example.
Since it's secure, simple and performant to hash API keys stored in your DB and just compared hashed values for authentication why would you ever not want to do it?
https://www.pcisecuritystandards.org/documents/pci_dss_v2.pd...
See section 8.5.9 for the password change policy. Section 3.6.4 for the key rollover policy (which references NIST 800-57 that basically says 1-3 years for most keys.
There's other standards (such as the 1-5 years for an SSL certificate from the issuer) and tons of best practices out there. In short you should be rolling over keys and expiring passwords on some sort of schedule. My point was that because humans use passwords they are conventionally seen as needing quicker expiration than keys.
You cannot brute force search against a large random number that is hashed with unsalted SHA or the like. This would require you to guess the number, hash it and check to see if the hashes match. A large random number encoded as a 64 character string is simply too big to guess, even at millions of guesses per second.
Thus using bcrypt to protect your api keys does nothing but impose a serious bottleneck in how many api requests per second you may authenticate.
While you're likely in serious trouble if someone gets your DB this helps minimize damage. Besides to authenticate a request you dont need the plaintext of the key, a hash is fine.