#185 - SQL Injection - Lịch sử và cách phòng chống
SQL Injection là một kỹ thuật tấn công có lẽ là không còn xa lạ với bất kỳ ai trong chúng ta. Kỹ thuật này được đăng lần đầu tiên vào năm 1998, trên tạp chí Phrack (là tạp chí trực tuyến và lâu đời nhất của giới hacker) số 8 với tựa đề NT Web Technology Vulnerabilities bởi tác giả rfp "Rain Forest Puppy".
Sau đó đã có nhiều bài viết khác về SQL Injection bởi nhiều tác giả như:
February 3rd 2000 – “How I hacked Packetstorm – A look at hacking www threads via SQL” – by rfp
23rd October 2000 – SQL Injection FAQ – Chip Andrews – uses the first public usage of term “SQL Injection” in a paper
Các bạn có thể tìm hiểu thêm về SQL Injection tại đây.
Hiện nay có khá nhiều cách để bảo vệ trước các cuộc tấn công theo hình thức này. Hai kỹ thuật khá phổ biến đó là ORM (Object Relational Mappers) và Parameterized statements.
Ngoài ra, chúng ta cần đảm bảo các process/service chỉ có quyền thao tác trên những tài nguyên cần thiết. Áp dụng các hạn chế này (restricted privileges) sẽ giúp giảm thiểu các rủi ro liên quan tới tấn công Injection. Mật khẩu của người dùng luôn phải được hash bởi một thuật toán mạnh kết hợp với salt trước khi lưu trữ trên database.
Và cuối cùng, trong bất kỳ một hệ thống nào thì có lẽ con người cũng luôn là mắt xích yếu nhất. Chúng ta cần thường xuyên cập nhật các thông tin về an toàn thông tin và bảo mật, cũng như áp dụng các kỹ thuật phòng tránh tấn công, để ít nhất, có thể tránh các lỗi cơ bản sẽ không xảy ra!
Những bài viết hay
Migrate data từ On-prem lên Google Cloud
Với sự phát triển của các dịch vụ điện toán đám mây, có ngày càng nhiều các công ty có nhu cầu dịch chuyển cơ sở hạ tầng và dữ liệu lên các nền tảng Cloud. Đôi khi, chúng ta sẽ nhận được một task tưởng như đơn giản: migrate một lượng lớn data lên từ On-prem lên Cloud. Với các doanh nghiệp sử dụng Google Cloud, Google Cloud Storage (GCS) là một dịch vụ hợp lý để lưu trữ data, đặc biệt là unstructured data. Với nhu cầu đó, Google cung cấp cho người dùng dịch vụ Storage Transfer Service, giúp quá trình dịch chuyển dữ liệu lên GCS đơn giản, hiệu quả và chí phí thấp.
Mặc dù quá trình transfer trên quy mô lớn có thể đáng lo ngại, nhưng người dùng có thể thực hiện một số thao tác, giúp việc transfer một lượng data khổng lồ (lên đến petabyte) diễn ra suôn sẻ nhất có thể. Trong bài viết, tác những cung cấp và phân tích chi tiết những best practices khi sử dụng Storage Transfer Service:
Chúng ta cần hiểu rõ data sources và filesystem. Quá trình copy data lên GCS tạo ra các overhead như metadata transfer, checksumming, và encryption. Do đó, với cùng một lượng data, nếu data source chứa nhiều file kích thước nhỏ, quá trình copy sẽ phức tạp và tốn thời gian hơn so với data source chứa một số lượng ít các file kích thước lớn hơn. Việc sử dụng các công cụ nén như tar sẽ giúp tăng hiệu quả đáng kể khi hệ thống có quá nhiều file kích thước nhỏ.
Storage Transfer Service sử dụng các agents để transfer data từ on-prem filesystem lên GCS. Do đó, để đạt hiệu suất tối ưu, đặc biệt với các workload, chúng ta cần xác định số lượng transfer agents phù hợp, tối ưu hóa vị trí và cách cài đặt hiệu quả những agents này.
Một điều cơ bản nhưng rất quan trọng đó là: network connectivity. Ngoài vấn đề băng thông giữa source filesystem và GCS buckets (các buckets có thể ở các location khác nhau), có hai thành phần khác có thể dễ dàng cấu hình hơn: thứ nhất, network interface từ các transfer agents chạy trên on-premises đến WAN; và thứ hai, đó là kết nối của các transfer agents đến on-premises filesystem.
Với nhiều doanh nghiệp, việc di chuyển một lượng lớn dữ liệu từ on-premises lên cloud có lẽ ít xảy ra. Vì vậy, cần sự phối hợp hiệu quả giữa các bộ phận để điểm bảo các yếu tố từ network, thiết kế, cài đặt, filesystem cho đến testing, tư đó giúp quá trình transfer diễn ra liền mạch và hiệu quả.
When a rewrite isn’t: rebuilding Slack on the desktop
Slack desktop là client cũ nhất của Slack, được phát triển trong suốt thời kì tăng trưởng nhanh chóng và thử nghiệm ở thời đầu, liên tục chạy nước rút để theo kịp nhu cầu sử dụng và kỳ vọng ngày càng tăng của người dùng. Ngày nay, sau hơn nửa thập kỷ phát triển vượt bật, Slack được sử dụng bởi hàng triệu người. Nhiều lỗi bắt đầu xuất hiện trên ứng dụng Slack. Ngoài ra, bối cảnh công nghệ đã thay đổi khiến các công cụ đã chọn vào năm 2012 ( jQuery, Signals, direct DOM manipulation) không còn phù hợp. Dần dần nhu cầu thay đổi về mặt nền tảng cho Slack desktop càng cần thiết hơn.
Đội ngũ Slack cho rằng thành công trong quá trình viết lại toàn bộ này là nhờ kế hoạch viết và release dần dần (incremental release), không phải release 1 lần duy nhất. Code cũ và code mới tồn tại đồng thời trong quá trình viết lại project, với code mới dần dần thay thế code cũ.
Mục tiêu cuối cùng là codebase hoàn toàn chỉ có code mới. Đội ngũ Slack cho rằng nếu cứ bắt đầu thay thế này mà không có quy tắc gì, việc code cũ và code mới bị quấn lẫn lộn vào nhau không thể tách rời sẽ làm mục tiêu cuối cùng trở nên bất khả thi. Vì vậy đội ngũ đã đề ra những luật lệ về việc tương tác giữa 2 phần code:
- Code cũ không thể trực tiếp import code mới, trừ những phần được "exported"
- Code mới không thể trực tiếp import code cũ, trừ những phần được "adapted" để code mới sử dụng
Phiên bản "hiện đại" chỉ có code mới của Slack đã release và cho thấy cải thiện đáng kể về tiêu thụ bộ nhớ trong trường hợp nhiều workspace. Mời các bạn đọc bài viết gốc ở đây để hiểu thêm chi tiết góc nhìn và cách thực hiện của Slack nhé.
Góc Database
Impact of Network and Cursor on Query Performance of PostgreSQL
Thông thường khi nghĩ tới optimize performance của query trên các Relational Database, chúng ta hay nghĩ đến index. Ngoài index ra thì network (thời gian dữ liệu truyền qua mạng) và cursor (khi thực hiện các câu query trả về nhiều dòng theo nhiều lần) cũng là các yếu tố nên được cân nhắc khi tìm cách optimize câu query của bạn. Tuy nhiên làm sao để tìm hiểu được tác động của hai yếu tố này?
Trong bài viết này, mời các bạn cùng theo dõi quá trình một người dùng PostgreSQL phân tích tác động của hai yếu tố nên trên thông qua việc khảo sát
Góc Engineering Manager
Designations, levels and calibrations
Bắt đầu làm việc với vai trò Engineering Manager (EM), hẳn bạn cũng dần nhận thấy những vấn đề mà mình phải giải quyết không chỉ giới hạn trong các bài toán kỹ thuật nữa mà bắt đầu phải xử lý vấn đề con người nhiều hơn.
Một trong các bài toán quan trọng mà EM cần phải làm quen đó là thực hiện đánh giá performance cho team mình. Một kết quả đánh giá performance tốt vừa phải mang tính công bằng để làm cơ sở cho lương, thưởng, thăng chức, vừa phải có chiều sâu theo từng cá nhân để giúp thành viên được đánh giá nhìn ra được ưu/khuyết điểm của mình để từ đó khắc phục và phát triển bản thân hơn nữa. Để làm được điều này đòi hỏi không chỉ kỹ năng và nỗ lực của EM, mà còn cần một framework tốt.
Nếu công ty của bạn chưa có một framework cho việc này, bạn có thể tham khảo bài viết này để hiểu thêm về một hệ thống đánh giá performance cần những thành phần gì để tìm cách dựng cho mình một framework phù hợp nhé.
Góc Lập Trình
Đề ra tuần này:
Tập hợp [1, 2, 3, ..., n]
chứa tổng cộng n!
hoán vị khác nhau.
Bắng việc liệt kê và gán nhãn các hoán vị theo thứ tự, ta sẽ có danh sách sau với trường hợp n = 3
:
"123"
"132"
"213"
"231"
"312"
"321"
Cho trước n
và k
, hãy trả về chuỗi hoán vị thứ k
Các bạn có thể thử sức tại đây.
Lời giải tuần trước:
Bài toán yêu cầu tìm tổng số đường đi từ nguồn tới đích, vì vậy ta cần thực hiện tìm tất cả những đường đi hợp lệ. Với bài toán tìm đường trong ma trận, giải thuật quay lui (back tracking) sẽ cho ta lời giải phù hợp.
Bên cạnh đó bài toán yêu cầu đường đi phải đi qua tất cả các ô không phải chướng ngại vật, nên sau khi tìm được đường đi từ nguồn tới đích, ta cần kiểm tra xem đường đi đó đã đi qua tất cả các ô hay chưa. Giải thuật được thực hiện tại đây.
Code & Tools
This Week Sponsors
ENGINEERING RECRUITMENT FROM GRAB
Grab is Southeast Asia’s leading superapp, providing everyday services such as mobility, deliveries (food, packages, groceries), mobile payment and financial services to millions of Southeast Asians. At Grab, we believe that talent is the heart of the company. Therefore, we strive to create a wonderful working environment to optimize the potential of our Grabbers to achieve our common mission: drive Southeast Asia forward by creating economic empowerment for everyone.1
Why you will love working at Grab:
MacBook and 24-inches-monitor are provided.
Attractive salary and performance bonus.
Extra Medical Insurance from 1st joined date.
14 days Annual leaves + 5 days of other leaves
GrabFlex allowance (up to 4.500.000 VND per month) for Family’s vacation, Education, Gym, Learning, etc…
GrabLove as vouchers for using Grab’s services.
Relocation opportunities to Regional or other countries.
Online Learning System & Offline Training courses are provided.
Opportunity to work, learn & grow with world-class professional engineers.
Opportunity to work for South East Asian Tech Decacorn.
Working day: Monday - Friday.
Join our Squad team today to drive Southeast Asia forward!
Check out our open positions at https://grab.careers/jobs/
Apply directly to ta.vn@grab.com as: Full Name_Applied position_Grokking
Quotes
640K of memory should be enough for anybody.
—attributed (without foundation) to Bill Gates, 1981
I’ve said some stupid things and some wrong things, but not that.