[SSS Hackathon 2014] Bí kíp giải mã đề thi

SSS Hackathon 2014

Chào các hackers thân mến, chắc rất nhiều bạn tham gia SSS Hackathon 2014 còn rất ấm ức không biết làm sao để bật được đèn số 2 và số 3. Tin vui cho các bạn đây, mình vô tình khám phá ra được nhật ký của người đã phát triển hệ thống đèn phiền nhiễu này, và mình sẽ chia sẻ cho các bạn với hy vọng các bạn tìm được giải pháp cho riêng mình.
———
Tp.HCM, ngày… tháng… năm…

Hôm nay trời thật đẹp, bệnh lười của mình lại tái phát. Triệu chứng cho chuyện này là những cơn ngáp ngắn ngáp dài, đầu óc thì chỉ mơ mộng tới cái giường thân yêu ở nhà hay ngồi nhai bắp rang trong rạp chiếu phim. Cũng may là todo của mình khá trắng (hoằc mình nghĩ nó trắng).

Mr X một nhân vật đầy quyền lực, và khét tiếng với nhiều … idea. Theo thường lệ, khi 1 idea nảy lên thì 2 đôi mắt ngài sánh rực và nở một nụ cười đầy bí hiểm. Và to-do list của bạn sẽ không còn trong trắng (nếu nó còn) khi ngài tiến sát tới gần bạn.

Ôi không… Hôm nay lại là mình. Chậm rãi bước tới phía bàn mình, Ngài vỗ vai và nói một cách trìu mến:

Mr X: Em à, anh có idea này hay lắm
Le me: Hôm nay trời đẹp anh nhỉ – cố đánh trống lảng :-”
Mr X: Em thấy cái công tắc đèn không?
Le me: Nắng thật đẹp anh ha, chà, nhiều người chụp hình cưới ghê. Cuối tuần này em cũng đi ăn đám cưới đó.
Mr X: Nó xa chỗ ngồi của anh quá, anh nghĩ mình cần một app để có thể điều khiển hệ thống đèn của mình, nó sẽ thật cool đó.
Le me: Hả? Thiệt hả? Mà làm sao bật mở đèn được?
Mr X: Anh sẽ đầu tư một bộ Philips Hue, nó sẽ không lãng phí đâu.
Le me: Đầu tư lương mình mới là không lãng phí đó, nhưng mà cũng cool thiệt – thầm nghĩ. Chà, vậy anh khi nào cần?
Mr X: 3 ngày nữa.
Le me: OK anh.

Mr X nổi tiếng nói là làm, ngày hôm sau xuât hiện trên bàn mình là một bộ Philips Hue. Sau khi tìm hiểu sdk của Philips Hue, thấy nó cũng đơn giản và mình bắt tay vào thiết kế hệ thống nội bộ. Bắt đầu với thiết kế đơn giản:

simple solution

Hmm, nếu vậy ai cũng biết API này đều có thể tắt/mở đèn thì sao? OK, vậy mình làm khó nhau hơn xíu, mình cần có thêm token để bảo vệ API. Thế nên API sẽ trở nên thế này:

with token

Pha coffee, lướt facebook… Chà, Rails lên xx.xx, phải share với group mới được… Một tiếng sau, bắt đầu làm thôi – yay me – hmm, git, heroku, ý thằng bạn mình code bằng vim, thử vim xem sao… Hết 1 tiếng nữa. Thôi, quay về với editor yêu thích vậy và let-the-shit-done. 30″ sau, mình đã bật được đèn và hoàn thành như thiết kế. Phewww, hôm nay vậy là đủ. Đi đá cầu thôi.

Ngày hôm sau, hí hửng khoe với sếp thì bị ngay một gáo nước lạnh vào mặt.

Mr X: Anh muốn có phiên bản cho web nữa. Anh muốn các bạn không có smartphone có thể dùng được và kể cả ở nhà.
Le me: Huh? Vậy là 7 tỷ người dùng internet này có thể truy cập vào đó.
Mr X: Anh biết, em là người thông minh, em có thể xoay sở được.
Le me: Ờ…

Mọi thứ cần phức tạp hơn xíu, một ban chuyên gia được triệu tập và cuối cùng sau buổi brainstorm là token chúng ta nên cất giấu trên server. Và mỗi lần cần bật đèn thì cần phải request token và kèm theo thông tin đăng nhập của mình. Chà, một ý tưởng thông minh, lập tức sơ đồ thiết kế được vẽ ra:

complex solution

Tự nhiên thấy mình giống chuyên gia bảo mật thiệt đó. Tự hào ghê. Mà chắc phải làm mọi thứ khó khăn hơn tí, API của mình không thể để ai cũng gọi được. Với kinh nghiệm của 1 cựu cracker, từng vọc khá nhiều app lớn nhỏ, “bí kíp” giữ cho API của mình được an toàn một cách đơn giản đó là thêm signature. Thêm “bí kíp” này vào đúng là 1 ý tưởng không tồi. Nguyên lý cơ bản của nó sẽ như sau:

signature

Về cơ bản server và client cùng mã hoá một thông tin và việc gọi API hợp lệ khi signature client gửi lên và của server trùng khớp nhau.

Một lần nữa, cuộc đời thật đẹp sao, mình thật giỏi sao, chạy đi khoe sếp thôi. Sau khi giải thích những gì mình làm Mr X có lời khen. Tới lúc này Mr X cũng có lời chia sẻ, trong số các đèn anh ghét nhất là cái đèn sau lưng anh. Nó cứ rọi vào màn hình và làm anh rất khó chịu, nên anh ko muốn ai bật lên được trừ anh. Lật bàn, thật là phức tạp, chỉ vì phát minh lại cái công tắc đèn mà đủ thứ chuyện. Mà chợt nhớ câu “Cá không ăn muối cá ươn, nhân viên bật sếp lương thường không tăng”. Thôi thì chiều sếp vậy. Hmm, nếu vậy thì mình thêm passcode, mỗi đèn mở lên cần có passcode và chỉ mỗi Mr X có đèn thứ 3 thôi. Sơ đồ thiết kế sẽ như thế này:

hide token

Tuyệt vời, cuối cùng thì Mr X không còn đường để chê nữa. Chà thứ 7 rồi, hôm nay phải đi đám cưới. Mà cũng xong việc rồi… xoã thôi.

Chết cha… còn app chưa làm T_T. Phải nói sếp để kiếm người giúp vậy !!!

SSS Full-stack Engineer

Love Silicon Straits and want to know more about our company culture, working environment or job vacancies?
Find out more at careers.siliconstraits.vn.

Silicon Straits
Be Challenged. Be Inspired. Be Different.




Posted by

on December 16, 2014

in , , , ,

Comments

Follow us for more later

or subscribe with