Web Security – Dữ liệu người dùng được an toàn (Phần 1)
Bài viết được sự cho phép của tác giả Lê Nhật Thanh
Có một câu nói cực kì nổi tiếng trong thế giới hacker. “Không có một hệ thống nào là an toàn tuyệt đối”. Website của bạn cũng vậy, là một hệ thống thì luôn luôn có lỗ hổng bảo mật. Trong series web security này, bạn sẽ được học về những thứ cơ bản nhất trong thế giới security.
Vì lý do đó, một lập trình viên phải biết những kĩ thuật đơn giản để bảo mật cho một website. Trong bài viết này, bạn sẽ học cách để giữ cho người dùng, nội dung, và mọi thứ trên website bạn được an toàn và bảo mật.
#1 Giới thiệu về Security hay Web Security
Trước khi bắt đầu bài, mình muốn hỏi bạn một câu hỏi. Khi nhắc tới chữ “security”, bạn sẽ tưởng tượng gì trong đầu?
Hackers? Tấn công? Phòng thủ? Một hacker trong một phòng tối và đang mặc một chiếc áo khoác đen? Có phải bạn đang suy nghĩ về các bối cảnh trên?
Lý do là bạn cũng thường nghe thấy những thông tin như. “Một mạng xã hội lớn đã bị lộ thông tin người dùng”. “Một hacker đã tấn công và lấy đi hàng triệu thẻ tín dụng của một website mua sắm”.
Nhưng thực tế, security (ở đây là web security) một cách đơn giản có thể hiểu là bảo mật bảo mật tài nguyên dữ liệu và dự án trước, trong, và sau quá trình phát triển sản phẩm (ở đây là web development).
Ví dụ như bảo mật dữ liệu người dùng database, bảo mật source code. Bảo mật resource trong khi làm việc giữa các team, hay trong và ngoài công ty, bảo mật tài liệu, dụng cụ, phần cứng. Hay ai có thể xem và tham gia và dự án phần mềm, và ai thì không được. Các quy định bảo mật đối với từng dự án nhất định.
Còn đối với từng user trong hệ thống, họ được cấp những quyền hạn gì. Hay cách ngăn chặn việc “leo thang đặc quyền” (privilege escalation) của các users, …. Chúng ta có thể gọi chung là “user experience” hay “accessibility”.
Trong phần hướng dẫn tiếp theo, bạn sẽ được học về các khái niệm và kĩ thuật cơ bản trong security dành cho một lập trình viên.
#2 Lỗ hỏng bảo mật là gì?
Trong lĩnh vực phát triển phần mềm (software development), khi một ứng dụng hay một chức năng nào đó chạy không đúng với yêu cầu (requirement), bạn sẽ gọi đó là một “bug”. Một bug về security (security bug) được định nghĩa là một lỗ hỏng bảo mật hay một điểm dễ bị tổn thương (vulnerability).
Trong quá trình phát triển phần mềm, bạn – một lập trình viên luôn luôn tạo ra bug, hãy ghi nhớ điều này, dù ít hay nhiều. Thậm chí bạn sẽ luôn lặp lại những bug bạn đã tạo ra trong quá khứ.
Cho nên, để trở thành một lập trình viên giỏi và tốt, bạn phải rút kinh nghiệm của mình qua những lần học hỏi từ các sai lầm để dần dần giảm thiểu số bug ít nhất có thể.
Sau đây là một số kĩ thuật cơ bản nhất để giảm thiểu số bug mà bạn có thể tạo ra:
- Luôn luôn kiểm tra các giá trị người dùng nhập vào (not null, not empty string, kiểm tra số lượng dữ liệu). Kĩ thuật này còn gọi là validation.
- Đảm bảo rằng một người dùng không được có quá nhiều thời gian với hệ thống của bạn. Ví dụ số lần đăng nhập sai cho phép, thời gian tồn tại trong một session.
- Luôn xây dựng unit test cho source code của bạn. Bạn có thể tham khảo kĩ thuật test TDD.
Tham khảo việc làm Web Developer hấp dẫn trên TopDev
#3 Tính năng bảo mật (Security Feature) là gì?
Các tuyến phòng thủ đầu tiên của bạn chính là các tính năng bảo mật ví dụ như sử dụng HTTPS và CORS (bạn có thể tìm hiểu trên internet về HTTPS và CORS trước, và đừng lo lắng, bạn sẽ được học trong những bài sau).
Ví dụ, việc mã hóa dữ liệu của bạn sử dụng HTTPS có thể sẽ không fix được bug của bạn, nhưng việc này đảm bảo an toàn cho việc truyền nhận dữ liệu giữa các bên, tránh được các cuộc tấn công cơ bản như nghe lén, sniffer, MITM (Man in the middle).
#4 Sự ảnh hưởng của các lỗ hổng bảo mật
Khi sản phẩm của bạn không được bảo mật một an toàn, một số vấn đề sau có thể gây ra:
Ảnh hưởng tới người dùng | Những thông tin nhạy cảm, dữ liệu cá nhân người dùng có thể bị lộ ra ngoài. |
Ảnh hưởng đến sản phẩm | Người dùng sẽ cảm thấy không tin tưởng vào sản phẩm của bạn, từ đó việc kinh doanh sản phẩm sẽ không thuận lợi nữa. |
Ảnh hưởng đến hệ thống khác | Khi hệ thống của bạn bị chiếm tấn công. Hacker có thể dùng hệ thống của bạn để tấn công các hệ thống khác. Ví dụ như tấn công DDOS sử dụng botnet. |
Việc đảm bảo an toàn và bảo mật cho hệ thống ứng dụng của bạn còn đảm bảo sự an toàn cho người dùng và các hệ thống khác liên quan. Cho nên vấn đề an toàn bảo mật luôn được đặt lên hàng đầu trong quá trình phát triển phần mềm.
Như vậy bạn đã có một số khái niệm tổng quan và có cái nhìn dễ chịu hơn về web security. Phần tiếp theo chúng ta sẽ cùng nhau tìm hiểu về khái niệm về các loại tấn công cơ bản.
Bạn có biết tấn công (attack) là gì? Khi sản phẩm của bạn có những lổ hỏng, các hacker khai thác các lổ hổng đó và gây ra các thiệt hại cho sản phẩm của bạn, thì đó được gọi là tấn công. Trong thế giới của security, có 2 loại tấn công: Active attack và passive attack.
#5 Active Attack
Ở các cuộc tấn công này, attacker sẽ cố gắng xâm nhập hệ thống của bạn một cách trực tiếp. Ví dụ cố gắng truy cập vào những dữ liệu nhạy cảm của bạn, hoặc các cuộc tấn công từ chối dịch vụ DDOS.
Có một loại tấn công khác có tên gọi là phishing, đây cũng là một active attack. Lúc này, attacker sẽ cố gắng sửa đổi thông tin trên website bạn đang truy cập. Hoặc cố gắng điều hướng bạn đến một website khác nhằm chiếm đoạt thông tin của bạn.
#6 Passive Attack
Các attacker sẽ cố gắng thu thập thông tin cần thiết và không làm ảnh hưởng gì hệ thống sản phẩm của bạn. Thì đây được gọi là passive attack. Kẻ tấn công luôn tìm cách thu thập thông tin một cách âm thầm nhất. Khi đã có đầy đủ thông tin cần thiết. Họ có thể sẽ có một cuộc tấn công active attack hoặc một hành động nào đó.
Trong bên trên, bạn là người đang truy cập internet, kẻ tấn công sẽ đứng ở giữa. Và cố gắng nghe lén các cuộc giao tiếp của bạn với các máy chủ khác. Nhằm mục đích đánh cắp các thông tin cá nhân nhạy cảm như password, profile, history, … Kĩ thuật này còn được gọi là sniffer.
Trên đây mình đã giới thiệu cho bạn 2 loại tấn công và một số ví dụ về các cuộc tấn công trong thực tế. Ở phần tiếp theo, bạn sẽ biết cách làm thế nào để ngăn chặn các cuộc tấn công này. Để bảo vệ dữ liệu, thông tin của mình.
#7 Làm sao để phòng chống các cuộc tấn công
Attacker là những người luôn có thể phá hoại hệ thống, website của bạn. Hay đánh cắp dữ liệu, chèn mã độc hay làm bất cứ điều gì gây hại cho bạn. Vì vậy, bạn cần biết một số kĩ thuật, cơ chế để phòng chống và bảo về khỏi các cuộc tấn công.
Như mình đã nói ở đầu bài, không có một hệ thống nào là an toàn tuyệt đối. Một số kĩ thuật cơ bản đã được trình bày ở đầu bài. Như là luôn kiểm tra input nếu website của bạn có form input. Luôn sử dụng giao thức HTTPS để bảo mật cho dữ liệu truyền đi. Và còn rất nhiều kĩ thuật cụ thể khác mà bạn sẽ được tiếp cận sau này.
#Kết
Bạn chính là người bảo vệ cho tài sản, sản phẩm, website, thông tin của bạn. Để làm được điều đó, bạn cần tích luỹ kiến thức về security (web security) nhiều hơn. Vì điều này dường như bắt buộc đối với lập trình viên.
Xem thêm:
- M Mới ra trường không kinh nghiệm, sao làm BA?
- C Chuyển đổi SA key sang Workload Identity
- U Use Case Diagram và 5 sai lầm thường gặp
- K Kinh nghiệm xử lý câu lệnh điều kiện trong JavaScript
- D Dart là gì? Ứng dụng của ngôn ngữ lập trình Dart
- C Chuẩn Hóa CV, Nhận Ngay Phím Chất
- S So sánh MySQL và MongoDB: Nên chọn CSDL nào?
- D Dân BA có cần phải rành về kỹ thuật???
- C CSS Selector là gì? Cách sử dụng các loại CSS Selector phổ biến
- P Phân biệt Sketch, Wireframe, Mockup, và Prototype?