I have a pre-existing iOS & Android app, that I'm making an update for that includes a RESTful services API and Facebook login for user authentication. The general flow of the app is:
My app has gained popularity and has several clones already, and I want to prevent these clones from being able to use my RESTful API (as I am sure that they will try to do when I release the update). Let's assume that the clones are smart, are using the same Facebook access tokens that my app does (if this is possible), and are following a similar pattern & frequency of calling the API that my app does.
Is there anyway to ensure, or nearly ensure, that calls to my services are coming only from my app, and not the clones?
Thanks in advance!
Never pass input from an API through to the endpoint without validating it first. Use rate limiting. Setting a threshold above which subsequent requests will be rejected (for example, 10,000 requests per day per account) can prevent denial-of-service attacks. Use a web application firewall.
For mobile apps, the RESTful APIs use the HTTPS protocol, which is more secure for using a Secure Socket Layer (SSL). Since mobile apps undergo a lot of updates they should have a robust process for version control to manage the changes better.
In fact, the vast majority of successful apps on the Play Store will use at least one web API! In this post, we'll explore how to use a web API from within an Android app.
You can do this by including a signature in the request, and verifying it.
App Side:
do something like: signature = md5( md5(url + data) + MY_RANDOM_KEY)
append signature
to the data, or url, etc.
send call to REST api (as usual)
Server Side:
extract the signature
from the body/url (and remove it from there).
calculate what you think it should be: signature_should_be = md5( md5(url + data) + MY_RANDOM_KEY)
[keep in mind you've removed signature
from url/data so that you get url/data in its original pre-hash state]
verify that signature
and signature_should_be
are equal
Doing this, along with SSL, should make your API secure enough.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With