Category Archives: Chuyện coding

Tât tần tật những thứ liên quan đến coding.

Series Bảo Mật Nhập Môn – Lỗ hổng bảo mật XSS nguy hiểm đến mức nào?

Giới thiệu về XSS

XSS (Cross Site Scripting) là một lỗi bảo mật cho phép hacker nhúng mã độc (javascript) vào một trang web khác. Hacker có thể lợi dụng mã độc này để deface trang web, cài keylog, chiếm quyền điều khiển của người dùng, dụ dỗ người dùng tải virus về máy. Các bạn có thể xem thêm demo trong vụ hack Lotte Cinema trước đây.

Đây là một trong những lỗi bảo mật thường gặp nhất trên các trang Web. Các hệ thống từ lớn đến nhỏ như Facebook, Twitter, một số forum Việt Nam, … đều từng dính phải lỗi này. Do mức độ phổ biến và độ nguy hiểm của nó, XSS luôn được vinh dự được nằm trong top 10 lỗi bảo mật nghiêm trọng nhất trên OWASP (Open Web Application Security Project).

screenshot_25

Để tóm tắt, xin trích dẫn vài câu của thánh bảo mật Juno_okyo, người vừa hack 3 triệu tài khoản của server X nào đó.

"Ờ thì nghe cũng có vẻ nguy hiểm đấy, nhưng sao tôi thấy ông hay viết về XSS thế? Rảnh quá hả!?"

À... một lỗi vừa phổ biến, nằm top 10 OWASP, lại vừa nguy hiểm, có thể kết hợp tốt với các lỗi khác. Nhưng dễ tìm, dễ fix, đã thế còn được tính bug bounty nữa.

Continue reading Series Bảo Mật Nhập Môn – Lỗ hổng bảo mật XSS nguy hiểm đến mức nào?

Series Phản Phác Qui Chân – Học thuật toán để làm vẹo gì???

Mình thường nghe các bạn sinh viên hỏi về tầm quan trọng của việc học thuật toán. Ý kiến của các bạn được chia làm hai luồng trái chiều như sau:

  • Thần thánh hoá thuật toán: Muốn lập trình giỏi phải giỏi thuật toán. Các công ty lập trình lớn toàn phỏng vấn về thuật toán còn gì.
  • Coi thường thuật toán: Thuật toán là cái thứ vô dụng, mấy anh đi làm nói là có dùng bao giờ đâu.

Bài viết này sẽ giúp các bạn trả lời câu hỏi “Học thuật toán để làm cái vẹo gì?”, cũng như có cái nhìn khách quan hơn về thuật toán.

Continue reading Series Phản Phác Qui Chân – Học thuật toán để làm vẹo gì???

Series Bảo Mật Nhập Môn – Giao thức HTTP “bảo mật” đến mức nào?

Sau một khoảng thời gian vật vã thì mình cũng hoàn thành bài đầu tiên trong series Bảo Mật Nhập Môn. Bài viết này sẽ bàn về sự “bảo mật” của giao thức HTTP.

Website của Lazada và Ngân hàng ACB sẽ bị lôi ra làm ví dụ. Vì bài viết khá dài nên các bạn cứ từ từ đọc nhé.

Ôn lại về HTTP

HTTP là một giao thức dùng để truyền nhận dữ liệu (Xem thêm ở đây). Hiện tại, phần lớn dữ liệu trên Internet đều được truyền thông qua giao thức HTTP. Các ứng dụng Web hoặc Mobile cũng gọi Restful API thông qua giao thức HTTP.

Tuy nhiên, nhược điểm của HTTP là dữ liệu được truyền dưới dạng plain text, không hề được mã hoá hay bảo mật. Điều này dẫn đến việc hacker có thể dễ dàng nghe lén, chôm chỉa và chỉnh sửa dữ liệu. Người ta gọi kiểu tấn công này là Man-in-the-middle attack, viết tắt là MITM.

Continue reading Series Bảo Mật Nhập Môn – Giao thức HTTP “bảo mật” đến mức nào?

Đừng để mình trở thành coder “siêu nhân”

Từ chuyện ngày xưa

Ngày xửa ngày xưa, à thật ra cũng không xưa lắm, khoảng những năm 75-90, có một số lão lập trình viên rảnh hơi, thực hiện một số nghiên cứu rảnh hơi để … đo năng suất làm việc của developer.

Kết quả thu được thật đáng ngạc nhiên! Chênh lệch về năng suất làm việc của 2 developer là rất lớn. Một developer giỏi có thế có năng suất gấp 10 lần một developer khác.

Người đời gọi những developer giỏi này là rockstar developer, 10x developer. Huyền thoại về các developer “siêu nhân”, “thần thánh” cũng ra đời từ đó.

rock-star-developer-or-programmer

Continue reading Đừng để mình trở thành coder “siêu nhân”

Series Phản Phác Qui Chân – Luận về Optimize Code

Đa số các bạn newbie thường phạm phải một sai lầm cơ bản: Quá mức quan tâm về tốc độ thực thi của code,  của ngôn ngữ lập trình. Đây là một thói quen nên bỏ!

Trong bài viết hôm nay, mình sẽ giải thích về việc tối ưu code: Optimize code một cách pro nhất! Khi nào cần optimize, khi nào không nên optimize code?

Continue reading Series Phản Phác Qui Chân – Luận về Optimize Code

Review sách: SQL Antipatterns – Những sai lầm chết người khi làm việc với SQL

Giới thiệu

Mấy hôm trước, khi mình lên stackoverflow hỏi một số câu liên quan tới SQL thì nghe nhắc tới khái niệm SQL Antipattern. Khác với design pattern, anti pattern là những cách thiết kế để giải quyết vấn đề, nhưng sử dụng nó lại… gây ra nhiều vấn đề hơn. Một antipattern được nhiều người biết đó là hút thuốc lào thay cho thuốc lá, cách này cai được thuốc lá nhưng sẽ gây ra nhiều vấn đề vệ sinh và môi trường hơn.

Từ hồi dùng thứ này bố bỏ hẳn thuốc lá nhá
Từ hồi dùng thứ này bố bỏ hẳn thuốc lá nhá

Tìm hiểu sâu hơn, mình tìm thấy cuốn sách “SQL Antipattern” này. Cuốn này được đánh giá rất cao trên amazon, nói về những sai lầm dễ mắc phải khi thiết kế và sử dụng SQL Database. Nội dung rất hữu dụng với các bạn database administator hoặc back-end developer nhé.

Screen Shot 2016-08-14 at 12.54.58

Continue reading Review sách: SQL Antipatterns – Những sai lầm chết người khi làm việc với SQL

Series Bảo Mật Nhập Môn – Bảo mật cơ bản cho developer

Giới thiệu

Bảo mật là một vấn đề rất tốn kém và phức tạp. Gần như hệ thống nào cũng có lỗ hổng (cả phần mềm lẫn phần cứng), các hacker có thể thông qua các lỗ hổng này để tấn công hệ thống.

Việc đảm bảo hệ thống bảo mật là trách nhiệm của rất nhiều bên: Sys admin, network, manager và developer. Do mình không chuyên về bảo mật nên mình không rành về việc config hệ thống mạng, setup tường lửa v…v, do đó mình sẽ không chém gió lung tung về mảng này. Thay vào đó, mình sẽ cùng các bạn tiếp cận khía cạnh bảo mật dưới góc nhìn của một developer.

Internet Security System

Những kiến thức trong series này rất cơ bản, dễ học, nhưng chúng sẽ vô cùng hữu ích, giúp bạn tránh phải những sai lầm bảo mật “ngớ ngẩn, cơ bản” khi code. Dù cho bạn code C hay C++, Java C# hay PHP, bạn cũng sẽ học được vài điều bổ ích qua series này.

Continue reading Series Bảo Mật Nhập Môn – Bảo mật cơ bản cho developer

Danh ngôn lập trình – Giải thích và bình luận

Danh ngôn là những câu nói đơn giản, ngắn gọn nhưng chất chứa bên trong cả một bầu trời chân lý. Danh ngôn dễ nhớ, dễ thuộc, đọc ít hiểu nhiều. Vì lẽ đó, hôm nay mình sẽ giới thiệu và phân tích một số câu danh ngôn … để đời của ngành lập trình.

Các bạn có thể thoải mái share mấy câu danh ngôn này để thể hiện mình “so deep”, hoặc ghi nhớ để lòe mấy đứa cùng lớp/cùng team khi nói chuyện nhé.

Phần bình luận là ý kiến cá nhân theo cách hiểu của tác giả, các bạn có thể bình luận chia sẻ cách hiểu của các bạn, hoặc góp thêm danh ngôn cho vui.
Continue reading Danh ngôn lập trình – Giải thích và bình luận

Tôi đã hack “tơi tả” Web Site của Lotte Cinema như thế nào?

Làm một developer “có tâm”, chúng ta không chỉ phải đảm bảo code chạy được, mà còn phải bảo đảm về bảo mật (với các hệ thống quan trọng). Có nhiều lúc, lỗi bảo mật đến từ chính sự ẩu tả của developer. Hôm nay mình sẽ lôi trang web của Lotte Cinema ra làm mẫu để giải thích cho các bạn.

Lưu ý: Bài viết mang tính chất học thuật, bình luận về kĩ thuật. Mình không ủng hộ, cũng không chịu trách nhiệm nếu bạn mang kiến thức đề cập trong bài ra làm chuyện trái pháp luật! Thân.

Giới thiệu

Tại sao mình lại chọn Lotte Cinema? Đơn giản là cách đây mấy tháng, khi nhắc đến mật khẩu, mình đã nêu ra một lỗ hổng bảo mật khủng khiếp của Lotte Cinema: Lưu mật khẩu dưới dạng text.

Đến nay, lỗ hổng này vẫn chưa được sửa, điều này chứng tỏ hai chuyện: Đội ngũ lập trình web lotte cinema thiếu kiến thức cơ bản về lập trình và cũng không thèm quan tâm gì đến việc bảo trì sửa lỗi. Điều này đồng nghĩa với việc website sẽ có nhiều lỗ hổng để khai thác.

Với logic đó, mình bắt đầu tìm lỗ hỗng của lotte với tâm thế học hỏi. Thật không ngờ, mình tìm được không chỉ một, mà đến tận vài lỗ hổng… cực kì chết người, có thể làm toàn bộ hệ thống ngừng hoạt động.

Continue reading Tôi đã hack “tơi tả” Web Site của Lotte Cinema như thế nào?

Nên học một hay nhiều ngôn ngữ

Gần đây mình nhận được một số câu hỏi về chuyện “Nên tập trung vào 1 ngôn ngữ hay là học nhiều ngôn ngữ”. Đây là một vấn đề gây khá nhiều tranh cãi trong cộng đồng lập trình viên.

Thật ra, không có câu trả lời đúng cho câu hỏi này! Trong nội dung bài viết, mình sẽ phân tích những điểm lợi/hại của mỗi lựa chọn. Tuy nhiên, lựa chọn cuối cùng vẫn là do bản thân các bạn nhé.

Thật ra, ngay từ đầu các bạn đã đặt sai câu hỏi! Thay vì hỏi “nên học một hay nhiều ngôn ngữ”, các bạn nên hỏi là “nên phát triển bản thân theo chiều rộng (generalist) hay chiều sâu (specialist)?”.

tumblr_inline_msvsmsrbld1qz4rgp

Continue reading Nên học một hay nhiều ngôn ngữ