Một số quy tắc bảo mật website cơ bản

Bạn có thể nghĩ rằng trang web của mình chẳng có gì đáng để hack cả. Nhưng thực tế bất kỳ trang web cũng đều có nguy cơ bị xâm phạm. Khi website có lỗ hổng, hacker dễ dàng xâm nhập, tấn công và khai thác dữ liệu khiến website bị nhiễm độc gây nguy hiểm không chỉ cho chủ sở hữu trang web mà cho cả những khách truy cập. Phần lớn các vi phạm bảo mật trang web không phải là để đánh cắp dữ liệu hoặc phá hoại bố cục trang web, mà là sử dụng máy chủ của trang để chuyển tiếp email spam hoặc thiết lập máy chủ web tạm thời, thông thường để phục vụ các file bất hợp pháp. Các máy bị xâm nhập có thể bị biến thành một phần của mạng botnet, để đào Bitcoin, hoặc dùng ransomware tấn công nạn nhân.

Một số quy tắc bảo mật cơ bản cho website
Ảnh minh họa: Internet

Sau khi website đã được khử độc, nếu quản trị viên vẫn chủ quan không quan tâm đến các lỗ hỗng này thường xuyên thì website vẫn sẽ dễ dàng bị nhiễm độc trở lại bất cứ lúc nào. Để ngăn chặn điều này xảy ra, cần có những phương pháp thích hợp để bảo vệ máy chủ web cũng như máy tính của quản trị viên khi kết nối với tài khoản máy chủ.

Cách đơn giản nhất để bảo vệ website là đảm bảo an toàn cho website trước những kẻ xấu. Nhưng khi tìm hiểu về các lỗ hổng bảo mật web, bạn sẽ phải đối mặt với những khái niệm và giải pháp phức tạp. Hiểu được điều đó, Quantrimang.com đã tổng hợp những mẹo đơn giản, cơ bản nhưng hiệu quả để giúp bạn cải thiện bảo mật cho website của mình. Một vài trong số đó là lời khuyên của Marta Janus, Chuyên gia nghiên cứu an ninh mạng, Kaspersky Lab.

Sử dụng mật khẩu mạnh

Thoạt nghe, quy tắc này khá bình thường nhưng sử dụng mật khẩu mạnh là nền tảng cơ bản giúp tăng cường bảo mật cho hệ thống máy chủ. Mật khẩu không chỉ bắt buộc thay đổi sau khi xảy ra sự cố mà cần phải thay đổi thường xuyên, tốt nhất là định kỳ mỗi tháng một lần.

Một số quy tắc bảo mật cơ bản cho website

Mật khẩu là cửa ngõ đầu tiên dẫn đến nguồn dữ liệu nhạy cảm - (Ảnh: Internet)

Một mật khẩu đủ mạnh cần đáp ứng được các tiêu chí cơ bản. Mật khẩu an toàn phải được tích hợp giữa chữ, số và các ký tự đặc biệt nhưng phải đảm bảo dễ nhớ để không phải ghi chú lại mật khẩu này vào sổ hay máy tính, không sử dụng cùng một mật khẩu cho nhiều tài khoản khác nhau như email, tài khoản ngân hàng,… Người dùng có thể tham khảo thêm các tiêu chí cho một mật khẩu mạnh.

Liên tục cập nhật

Để nâng cao mức độ bảo mật, người dùng cần phải cập nhật website của mình thường xuyên, đặc biệt theo dõi thông tin phiên bản mới nếu đang dùng các phần mềm web nguồn mở (CMS, portal, forum...).

Tất cả các phần mềm mà người sử dụng quản lý bằng tài khoản máy chủ phải là phiên bản mới nhất và tất cả các bản vá bảo mật cần phải được áp dụng ngay sau khi nó được phát hành. Điều này sẽ giảm nguy cơ một cuộc tấn công nhằm vào việc khai thác dữ liệu. Danh sách các lỗ hổng thường bị tấn công có thể xem tại đây.

Tạo các bản sao lưu

Một bản sao lưu tất cả các nội dung của máy chủ không bị "nhiễm độc" chắc chắn sẽ giúp người dùng tiết kiệm rất nhiều thời gian và công sức khi khôi phục. Một bản sao gần nhất sẽ rất hữu ích trong việc giải quyết các vấn đề phát sinh cũng như trong trường hợp máy chủ hoặc trang web bị nhiễm độc.

Quét tập tin thường xuyên

Quét ngay cả khi không có dấu hiệu bị nhiễm độc nào được tìm thấy. Đây là một thao tác rất hữu ích để bảo vệ website, quét tất cả các tập tin trên máy chủ trong một thời gian nhất định ít nhất là một lần.

Quan tâm đến bảo mật máy tính

Rất nhiều malware độc hại tấn công vào các trang web và được phát tán bằng cách lây nhiễm vào các máy tính. Vì vậy, vấn đề an ninh của máy chủ chứa trang web là một trong những khía cạnh quan trọng nhất trong việc bảo mật website. Giữ cho máy chủ luôn trong tình trạng an toàn và không bị nhiễm độc sẽ nâng cao mức độ an toàn cũng như tránh được sự tấn công của các malware.

Tăng cường mức độ bảo mật của máy chủ

Nếu sở hữu hệ thống máy chủ, người dùng cần chú ý đến cấu hình của máy để bảo đảm mức độ an toàn nhất có thể. Hoạt động để tăng cường bảo mật máy chủ gồm những phần sau:

  • Loại bỏ tất cả các phần mềm không sử dụng
  • Vô hiệu hóa tất cả các dịch vụ và module không cần thiết
  • Thiết lập chính sách phù hợp cho người dùng và các nhóm
  • Thiết lập quyền truy cập/hạn chế truy cập vào các tập tin và thư mục nhất định
  • Vô hiệu hóa việc duyệt thư mục trực tiếp
  • Thu thập các tập tin ghi nhận hoạt động, thường xuyên kiểm tra các hoạt động đáng ngờ
  • Sử dụng mã hóa và các giao thức an toàn

Yếu tố con người vẫn đóng vai trò quan trọng nhất

Theo ông Jimmy Low, chuyên gia bảo mật khu vực Đông Nam Á thuộc Kaspersky Lab trả lời phỏng vấn của Nhịp Sống Số cho biết: "Mỗi hệ thống mạng đều có những vấn đề và điểm yếu riêng. Tuy nhiên, yếu điểm quan trọng nhất là yếu tố con người. Người quản trị mạng phải không ngừng nâng cao, học hỏi thêm kiến thức mới, tăng cường nhận thức về các mối đe dọa và bảo mật nhằm kịp thời nhận ra các lỗ hổng về kỹ thuật, tránh mắc phải các sai lầm trong công tác quản trị mạng".

Ông Jimmy cho rằng bất kỳ kỹ sư nào cũng có thể phạm phải sai lầm trong giai đoạn khởi nghiệp do thiếu kinh nghiệm và lời khuyên cho các kỹ sư trẻ rằng "đừng ngại học hỏi từ người đi trước, nếu các bạn không học hỏi từ người có kinh nghiệm và từ sai lầm, các bạn khó có thể phát triển bản thân trong nghề nghiệp".

Cảnh giác với SQL injection

SQL injection

Các cuộc tấn công SQL injection là khi kẻ tấn công sử dụng trường mẫu web hoặc tham số URL để có quyền truy cập hoặc thao tác cơ sở dữ liệu của nạn nhân. Khi sử dụng Transact SQL tiêu chuẩn, thật dễ dàng chèn code giả mạo vào truy vấn của người dùng, từ đó thay đổi bảng, lấy thông tin và xóa dữ liệu. Có thể dễ dàng ngăn chặn điều này bằng cách luôn sử dụng truy vấn được tham số hóa. Hầu hết các ngôn ngữ web đều có tính năng này và nó rất dễ thực hiện.

Xem xét truy vấn sau:

"SELECT * FROM table WHERE column = '" + parameter + "';"

Nếu kẻ tấn công thay đổi tham số URL thành ' or '1'='1 thì điều đó sẽ khiến truy vấn trông như sau:

"SELECT * FROM table WHERE column = '' OR '1'='1';"

'1' bằng '1', điều này sẽ cho phép kẻ tấn công thêm một truy vấn bổ sung vào cuối câu lệnh SQL và nó cũng sẽ được thực thi.

Bạn có thể sửa truy vấn này bằng cách tham số hóa nó một cách rõ ràng. Ví dụ, nếu đang sử dụng MySQLi trong PHP thì truy vấn sẽ trở thành:

$stmt = $pdo->prepare('SELECT * FROM table WHERE column = :value');
$stmt->execute(array('value' => $parameter));

Bảo vệ chống lại các cuộc tấn công XSS

Cross-site scripting (XSS) truyền JavaScript độc hại vào các trang web, sau đó chạy trong trình duyệt của người dùng và có thể thay đổi nội dung trang, hoặc đánh cắp thông tin để gửi lại cho kẻ tấn công. Ví dụ, nếu hiển thị nhận xét trên một trang mà không có xác thực, thì kẻ tấn công có thể gửi nhận xét chứa thẻ script và JavaScript, chạy trong mọi trình duyệt của người dùng khác và đánh cắp cookie đăng nhập của họ, sau đó chiếm quyền kiểm soát tài khoản của mọi người người dùng đã xem bình luận. Cần đảm bảo rằng người dùng không thể đưa nội dung JavaScript đang hoạt động vào các trang web.

Đây là mối quan tâm đặc biệt trong các ứng dụng web hiện đại, nơi các trang hiện được xây dựng chủ yếu từ nội dung người dùng và tạo HTML cũng được biên dịch bởi các framework front-end như Angular và Ember trong nhiều trường hợp. Các framework này cung cấp nhiều biện pháp bảo vệ chống lại XSS, nhưng việc kết hợp rendering máy chủ và máy khách cũng tạo ra các cách tấn công mới và phức tạp hơn, không chỉ có khả năng truyền JavaScript vào HTML hiệu quả, mà còn có thể truyền nội dung sẽ chạy code bằng cách chèn các lệnh Angular hoặc sử dụng các trình trợ giúp Ember.

Mấu chốt ở đây là tập trung vào cách nội dung do người dùng tạo. Điều này tương tự như bảo vệ chống lại SQL injection. Khi tạo HTML động, hãy sử dụng các hàm thực hiện rõ ràng các thay đổi đang tìm kiếm (ví dụ, sử dụng phần tử .setAttributionElement.textContent để trình duyệt tự động escape, thay vì cài đặt phần tử.innerHTML thủ công) hoặc sử dụng các hàm tự động escape khi thích hợp, thay vì nối chuỗi hoặc đặt nội dung HTML thô.

Một công cụ mạnh mẽ khác để chống lại XSS là chính sách bảo mật nội dung (Content Security Policy - CSP). CSP là header máy chủ có thể trả về, cho phép trình duyệt giới hạn cách thức và những gì JavaScript được thực thi trong trang, ví dụ như không cho phép chạy bất kỳ tập lệnh nào không được lưu trữ trên domain, không cho phép JavaScript nội tuyến hoặc vô hiệu hóa eval(). Mozilla có một hướng dẫn tuyệt vời với một số cấu hình ví dụ (tham khảo tại developer.mozilla.org/en-US/docs/Web/HTTP/CSP). Điều này làm cho các tập lệnh của kẻ tấn công khó hoạt động hơn, ngay cả khi kẻ tấn công có thể đưa chúng vào trang web.

Coi chừng các thông báo lỗi

Hãy cẩn thận với lượng thông tin bạn cung cấp trong các thông báo lỗi. Chỉ cung cấp các lỗi tối thiểu cho người dùng, để đảm bảo chúng không làm rò rỉ các bí mật có trên máy chủ (ví dụ, khóa API hoặc mật khẩu cơ sở dữ liệu). Đừng cung cấp đầy đủ chi tiết ngoại lệ vì những điều này có thể làm cho các cuộc tấn công phức tạp như SQL injection được thực hiện dễ dàng hơn nhiều. Giữ các lỗi chi tiết trong nhật ký máy chủ và chỉ hiển thị cho người dùng thông tin họ cần.

Xác thực cả hai phía

Xác thực

Xác thực phải luôn luôn được thực hiện cả trên trình duyệt và phía máy chủ. Trình duyệt có thể gặp các lỗi đơn giản như khi các trường bắt buộc điền bị để trống hay nhập văn bản vào trường chỉ cho điền số. Tuy nhiên, những điều này có thể được bỏ qua và nên đảm bảo việc kiểm tra các xác thực sâu hơn phía máy chủ. Vì không làm như vậy có thể dẫn đến mã hoặc tập lệnh độc hại được chèn vào cơ sở dữ liệu hoặc có thể gây ra kết quả không mong muốn trong trang web.

Tránh upload file

Cho phép người dùng upload file lên trang web có thể mang đến rủi ro lớn cho trang web, ngay cả khi chỉ đơn giản là thay đổi hình đại diện. Rủi ro nằm ở bất kỳ file nào được upload lên, dù trông có vẻ vô hại, nó có thể chứa một tập lệnh mà khi được thực thi trên máy chủ sẽ “phơi bày” hoàn toàn trang web.

Nếu upload file là điều bắt buộc thì cần phải cảnh giác với tất cả mọi thứ. Nếu cho phép người dùng upload lên hình ảnh, không thể chỉ dựa vào phần mở rộng file để xác minh đó là file hình ảnh vì chúng có thể dễ dàng bị giả mạo. Ngay cả việc mở file và đọc tiêu đề hoặc sử dụng các chức năng để kiểm tra kích thước hình ảnh cũng không thể tuyệt đối an toàn. Hầu hết các định dạng hình ảnh cho phép lưu trữ một phần bình luận có thể chứa code PHP được thực thi bởi máy chủ.

Vậy có thể làm gì để ngăn chặn điều này? Hãy ngăn người dùng thực thi bất kỳ file nào họ upload lên. Theo mặc định, các máy chủ web sẽ không cố thực thi các file có phần mở rộng hình ảnh, nhưng không thể chỉ dựa vào việc kiểm tra phần mở rộng file, vì một file có tên image.jpg.php có thể dễ dàng “lách luật”.

Một số tùy chọn là đổi tên file khi upload lên để đảm bảo phần mở rộng file chính xác hoặc thay đổi quyền của file, ví dụ, chmod 0666 để nó không thể thực thi được. Nếu sử dụng *nix, người dùng có thể tạo file .htaccess, chỉ cho phép truy cập đến một bộ file ngăn chặn việc sử dụng phần mở rộng kép được đề cập trước đó.

deny from all
<Files ~ "^\w+\.(gif|jpe?g|png)$">
order deny,allow
allow from all
</Files>

Cuối cùng, giải pháp được đề xuất là ngăn chặn hoàn toàn quyền truy cập trực tiếp vào các file được upload lên. Bằng cách này, mọi file được upload lên trang web được lưu trữ trong một thư mục bên ngoài webroot hoặc trong cơ sở dữ liệu dưới dạng blob. Nếu các file không thể truy cập trực tiếp, sẽ cần tạo một tập lệnh để tìm nạp các file từ thư mục riêng (hoặc trình xử lý HTTP trong .NET) và gửi chúng đến trình duyệt. Thẻ img hỗ trợ thuộc tính src không phải là URL trực tiếp đến hình ảnh, vì vậy thuộc tính src có thể trỏ đến tập lệnh phân phối file, cung cấp loại nội dung chính xác trong tiêu đề HTTP. Ví dụ:

<img src="/imageDelivery.php?id=1234" />

<?php
// imageDelivery.php

// Fetch image filename from database based on $_GET["id"]
...

// Deliver image to browser
Header('Content-Type: image/gif');
readfile('images/'.$fileName);

?>

Các nhà cung cấp dịch vụ lưu trữ web tốt đều xử lý cấu hình máy chủ cho bạn, nhưng nếu đang lưu trữ trang web trên máy chủ của riêng mình thì có vài điều cần kiểm tra.

Hãy đảm bảo có thiết lập tường lửa và tất cả các cổng không cần thiết đã bị chặn. Nếu có thể, hãy thiết lập DMZ (Demilitarised Zone) chỉ cho phép truy cập vào cổng 80443 từ bên ngoài. Mặc dù điều này có thể không thực hiện được nếu không có quyền truy cập vào máy chủ từ mạng nội bộ, vì sẽ cần mở các cổng để cho phép upload file lên và đăng nhập từ xa vào máy chủ qua SSH hoặc RDP.

Nếu cho phép các file được upload lên từ Internet, chỉ sử dụng các phương thức vận chuyển an toàn đến máy chủ của bạn như SFTP hoặc SSH.

Nếu có thể, cơ sở dữ liệu sẽ chạy trên một máy chủ khác với máy chủ web. Làm điều này có nghĩa là máy chủ cơ sở dữ liệu không thể được truy cập trực tiếp từ bên ngoài, chỉ có máy chủ web có thể truy cập nó, giảm thiểu rủi ro dữ liệu bị lộ.

Cuối cùng, đừng quên việc hạn chế quyền truy cập vật lý vào máy chủ.

Sử dụng HTTPS

HTTPS

HTTPS là một giao thức được sử dụng để cung cấp bảo mật qua Internet. HTTPS đảm bảo rằng người dùng đang nói chuyện với máy chủ mà họ mong đợi và không ai khác có thể chặn hoặc thay đổi nội dung họ đang thấy trong quá trình.

Nếu có bất cứ thông tin gì mà người dùng muốn riêng tư (như thẻ tín dụng và các trang đăng nhập, cũng như các URL gửi đến), thì chỉ nên sử dụng HTTPS để truyền thông tin. Ví dụ, một biểu mẫu đăng nhập sẽ đặt một cookie, được gửi cùng với mọi yêu cầu khác đến trang web mà người dùng đã thực hiện đăng nhập, sau đó được sử dụng để xác thực các yêu cầu đó. Kẻ tấn công đánh cắp điều này có thể giả mạo người dùng một cách hoàn hảo và chiếm quyền trong phiên đăng nhập. Để đánh bại các loại tấn công này, hãy sử dụng HTTPS cho toàn bộ trang web của mình.

Điều đó không còn khó khăn hay tốn kém như xưa. Let's Encrypt cung cấp các chứng chỉ hoàn toàn miễn phí và tự động, kích hoạt HTTPS và có các công cụ cộng đồng hiện có cho nhiều nền tảng và framework chung để tự động thiết lập điều này cho người dùng.

Đáng chú ý là Google đã thông báo rằng hãng sẽ tăng thứ hạng trong bảng xếp hạng tìm kiếm nếu sử dụng HTTPS (điều này cũng mang lại lợi ích SEO). HTTP không an toàn đang dần biến mất và bây giờ là lúc để nâng cấp.

Nếu đã sử dụng HTTPS, hãy thử xem xét việc thiết lập HTTP Strict Transport Security (HSTS), một header đơn giản để thêm vào phản hồi máy chủ nhằm ngăn chặn HTTP không an toàn hoạt động trên toàn bộ domain.

Thêm công cụ bảo mật trang web

Khi cho rằng mình đã làm tất cả những gì có thể thì đã đến lúc kiểm tra bảo mật trang web. Cách hiệu quả nhất để thực hiện việc này là thông qua việc sử dụng một số công cụ bảo mật trang web, thường được gọi là kiểm tra thâm nhập (viết tắt là pen testing).

Có rất nhiều sản phẩm thương mại và miễn phí hỗ trợ điều này. Chúng hoạt động trên cơ sở tương tự với tập lệnh của các tin tặc ở chỗ chúng kiểm tra tất cả các hoạt động khai thác và cố gắng tấn công trang web, bằng cách sử dụng một số phương pháp được đề cập trước đây như SQL Injection.

Một số công cụ miễn phí đáng xem xét là:

  • Netsparker.com (Phiên bản cộng đồng miễn phí và phiên bản dùng thử có sẵn). Thích hợp để kiểm tra SQL injection và XSS
  • OpenVAS.org: Tự nhận là trình quét bảo mật mã nguồn mở tiên tiến nhất. Thích hợp để kiểm tra các lỗ hổng đã biết (hơn 25.000). Nhưng có thể khó cài đặt và yêu cầu cài đặt máy chủ OpenVAS chỉ chạy trên *nix. OpenVAS là một nhánh của Nessus trước khi nó trở thành một sản phẩm thương mại nguồn đóng.
  • SecurityHeaders.com (kiểm tra trực tuyến miễn phí). Một công cụ để nhanh chóng báo cáo các tiêu đề bảo mật được đề cập ở trên (như CSP và HSTS), một domain đã được bật và định cấu hình chính xác.
  • Xenotix XSS Miningit Framework (xenotix.in). Một công cụ từ OWASP (Open Web Application Security Project) bao gồm rất nhiều ví dụ về các cuộc tấn công XSS, người dùng có thể chạy để nhanh chóng xác nhận xem các đầu vào trang web có dễ bị tấn công trong Chrome, Firefox và IE hay không.

Kết quả từ các công cụ tự động có thể khiến bạn nản chí, vì chúng thể hiện rất nhiều vấn đề tiềm ẩn, hãy tập trung vào các vấn đề quan trọng trước tiên. Mỗi vấn đề được báo cáo thường đi kèm với một lời giải thích rõ ràng về lỗ hổng tiềm ẩn. Người dùng có thể sẽ thấy rằng một số vấn đề ở mức cảnh báo trung bình/thấp không phải là mối quan tâm đối với trang web.

Có một số cách bạn có thể làm để thử tấn công trang web của chính mình như thay đổi giá trị POST/GET. Một proxy gỡ lỗi có thể hỗ trợ tốt trong trường hợp này vì nó cho phép chặn các giá trị của yêu cầu HTTP giữa trình duyệt và máy chủ. Phần mềm Fiddler là một điểm khởi đầu tốt để thực hiện việc này.

Nếu website có trang chỉ hiển thị cho người dùng đã đăng nhập thì hãy thử thay đổi các tham số URL như ID người dùng hoặc giá trị cookie để cố gắng xem chi tiết của người dùng khác. Một lĩnh vực đáng thử nghiệm khác là các biểu mẫu, thay đổi các giá trị POST để cố gắng gửi code thực thi XSS hoặc upload lên tập lệnh phía máy chủ.

Mã hóa trang đăng nhập

Mã hóa

Hãy sử dụng mã hóa SSL trên các trang đăng nhập. SSL cho phép thông tin nhạy cảm như số thẻ tín dụng, số an sinh xã hội và thông tin đăng nhập được truyền một cách an toàn. Thông tin được nhập trên một trang được mã hóa sao cho nó vô nghĩa đối với bất kỳ bên thứ ba nào. Điều này giúp ngăn chặn tin tặc truy cập thông tin đăng nhập hoặc dữ liệu riêng tư khác.

Sử dụng máy chủ an toàn

Chọn một công ty lưu trữ web an toàn và có uy tín là rất quan trọng đối với việc bảo mật trang web. Hãy chắc chắn rằng máy chủ bạn chọn nhận biết được các mối đe dọa và có khả năng giữ an toàn cho trang web. Máy chủ cũng nên sao lưu dữ liệu đến máy chủ từ xa và có thể dễ dàng khôi phục trong trường hợp trang web bị hack. Hãy chọn một máy chủ cung cấp hỗ trợ kỹ thuật liên tục bất kể ngày đêm.

Giữ trang web “sạch sẽ”

Mỗi cơ sở dữ liệu, ứng dụng hoặc plugin trên trang web đều là điểm có thể khai thác trong mắt hacker. Người dùng nên xóa các file, cơ sở dữ liệu hoặc ứng dụng không còn được sử dụng khỏi trang web. Điều quan trọng là phải giữ cấu trúc file được tổ chức hợp lý để theo dõi các thay đổi và giúp xóa các file cũ dễ dàng hơn.

Thuê một chuyên gia bảo mật

Thuê chuyên gia

Phát triển mối quan hệ với một công ty cung cấp dịch vụ bảo mật có thể là cứu cánh trong việc bảo vệ trang web. Mặc dù người dùng có thể tự xử lý những việc nhỏ, nhưng có nhiều biện pháp bảo mật cần được xử lý bởi một chuyên gia. Các công ty cung cấp dịch vụ bảo mật có thể thường xuyên quét trang web để tìm lỗ hổng, thực hiện kiểm tra bảo mật trang web đầy đủ, theo dõi hoạt động độc hại và có mặt bất cứ khi nào có sự cố cần sửa chữa.

Người dùng phải luôn cảnh giác trong việc bảo vệ trang web và những lời khuyên thiết thực này chỉ là các phương pháp cơ bản nhất. Đừng bao giờ ngừng tìm kiếm các biện pháp bảo vệ cho trang web. Đừng để kẻ xấu chiến thắng!

Thứ Sáu, 22/02/2019 13:38
54 👨 14.682
0 Bình luận
Sắp xếp theo