Search code examples
ruby-on-railsapiauthenticationshopifyspoofing

Shopify Rails App - Querystring Spoofing


I'm developing a Shopify App with Rails and have been using the query-string to detect which shop is accessing it. This seems vulnerable as users could alter the url to access someone else's settings.

Here's an example:

I click on the preferences link on my app and get redirect to http://example-app.com/preferences?shop=example.myshopify.com and get a page of settings related to the the store: example.myshopify.com

So what's to stop the user from changing the querystring to http://example-app.com/preferences?shop=notmystore.myshopify.com and logging in to a store that they don't own?

Should I use an authentication gem (https://www.ruby-toolbox.com/categories/rails_authentication) and make each user create a username and password to prevent spoofing attacks?


Solution

  • I found the solution is to always retrieve the shop url from your session variables and not from the query string:

    session[:shopify].url

    also make sure this is at the top of each of your controllers to ensure the shopify session exists:

    around_filter :shopify_session

    as shown in this: https://github.com/Shopify/shopify_app/blob/f9aca7dfc9c29350f7f2c01bb72f77a54ece2b77/lib/generators/shopify_app/templates/app/controllers/home_controller.rb