Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[rojak-api] Rojak API key (and security) #123

Open
bobbypriam opened this issue Oct 23, 2016 · 10 comments
Open

[rojak-api] Rojak API key (and security) #123

bobbypriam opened this issue Oct 23, 2016 · 10 comments

Comments

@bobbypriam
Copy link
Contributor

Issue ini akan membahas mengenai pertimbangan-pertimbangan untuk pengamanan Rojak API. Seluruh anggota tim dan pengunjung kalau bisa silakan ikut berdiskusi di sini dan memberikan saran 🙇

Rojak API berfungsi sebagai interface dari Rojak Database. Operasi yang bisa dilakukan hanya membaca (GET). Rojak API diakses oleh publik melalui Rojak Client. Publik (idealnya) dapat membuat client sendiri apabila diinginkan.

The way I see it, attack vector yang bisa terjadi adalah (D)DoS terhadap query database. Untuk menghindari itu, menurut saya kita bisa (CMIIW):

  1. Mengimplement rate-limiting (throttling) dengan memberikan tiap-tiap client (rojak-ui-web, rojak-ui-app, dsb.) sebuah API key yang kemudian bisa kita track total requestnya dan revokable kalau dibutuhkan. Tapi mengingat salah satu client kita adalah web dan umumnya API key bisa terlihat di source javascriptnya, bisa terjadi penyalahgunaan API key dari web yang akhirnya menyebabkan client web tidak bisa mengakses API (kena rate limit). Solusinya mungkin API key disimpen di server intermediate lalu web mengirim request ke sana yang kemudian baru meneruskan ke API Rojak, memanfaatkan CORS. Tapi somehow kayaknya terlalu ribet 😅
  2. Ditch rate-limiting altogether dan fokus ke availability melalui caching sehingga meminimalisir DB roundtrip. API key bisa tetap digunakan untuk identifikasi client (request datang dari mana), tapi ga digunakan untuk throttling. Keuntungannya, pengecekan API key bisa stateless. Kelemahannya kita ga bisa yakin request dilakukan oleh siapa (bisa aja API key digunakan via curl atau yang lainnya).

Saya mungkin salah di sini dan mungkin melupakan aspek-aspek security yang lain, kalau ada insight dari yang sudah berpengalaman akan sangat membantu. Adakah attack vector lain yang mungkin dieksploitasi? Let us hear your thoughts!

@pyk pyk added the tim-api label Oct 23, 2016
@pyk pyk added this to the Rojak v1.0.0 milestone Oct 23, 2016
@pyk
Copy link
Owner

pyk commented Oct 23, 2016

Rate-limiting sama caching (meminimalisir db roundtrip) aku rasa udah pas untuk prevent DoS attack

@pyk pyk added the docs label Oct 23, 2016
@reinarduswindy
Copy link
Contributor

Sebenarnya agak kurang ngerti masalah security, tpi seharusnya rate-limiting udh cukup sih utk ngatasin masalah di atas.

@bobbypriam
Copy link
Contributor Author

@pyk Rate-limit perlu diimplemen? Mengingat API key hanya akan membedakan jenis client yang digunakan (web, app, dsb.), kalau ada client yang kena rate limit berarti client tersebut ga akan bisa dipakai sama sekali... Kok kayaknya ga fleksibel ya?

@pyk
Copy link
Owner

pyk commented Oct 23, 2016

@bobbypriambodo rate-limit lebih untuk ke pemakaian yang wajar atau menghindari abuse (misalnya abuse 1K req/s)

Rate-limit perlu diimplemen?

Menurutku perlu sih mas, tapi prioritasnya lebih kecil (implement endpoint dulu)

@bobbypriam
Copy link
Contributor Author

@pyk I see, masuk akal sih, mungkin perlu diteliti lagi misalnya treshold batas wajarnya berapa (mungkinkah user reguler rojak bakal sampai 1K req/s? 😄). Kalau anggota tim ada yang pernah pengalaman ngebuat sistem yang serupa mungkin bisa ikut diskusi di sini/slack hehe.

Selain DoS, ada lagi ga ya? Communication over HTTPS udah pasti lah ya.

@rawgni
Copy link
Contributor

rawgni commented Oct 23, 2016

@bobbypriambodo kalo 1k req/s artinya at that one particular second 1000 user load web rojak? sepertinya highly achieveable.

@bobbypriam
Copy link
Contributor Author

@rawgni Iya, saya juga pikir begitu. Makanya kayaknya butuh profiling juga untuk ngeliat seberapa kuat APInya untuk ngehandle concurrent request dan itung-itungan kira-kira user rojak akan seintensif apa.

@mychaelgo
Copy link
Contributor

mychaelgo commented Oct 23, 2016

hm mungkin bisa pakai semacam free service seperti cloudflare? udah include DDOS preventing setau saya CMIIW :)

@pyk
Copy link
Owner

pyk commented Oct 23, 2016

@mychaelgo yup, *.artificialintelligence.id dah pake cloudflare kok. Untuk kasus ini rojak-api nanti bisa pakai rojak-api.artificialintelligence.id

@mychaelgo
Copy link
Contributor

@pyk ok deh mas :)

@pyk pyk modified the milestones: Rojak v1.0.0, Rojak v2.0.0 Nov 1, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants