Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Đừng bao giờ tin vào User Input – kể cả khi nó đến từ “người dùng hợp lệ”


    Trong lập trình, có một câu nói nghe tưởng như hiển nhiên nhưng lại bị bỏ qua nhiều nhất:

    “Never trust user input.”



    Vấn đề là: rất nhiều hệ thống nói vậy, nhưng lại không làm vậy.
    1. User input không chỉ là form và textbox

    Khi nghe “user input”, nhiều người chỉ nghĩ đến:
    • Form đăng nhập
    • Ô search
    • Comment box
    Nhưng trên thực tế, user input là mọi dữ liệu đi vào hệ thống mà bạn không toàn quyền kiểm soát:
    • HTTP headers
    • Cookie, JWT
    • Query parameter, JSON body
    • File upload
    • API request
    • Thậm chí dữ liệu đến từ service khác
    Nếu dữ liệu không được tạo ra hoàn toàn bởi hệ thống của bạn, nó là user input – và không đáng tin.
    2. “Người dùng hợp lệ” không đồng nghĩa với “dữ liệu an toàn”

    Một sai lầm nguy hiểm là:
    “User này đã đăng nhập rồi, chắc không sao.”



    Nhưng thực tế:
    • Tài khoản có thể bị chiếm
    • Token có thể bị đánh cắp
    • Request có thể bị chỉnh sửa
    • Client không bao giờ đáng tin
    Hệ thống không bị tấn công vì tin hacker, mà vì tin người dùng quá sớm.
    3. User input là điểm bắt đầu của hầu hết lỗ hổng

    Phần lớn các lỗ hổng nghiêm trọng đều bắt đầu từ việc xử lý input sai:
    • SQL Injection
    • Command Injection
    • XSS
    • Path Traversal
    • Deserialization lỗi
    Điểm chung không phải là kỹ thuật phức tạp,
    mà là giả định rằng dữ liệu “đến đúng”.

    Không có input “vô hại” – chỉ có input chưa được kiểm tra đủ kỹ.
    4. Không tin user input không có nghĩa là từ chối user

    “Không tin” không có nghĩa là:
    • Chặn mọi request
    • Làm hệ thống khó dùng
    Mà là:
    • Validate dữ liệu
    • Sanitize đúng chỗ
    • Encode khi output
    • Kiểm tra logic, không chỉ định dạng
    User được phép gửi dữ liệu, nhưng hệ thống quyết định dữ liệu đó có giá trị hay không.
    5. Bảo mật bắt đầu từ giả định xấu nhất

    Hệ thống an toàn không phải vì:
    • User tốt
    • Code sạch
    • Input “trông có vẻ hợp lệ”
    Mà vì:
    Mọi input đều được coi là nguy hiểm cho đến khi chứng minh được điều ngược lại.



    Giả định xấu không làm bạn bi quan, nó làm hệ thống vững hơn trước thực tế.
Working...
X