Open paulstraw opened 8 years ago
@paulstraw that seems like overkill? Perhaps it's better to do in-memory rate-limiting by ip just to get something going quickly?
One invite per ip max every 20 minutes?
Hmm, maybe I'm missing something, but reCAPTCHA is reasonably easy to implement, easy to use, and well-understood by end users. It seems like a more "proper" solution to my mind (it would also help prevent potential Slack spam). Is there any specific issue you see with it?
Another good point was just brought up: That would actually break the case where multiple people using the same internet connection wanted to sign up for a Slack in a short time period. In my experience, that happens fairly often in businesses etc. when news about a new relevant Slack is shared.
@paulstraw let's do the rate limit, and a way to overcome it is to either wait or perform reCAPTCHA. Straight up reCAPTCHA is a net loss in terms of user experience, even if it effectively solves the problem.
Not to be a pain about this, but a rate limit still doesn't solve the potential issue of Slack spambots. reCAPTCHA is also generally very good about letting real people through without a hassle these days. Would you be okay with reCAPTCHA as an option, instead?
Can you elaborate on the potential issue of Slack spambots, and how Slackin would prevent it?
To be clear: what I'm trying to avoid here is hurting the initial UX of the regular person who just wants to join a Slack, by adding (a) new steps, (b) visual clutter and (c) another external script.
I totally understand and agree with wanting to keep things simple, but not at the expense of security. RE potential spam:
reCAPTCHA requires a signup in order to obtain an API key
It's safe to assume that a good % of people will launch Slackin without it. I still think we need built-in rate limiting, with an option to supply an API key to activate reCAPTCHA.
Slackin already requires a Heroku/Azure/other PaaS account, or manual setup….
I think this is important enough to justify adding an additional setup requirement.
I do not like to add steps that disturb new users or brake the flow (like reCAPTCHA does), but I do have to agree with @paulstraw that it is what makes the most sense on this particular case.
When a script to exploit this is so simple and in a time when proxies are free and you can run the script pretty much anywhere a limit of requests based on IPs makes close to no sense.
Sure bypass reCAPTCHA is possible, but takes more effort than searching 'free proxy list' in Google.
One click doesn't sound like too much effort considering the ROI of this hypothetical attack is really high: you just DM a bunch of users with links, and many will be likely to click them.
"One click" is just for humans. reCAPTCHA (theoretically, at least) prevents non-humans from ever submitting the form in the first place.
I was pointing out that if the incentive is spam, you don't need full automation. If someone manually provisions the account by going through reCAPTCHA, it's still worthwhile.
That said, I'm ready to accept a PR that does the following:
SLACKIN_RECAPTCHA_KEY
env, and makes it available to Heroku et alMakes it so that the initial screen of slackin is un changed, and reCAPTCHA is only rendered as a second step:
@paulstraw are you still interested in contributing this feature?
Yes. Not yet certain when I'll be able to get to it though.
Any updates on this? Has it been implemented?
looks like here: https://github.com/rauchg/slackin/pull/234
Seems like this has been implemented.
Hey @rauchg, as you're aware, (sorry about that, by the way), it's pretty easy for someone to run a script that will generate a ridiculous amount of invites. The attack on slashrocket's instance of slackin caused ~14k total invitations to be sent out.
Would you be opposed to the idea of adding some sort of human verification system? I'm happy to implement this and submit a PR if you want, just wanted to make sure you were cool with it/if you had any thoughts.