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