29+ Giải pháp BẢO MẬT WEBSITE an toàn và hiệu quả

11/10/2022
Tại Việt Nam, cứ mỗi 45 phút lại có một website bị tấn công (theo thống kê năm 2019). Việc website bị tấn công nhẹ thì gây bất tiện cho người dùng, còn nặng sẽ khiến các doanh nghiệp bị điêu đứng về kinh doanh cũng như thương hiệu…
-

Nội dung bài viết

  1. Bảo mật website là gì?
  2. Tại sao cần phải bảo mật website?
  3. Các cách bảo mật website hiệu quả
    1. 1. Thay đổi đường dẫn Quản trị (Back-end)
    2. 2. Xóa bỏ đường dẫn Quản trị back-end trong robot.txt
    3. 3. Đặt mật khẩu phức tạp
    4. 4. Thuật toán mã mật khẩu hóa phức hợp
    5. 5. Bảo mật Quản trị back-end 2 lớp
    6. 6. Thời gian truy vấn Back-end
    7. 7. Chọn mã nguồn hợp lý
    8. 8. Hạn chế mã nguồn (sourcode) giao bán và plugin miễn phí
    9. 9. Cài đặt SSL/HTTPS (giao thức mã hóa)
    10. 10. Ngăn chặn SQL injection
    11. 11. Ngăn chặn tấn công XSS
    12. 12. Ngăn chặn với CSP (Content Security Policy)
    13. 13. Check downtime cho website
    14. 14. Sử dụng mã Captcha chống spam?
    15. 15. Bảo mật các thư mục
    16. 16. Hạn chế để lộ các thư mục chứa quan trọng
    17. 17. Phân quyền cho thư mục, các file là tối thiểu nhất.
    18. 18. Mã hóa sourcecode trước khi up lên server
    19. 19. Chặn quyền “Run” với thư mục upload
    20. 20. Cẩn thận với các thông báo lỗi
    21. 21. Giữ cho các lỗi đơn giản
    22. 22. Upload từ người dùng
    23.  
    24. 23. Check dữ liệu đầu vào qua các form, các biến
    25. 24. Đổi cổng mặc định
    26. 25. Chặn IP khác ngoài công ty vào các cổng hệ thống
    27. 26. Sử dụng tường lửa server
    28. 27. Thuê server nơi uy tín
    29. 28. Backup thường xuyên
    30. 29. Backup chéo hệ thống
  4. Một số công cụ bảo mật website bạn có thể tìm hiểu thêm
    1. 2. Netsparker:
    2. 3. OpenVAS:
    3. 4. OWASP Xenotix XSS Exploit Framework:

Bảo mật website là gì?

Bảo mật website là tổng hợp  những giải pháp nhằm hạn chế những phương thức tấn công của hacker, của virus vào website. Nhằm đảm bảo an toàn dữ liệu, ổn dịnh cho sự hoạt động của website.

Bảo mật website
Bảo mật websit là nhiệm vụ rất quan trọng

Tại sao cần phải bảo mật website?

Đặt ngược lại câu hỏi: Nếu website của bạn bị tấn công thì có thể gặp những hậu quả gì?

  • Bị lộ dữ liệu khách hàng hoặc dữ liệu quan trọng của doanh nghiệp

  • Ảnh hưởng tới uy tín thương hiệu

  • Ảnh hưởng tới công việc kinh doanh

  • Bị ảnh hưởng tới từ khóa SEO & quảng cáo

 

Các cách bảo mật website hiệu quả

 

I. Bảo mật tài khoản quản trị viên website

Đây là giải pháp khá đơn giản nhưng lại hiệu quả cao, nhưng lại rất ít đơn vị chú ý. Hãy xem lại website của mình có bị không nhé.

1. Thay đổi đường dẫn Quản trị (Back-end)

Hacker sẽ chú ý đến những website có đường dẫn Back-end  khá đơn giản hoặc là phổ biến. VD: /admin, /administrator/ và đặc biệt là /wp-admin (backend của wordpress)

Giải pháp đơn giản là hãy đổi đường dẫn thư mục Back-end, để càng phức tạp, càng không quy luật càng tốt.

Chúng tôi đã từng trao đổi với một hacker tại Nhật, Họ cho bot quét 3 ngày 3 đêm chỉ để tìm ra link back-end của một website mà không được. Đơn giản là back-end phức tạp, nhiều ký tự thì để bot tìm ra được cũng vô cùng vất vả và dễ bỏ cuộc.

 

Trong file robots.txt, kỹ thuật thường khai báo thẻ Disallow - thư mục không cho google index. Và nhiều lập trình không hiểu bản chất nên để thư mục admin vào đây. Điều này vô tình gây lộ đường dẫn.

Robots.txt có thể gây nguy hiểm
Robots.txt có thể gây nguy hiểm bởi khai báo back-end

Lưu ý: Không khai báo Disallow không có nghĩa là google sẽ tìm được thư mục đó, bởi nó không thể tự mò vào server được. Hãy test thử admin của bạn: site:abc.com/link_back_end xem nó đọc được không?

3. Đặt mật khẩu phức tạp

Mật khẩu phức tạp, không phổ biến sẽ gây khó khăn cho hacker khi giải mã. Do vậy, yêu cầu người dùng đặt mật khẩu phức tạp sẽ hạn chế được rủi ro hơn rất nhiều.

Các thuật toán mã hóa hiện nay như MD5, Sha1, Sha256, Sha512 có một ưu điểm là dạng mã hóa một chiều, không giải mã ngược lại được. Tuy nhiên, có một giải pháp tìm ra là: Cho bot chạy thử đầu vào để so sánh với đầu ra, có thể bạn vẫn bị lộ.

Hầu hết các đơn vị sẽ sử dụng thuật toán mã hóa mặc định của hệ thống hoặc của mã nguồn (ví dụ như wordpresd) dẫn đến có nguy cơ bị lộ, bị giải mã ngược.

Giải pháp: Hãy phối hợp nhiều thuật toán mã hóa, thậm chí là phối hợp với thuật toán riêng của mình. Khi đó hacker sẽ khó khăn hơn rất nhiều trong việc giải mã bởi chắc chắn kết quả nó không bao giờ nằm trong bộ "từ điển đã giải mã từ trước" .

Phương pháp này không khó, chỉ cần hiểu về chuyên môn lập trình và khá hiệu quả nhưng rất ít đơn vị thiết kế website triển khai, đặc biệt các đơn vị dùng mã nguồn có sẵn.

5. Bảo mật Quản trị back-end 2 lớp

Việc chặn thêm 1 lớp mật khẩu nữa từ folder bảo mật thông qua .htaccess sẽ khiến Hacker sẽ rất ngán. Thêm nữa toàn bộ các thư mục phía trong của Quản trị sẽ được bảo mật.

6. Thời gian truy vấn Back-end

Có nhiều cách thức lưu Session (Phiên làm việc) của Quản trị viên trong back-end. Tài khoản người đó có thể lưu trữ rất lâu trên máy, hậu quả có thể bị hacker tấn công vào máy hoặc vô tình người trong phòng làm việc vào máy sửa dữ liệu (Đã xảy ra với khách hàng của Delectech). Giải pháp là hãy rút ngắn thời gian lưu phiên làm việc, thậm chí có thể là không còn lưu tài khoản ngay khi tắt trình duyệt. 

II. Bảo mật với mã nguồn

Thực tế, năm 2018, đã xảy ra sự cố website của ngân hàng Hợp tác xã bị tấn công. Nguyên nhân xác định sau đó là do sử dụng mã nguồn wordpress.

Có lẽ ai cũng biết, website của các doanh nghiệp lớn như: tập đoàn, dữ liệu cơ quan nhà nước, ngân hàng... thì yêu cầu bảo mật rất lớn. Do vậy, không thể lựa chọn mã nguồn mở được. 

Tùy theo nhu cầu bảo mật cao hay thấp và chi phí đầu tư để chọn mã nguồn hợp lý. Nếu giành cho các hệ thống lớn, cần bảo mật cao như ngân hàng, dữ liệu quốc gia… thì yêu cầu cao hơn nhiều so với thiết kế website bán hàng hoặc thiết kế website giới thiệu doanh nghiệp

Đánh giá bảo mật và chi phí đầu tư của ba mã nguồn phổ biến:  Wordpress  < PHP thuần < .Net  (Lưu ý: wordpress là mã nguồn được xây dựng trên PHP nhưng được đóng gói sẵn) 

Thêm nữa, wordpress đang là mã nguồn bị tấn công nhiều nhất, thậm chí là tấn công hàng loạt. Do vậy, hãy dự đoán mức cần thiết để chọn mã nguồn hợp lý.

8. Hạn chế mã nguồn (sourcode) giao bán và plugin miễn phí

Có hai dạng mã nguồn nên tránh:

  • Nhiều mã nguồn (do hack) và giao bán lại. Sau khi hack xong, hacker có thể trèn những mã lệnh nguy hiểm, và người bị hại tiếp theo là người mua.
  • Plugin miễn phí (đặc biệt là cho wordpress): đây là những mã nguồn có thể do kỹ thuật chưa am tường bảo mật, hoặc cũng có thể do miễn phí thì không ràng buộc. Do đó sẽ có nhiều nhiều lỗ hổng. Và đây là nguyên nhân rất nhiều website đã bị tấn công, ảnh hưởng kinh doanh rất lớn.

 

III. Bảo mật với tư duy lập trình

Hiện nay đây là giao thức bắt buộc phải có trên các trình duyệt, và đặc biệt là khi chạy quảng cáo, làm SEO thì google, facebook đều yêu cầu. Đây là giao thức mã hóa gói dữ liệu để tránh tin tặc giả lập chặn gói tin trên đường truyền.

Tuy nhiên nhiều người lầm tưởng có SSL là có giải pháp bảo mật và website đã được an toàn?

Không hề an toàn. Bởi Đây chỉ là một giải pháp bảo mật. Và hacker ít tấn công qua con đường này bởi nó yêu cầu hacker ở một trình độ cao.

Lỗi khi không cài SSL
Lỗi khi không cài SSL/HTTPS

Thế nào là tấn công SQL injection?

SQL injection cùng với DDOS là hai hình thức tấn công website phổ biến nhất. Từ các form điền thông tin như đăng nhập, giỏ hàng, liên hệ.. hoặc các biến REQUEST (không mã hóa), hacker sẽ trèn những dòng lệnh truy vấn hiểm vào để tấn công vào cơ sở dữ liệu của website.

Hậu quả xảy ra có thể rất nguy hiểm:

  • Bị xóa hết hoặc xóa một phần dữ liệu
  • Bị trèn, bị chỉnh sửa dữ liệu
  • Bị lộ cơ sở dữ liệu, lộ thông tin quan trọng

Giải pháp cho vấn đề này là:

  • Mã hóa các biến đầu vào

  • Dùng các hàm chặn SQL injection trước khi query vào cơ sở dữ liệu

  • Kiểm soát dữ liệu đầu vào, để phát hiện và loại bỏ các câu query trên biến

  • Dùng tường lửa

Thế nào là tấn công XSS?

Cũng là các form và biến REQUEST, lần này hacker không trèn câu lệnh truy vấn dữ liệu, mà trèn các đoạn mã javascript. 

Khi website bị tấn công bởi phương thức này, có thể có những hậu quả sau:

  • Gây khó chịu cho người dùng
  • Lấy thông tin người dùng thông qua form trực tiếp trên website hoặc form giả

Giải pháp cho vấn đề này là:

  • Mã hóa các biến đầu vào

  • Kiểm soát các biến đầu vào, phát hiện các thẻ javascript hoặc HTML không hợp lệ

 

Đây là phương thức bảo mật nội dung. Chúng ta sẽ cung cấp cho hệ thống một WHITELIST - là danh sách các website được phép load lên. Các trang khác sẽ bị chặn. 

Khi đó có thể bị hack hoặc người nhập nội dung có copy nguồn khác cũng không load lên được.

content-security-policy: default-src * data: blob:;script-src *.facebook.com *.fbcdn.net *.facebook.net *.google-analytics.com *.virtualearth.net *.google.com 127.0.0.1:* *.spotilocal.com:* 'unsafe-inline' 'unsafe-eval' *.atlassolutions.com blob: data: 'self';style-src data: blob: 'unsafe-inline' *;connect-src *.facebook.com facebook.com *.fbcdn.net *.facebook.net *.spotilocal.com:* wss://*.facebook.com:* https://fb.scanandcleanlocal.com:* *.atlassolutions.com attachment.fbsbx.com ws://localhost:* blob: *.cdninstagram.com 'self' chrome-extension://boadgeojelhgndaghljhdicfkmllpafd chrome-extension://dliochdbjfkdbacpmhlcpmleaejidimm;

Downtime là gì?

  • Downtime là thời gian website không phản hồi với người dùng. 

Downtime xảy ra khi nào? 

  • Lượng truy cập lớn hơn sức chịu của server
  • Bị tấn công DDOS, tức là tấn công từ chối dịch vụ. Hacker giả lập nhiều Client truy cập một lúc khiến server quá tải
  • Bị trèn mã độc: Nhiều mã độc đang trong quá trình "Quét" dữ liệu trên server và gửi chúng ra ngoài, khiến tài nguyên server bị cạn kiệt.

Giải pháp cho downtime là gì?

Phải tìm đúng nguyên nhân mới chữa được bệnh.

  • Nếu lượng truy cập lớn: Hãy tối ưu lại code tăng sức chịu như chạy cache, tối ưu query. Giải pháp dài hạn là nâng cấp server, thậm chí sử dụng cân bằng tải với hệ thống server cho các dự án lớn.
  • Nếu bị DDOS: Tìm nguồn tấn công để ngăn chặn như chặn IP, dải IP. Hoặc tìm hướng đi chung để chặn
  • Bị trèn mã độc: Phải quét virut cho server hoặc đổi server rồi up code sạch nên để kiểm tra. Tuy nhiên, sau đó phải dò lại nguyên nhân lỗ hổng từ đâu mà virut vào được hệ thống.

 

Form chính là điểm lưu ý nhất trong lập trình bởi rất dễ bị tấn công. Form có thể rất dễ bị spam. Để hạn chế spam, thông thường các lập trình viên thường nghĩ đến sử dụng mã Captcha để ngăn chặn.

Captcha là gì?

  • Là những mã dưới dạng ảnh hoặc kết thúc một hành động chính xác (như chọn ảnh, kéo thả, dê chuột). Đây là những mã chỉ con người làm được như nhìn hoặc phải suy nghĩ, phải hành động.. còn các bot tự động khó giải mã.

Nhược điểm của Captcha?

  • Gây ức chế cho người dùng.

Giải pháp là gì?

  • Hạn chế dùng Captcha. Chỉ nên bật captcha trong trường hợp thao tác lần 2 trong thời gian ngắn trở đi hoặc các giải pháp khác không còn hiệu quả.
  • Chặn những Ip nhập nhiều dữ liệu trong time ngắn.
  • Chặn những cách thức tấn công giống nhau. Ví dụ nội dung có đường link, số điện thoại ngoài Việt Nam.

15. Bảo mật các thư mục

Khi gõ đường dẫn các thư mục, cần có thông báo hoặc chặn việc hiện thị các file, các folder trong thư mục đó. Lỗi này xảy ra rất nhiều như hình dưới đây.

Các thư mục cần được bảo vệ. Khi theo đường dẫn này không được để lộ các thông tin bên trong.

 

Bảo mật folder không được hiển thị các file
Không bảo mật folder dẫn đến lộ file bên trong

Website có thể có Folder chứa thư viện bảo mật như video, hình ảnh, tài liệu... Việc để lộ ra đường dẫn chứa có thể hacker sẽ tìm được dữ liệu quan trọng trên website. Nếu lộ thêm lỗi số 15 ở trên nữa thì sẽ mất sạch dữ liệu.

Giải pháp:

  • Khi lưu trữ thư viện, cũng rename luôn tên thư mục theo hướng khó đoán. VD: folder/duong_dan_ma_hoa/ngay_up/{files chứa}
  • Mã hóa dữ liệu trước khi export cho người dùng. Người dùng chỉ nhận được file và tên file. 
  • Bổ sung giải pháp xử lý tại lỗi 15

Các giải pháp này cần đội ngũ kỹ thuật có chuyên môn tốt.

Các thư mục, các file được cấp quyền tối thiểu để bảo mật tối đa. Nhiều kỹ thuật thường để Full quyền 777 dẫn đến khi hacker tấn công vào, có quyền điều khiển, chỉnh sửa cả hệ thống. Do vậy rủi ro là rất lớn.

Riêng với wordpress, hãy chặn việc cho phép tự động nâng cấp bởi có thể tạo kẽ hở không cần thiết. Khi nào cần nâng cấp hãy chủ động mở ra, thao tác xong rồi đóng lại.

 

Đại đa số các đối tác kỹ thuật bỏ qua bước này, thường không mã hóa code trước khi up lên server. Rủi ro rất lớn khi server bị tấn công, code website của  bạn có thể sẽ được giao bán trên mạng.

Giải pháp:

  • Mã hóa trước khi đưa lên server
  • An toàn hơn, hãy mã hóa theo domain
  • Cài key trước khi mã hóa. Nếu hacker có lấy về cũng không chạy được

 

Thư mục upload là thư mục khá nhạy cảm, rất dễ bị tấn công nhất vì thường ở đây, ta cấu hình full quyền (755 hoặc 777). Nếu để lọt một file chứa virut lên đây mà không cấu hình chuẩn, có thể bị tấn công toàn site.

Giải pháp:

  • Các thư mục upload cần chặn phương thức “Chạy”.
  • Ngoài ra cần thêm chặn các file được up lên thư mục này.

Một thói quen nguy hiểm của lập trình là thường tắt thông báo lỗi hoặc để ở chế độ cơ bản nên không fix được hết bug. Đến lúc chạy online, lỗi được ghi xuống log.

Rủi ro xảy ra:

  • Vừa gây chậm website
  • Vừa có thể tạo lỗ hổng khai thác.

Giải pháp: Bật full lỗi trong lúc lập trình nhưng full hạn chế trong lúc chạy thật.

Nhiều lập trình có thói quen show lỗi rất chi tiết, thậm chí là cả câu lệnh truy xuất dữ liệu chứa user và pass để fixbug. Tuy nhiên, điều này vô tình có thể gây lộ thông tin quan trọng và tạo kẽ hở cho hacker tấn công.

Giải pháp: Cấu hình lúc chạy thật thì  báo lỗi rất đơn giản hoặc chuyển qua dạng mã hóa.

 

IV. Bảo mật với người dùng

Các file người dùng upload cũng có thể là một kẽ hở để tấn công. Ví dụ một bức ảnh up lên nhưng sau bức ảnh có chứa virut. Nếu hệ thống không phát hiện ra thì có thể virut kích hoạt bất kì lúc  nào.

Giải pháp:

  • Hạn chế cho người dùng upload (trừ trường hợp phải có)

  • Kiểm soát chặt dữ liệu đầu vào: như giới hạn loại file được upload

  • Nên upload lên server khác: Nếu có sự cố thì dữ liệu của website cũng không bị ảnh hưởng

  • Check dữ liệu đầu vào bằng javascript (sơ bộ) trên Client.
  • Check lại một lần nữa trên server trước khi đưa vào cơ sở dữ liệu

  

V. GIẢI PHÁP BẢO MẬT VỚI SERVER

 

Cổng mặc định của các tiến trình rất dễ bị tấn công, truy quét.

Giải pháp:

  • Đổi các cổng mặc định của server như Cổng MySQL, cổng SSH… để tránh việc hacker soi ra.
  • Đồng thời chặn các giao thức quét Port như telnet…

Nhiều công ty đặt bảo mật cao cho kỹ thuật. Chỉ Ip công ty mới được truy xuất vào hệ thống. 

Sau khi đổi cổng xong, cần chặn tất các được phép truy cập vào. Chỉ limited một số IP từ bên đơn vị lập trình

 

Tường lửa vẫn là giải pháp hiệu quả để hạn chế các rủi ro tấn công vào server như DDos,  XSS, SQL injection, Buffer Overflow. Tường lửa sẽ tự động phân tích và ngăn chặn các truy vấn có nghi ngờ. 

Ngoài việc tường lửa chạy tự động, người dùng có thể cấu hình thêm cho bằng tay như chặn thêm IP,...

Tiết kiệm chi phí mà tìm nơi giá rẻ chất lượng kém có thể dẫn đến thiệt hại lớn về sau. Cần cân nhắc kỹ lưỡng:

  • Có sự cố, không ai support

  • Không khắc phục được sự cố nếu kỹ thuật yếu

  • Rủi ro ít ngăm: Bị mất dữ liệu cho chính nhân viên của bên thuê server chia sẻ ra ngoài 

Backup là vấn đề rất quan trọng với một website, bởi khi xảy ra sự cô mới cần dùng tới nó. 

Các bản backup phải đủ nhiều để khắc phục sự cố. VD phải có bản backup hàng tuần, hàng ngày, hàng tháng.

Đã có trường hợp sự cố xảy ra nhưng 2 tuần sau mới phát hiện. Nhưng mà chỉ có 1 bản backup ở tuần gần nhất. Lúc đó không còn cách nào khắc phục.

Có thể xây dựng hệ thông backup tự động cho hệ thống. 

Một số công cụ bảo mật website bạn có thể tìm hiểu thêm

1. SecurityHeaders.io:

Công cụ kiểm tra và báo cáo bảo mật website trực tuyến miễn phí (có thể kiểm tra cấu hình của một tên miền chính xác, CSP và HSTS đã bật…).

Công cụ phát hiện lỗ hổng bảo mật tự động, có thể phát hiện các lỗ hổng website cơ bản như SQL Injection, Cross-site Scripting (XSS), File Inclusion...

Chương trình quét mã bảo mật mã nguồn mở tiên tiến nhất cho việc kiểm tra các lỗ hổng website.

4. OWASP Xenotix XSS Exploit Framework:

Công cụ thử nghiệm tấn công để quét các lỗ hổng XSS trong ứng dụng web.

Đánh giá - Bình luận
0 bình luận, đánh giá về 29+ Giải pháp BẢO MẬT WEBSITE an toàn và hiệu quả

TVQuản trị viênQuản trị viên

Xin chào quý khách. Quý khách hãy để lại bình luận, chúng tôi sẽ phản hồi sớm

Trả lời.
Thông tin người gửi
Click vào đây để hiện ô bình luận
Nhấn vào đây để đánh giá
Thông tin người gửi
Liên hệ với chúng tôi
x

Tặng bạn 3 slideshow nếu đăng ký trong ngày hôm nay.

x
Nhập thông tin dưới để lấy mã nhanh
0.19543 sec| 2367.195 kb