9 Mẹo Bảo Mật Để Bảo Vệ Trang Web Của Bạn Khỏi Tin Tặc

Đặng Tiến Sĩ Tác giả:
Xuất bản: Chủ Nhật, 28 tháng 7, 2019 -

Lời khuyên chuyên nghiệp để tối ưu hóa bảo mật trang web của bạn và tránh các thảm họa hack.


Bạn có thể không nghĩ rằng trang web của bạn có bất cứ điều gì đáng bị hack, nhưng các trang web luôn bị xâm phạm. 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 của bạn hoặc gây rối với bố cục trang web của bạn , mà thay vào đó, cố gắng sử dụng máy chủ của bạn để chuyển tiếp email để spam hoặc để thiết lập một máy chủ web tạm thời, thông thường để phục vụ các tệp có tính chất bất hợp pháp . Các cách rất phổ biến khác để lạm dụng các máy bị xâm nhập bao gồm sử dụng máy chủ của bạn như một phần của mạng botnet hoặc khai thác Bitcoin. Bạn thậm chí có thể bị tấn công bởi ransomware.

Việc hack thường được thực hiện bởi các tập lệnh tự động được viết để truy quét internet nhằm cố gắng khai thác các vấn đề bảo mật trang web đã biết trong phần mềm. Dưới đây là chín lời khuyên hàng đầu của chúng tôi để giúp giữ cho bạn và trang web của bạn an toàn trực tuyến.

01. Luôn cập nhật phần mềm


Điều này có vẻ hiển nhiên, nhưng đảm bảo bạn giữ cho tất cả các phần mềm được cập nhật là rất quan trọng trong việc giữ an toàn cho trang web của bạn. Điều này áp dụng cho cả hệ điều hành máy chủ và bất kỳ phần mềm nào bạn có thể đang chạy trên trang web của mình, chẳng hạn như CMS hoặc diễn đàn. Khi lỗ hổng bảo mật trang web được tìm thấy trong phần mềm, tin tặc nhanh chóng tìm cách lạm dụng chúng.

Nếu bạn đang sử dụng giải pháp lưu trữ được quản lý thì bạn không cần phải lo lắng quá nhiều về việc áp dụng các cập nhật bảo mật cho hệ điều hành vì công ty lưu trữ nên quan tâm đến vấn đề này.

Nếu bạn đang sử dụng phần mềm của bên thứ ba trên trang web của mình như CMS hoặc diễn đàn, bạn nên đảm bảo rằng bạn nhanh chóng áp dụng bất kỳ bản vá bảo mật nào. Hầu hết các nhà cung cấp có một danh sách gửi thư hoặc nguồn cấp dữ liệu RSS chi tiết bất kỳ vấn đề bảo mật trang web. WordPress , Umbraco và nhiều CMS khác thông báo cho bạn về các bản cập nhật hệ thống có sẵn khi bạn đăng nhập.

Nhiều nhà phát triển sử dụng các công cụ như Composer, npm hoặc RubyGems để quản lý các phụ thuộc phần mềm của họ và các lỗ hổng bảo mật xuất hiện trong gói bạn phụ thuộc nhưng không chú ý đến là một trong những cách dễ nhất để bị loại bỏ. Đảm bảo bạn luôn cập nhật các phụ thuộc của mình và sử dụng các công cụ như Gemnasium để nhận thông báo tự động khi lỗ hổng được thông báo trong một trong các thành phần của bạn.

02. Coi chừng tiêm SQL


Các cuộc tấn công SQL SQL 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 bạn. Khi bạn sử dụng SQL Transact tiêu chuẩn, rất dễ dàng vô tình chèn mã lừa đảo vào truy vấn của bạn có thể được sử dụng để thay đổi bảng, nhận thông tin và xóa dữ liệu. Bạn có thể dễ dàng ngăn chặn điều này bằng cách luôn sử dụng các 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 này:

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

Nếu kẻ tấn công thay đổi tham số URL để chuyển vào 'hoặc' 1 '=' 1 thì điều này sẽ khiến truy vấn trông như thế này:

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

Vì '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 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 bạn đang sử dụng MySQLi trong PHP thì điều này sẽ trở thành:

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

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


Các cuộc tấn công kịch bản chéo trang (XSS) tiêm JavaScript độc hại vào các trang của bạn, sau đó chạy trong trình duyệt của người dùng của bạn 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 bạn 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, có thể 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ọ, cho phép cuộc tấn công 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. Bạ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 của mình.

Đây là một 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à trong nhiều trường hợp tạo HTML cũng được giải thích bởi các khung công tác mặt trước như Angular và Ember. Các khung này cung cấp nhiều biện pháp bảo vệ XSS, nhưng việc trộn kết xuất 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ỉ tiêm JavaScript vào HTML hiệu quả, mà bạn còn có thể tiêm nội dung sẽ chạy mã bằng cách chèn các lệnh Angular hoặc sử dụng Ember người giúp việc.

Chìa khóa ở đây là tập trung vào cách nội dung do người dùng tạo của bạn có thể thoát khỏi giới hạn mà bạn mong đợi và được trình duyệt diễn giải như một thứ khác với những gì bạn dự định. Điều này tương tự như bảo vệ chống lại SQL tiêm. Khi tự động tạo HTML, hãy sử dụng các hàm thực hiện rõ ràng các thay đổi bạn đang tìm kiếm (ví dụ: sử dụng phần tử.setAttribution và Element.textContent, sẽ được trình duyệt tự động thoát, thay vì cài đặt phần tử.innerHTML bằng tay) hoặc sử dụng các hàm trong công cụ tạo khuôn mẫu của bạn tự động thực hiện thoát 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 trong hộp công cụ của người bảo vệ XSS là Chính sách bảo mật nội dung (CSP). CSP là một tiêu đề mà máy chủ của bạn 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 miền của bạn, 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ụ. Đ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 chúng có thể đưa chúng vào trang của bạn.

04. Cảnh giác với các thông báo lỗi


Hãy cẩn thận với bao nhiêu thông tin bạn cung cấp trong các thông báo lỗi của bạn. Chỉ cung cấp các lỗi tối thiểu cho người dùng của bạn, để đảm bảo họ không rò rỉ bí mật có trên máy chủ của bạn (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 tiêm dễ dàng hơn nhiều. Giữ các lỗi chi tiết trong nhật ký máy chủ của bạn và chỉ hiển thị cho người dùng thông tin họ cần.

05. Xác thực cả hai bên


Xác nhận 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ư các trường bắt buộc trống và khi bạn nhập văn bản vào trường chỉ có số. Tuy nhiên, những điều này có thể được bỏ qua và bạn nên đảm bảo rằng bạn kiểm tra các xác thực và phía máy chủ xác thực sâu hơn vì không làm như vậy có thể dẫn đến mã độc hoặc mã script đượ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 của bạn.

06. Kiểm tra mật khẩu của bạn


Quảng cáo
Mọi người đều biết họ nên sử dụng mật khẩu phức tạp, nhưng điều đó không có nghĩa là họ luôn làm như vậy. Điều quan trọng là sử dụng mật khẩu mạnh cho khu vực quản trị trang web và máy chủ của bạn, nhưng cũng quan trọng không kém khi nhấn mạnh vào các thực hành mật khẩu tốt cho người dùng của bạn để bảo vệ tính bảo mật của tài khoản của họ.

Nhiều người dùng có thể không thích nó, việc thực thi các yêu cầu mật khẩu như tối thiểu khoảng tám ký tự, bao gồm cả chữ in hoa và số sẽ giúp bảo vệ thông tin của họ về lâu dài.

Mật khẩu phải luôn được lưu trữ dưới dạng giá trị được mã hóa, tốt nhất là sử dụng thuật toán băm một chiều như SHA. Sử dụng phương pháp này có nghĩa là khi bạn xác thực người dùng, bạn chỉ bao giờ so sánh các giá trị được mã hóa. Để bảo mật trang web thêm, nên sử dụng muối mật khẩu, sử dụng muối mới cho mỗi mật khẩu.

Trong trường hợp ai đó xâm nhập và đánh cắp mật khẩu của bạn, sử dụng mật khẩu băm có thể giúp hạn chế thiệt hại, vì việc giải mã chúng là không thể. Điều tốt nhất mà ai đó có thể làm là tấn công từ điển hoặc tấn công vũ phu, về cơ bản là đoán mọi kết hợp cho đến khi tìm thấy kết quả khớp. Khi sử dụng mật khẩu muối, quá trình bẻ khóa một số lượng lớn mật khẩu thậm chí còn chậm hơn vì mọi dự đoán phải được băm riêng cho mỗi mật khẩu muối + rất tốn kém.

Rất may, nhiều CMS cung cấp khả năng quản lý người dùng với rất nhiều tính năng bảo mật trang web được tích hợp, mặc dù một số cấu hình hoặc mô-đun bổ sung có thể được yêu cầu sử dụng mật khẩu muối (trước Drupal 7) hoặc để đặt cường độ mật khẩu tối thiểu. Nếu bạn đang sử dụng .NET thì nên sử dụng các nhà cung cấp thành viên vì chúng rất có thể định cấu hình, cung cấp bảo mật trang web sẵn có và bao gồm các điều khiển đọc để đăng nhập và đặt lại mật khẩu.

07. Tránh tải lên tập tin


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


Nếu bạn có một hình thức tải lên tập tin thì bạn cần phải đối xử với tất cả các tập tin với sự nghi ngờ lớn. Nếu bạn cho phép người dùng tải lên hình ảnh, bạn không thể dựa vào phần mở rộng tệp hoặc loại mime để xác minh rằng tệp là hình ảnh vì chúng có thể dễ dàng bị làm giả. Ngay cả việc mở tệp 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ể đánh lừa được. 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 mã PHP có thể được thực thi bởi máy chủ.

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

Một số tùy chọn là đổi tên tệp khi tải lên để đảm bảo mở rộng tệp chính xác hoặc thay đổi quyền của tệp, ví dụ: chmod 0666 để không thể thực thi được. Nếu sử dụng * nix, bạn có thể tạo tệp .htaccess (xem bên dưới) sẽ chỉ cho phép truy cập để đặt các tệp ngăn chặn cuộc tấn công 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 truy cập trực tiếp vào các tệp được tải lên hoàn toàn. Bằng cách này, bất kỳ tệp nào được tải lên trang web của bạn đều đượ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 tệp của bạn không thể truy cập trực tiếp, bạn sẽ cần tạo một tập lệnh để tìm nạp các tệp 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ẻ hình ảnh hỗ trợ thuộc tính src không phải là URL trực tiếp cho hình ảnh, vì vậy thuộc tính src của bạn có thể trỏ đến tập lệnh phân phối tệp của bạn, cung cấp cho bạn đặt 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);  
?>

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

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

Nếu bạn cho phép các tệp được tải 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 của bạn sẽ chạy trên một máy chủ khác với máy chủ web của bạn. 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ừ thế giới bên ngoài, chỉ có máy chủ web của bạn có thể truy cập nó, giảm thiểu rủi ro dữ liệu của bạn bị lộ.

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

08. Sử dụng 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 bạn có bất cứ điều gì mà người dùng của bạn có thể muốn riêng tư, thì chỉ nên sử dụng HTTPS để phân phối. Điều đó tất nhiên có nghĩa là thẻ tín dụng và các trang đăng nhập (và các URL họ gửi đến) nhưng thông thường cũng nhiều hơn trang web của bạn. Ví dụ, một biểu mẫu đăng nhập sẽ đặt cookie, được gửi cùng với mọi yêu cầu khác đến trang web của bạn mà người dùng đã đăng nhập thực hiện và đượ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 sẽ có thể bắt chước người dùng một cách hoàn hảo và chiếm lấy phiên đăng nhập của họ. Để đánh bại các loại tấn công này, bạn hầu như luôn muốn 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 Encrypt cung cấp các chứng chỉ hoàn toàn miễn phí và tự động, bạn sẽ cần bật HTTPS và có các công cụ cộng đồng hiện có cho nhiều nền tảng và khung chung để tự động thiết lập điều này cho bạn.

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

Đã sử dụng HTTPS ở mọi nơi? Đi xa hơn và xem xét việc thiết lập HTTP Strict Transport Security (HSTS), một tiêu đề dễ dàng bạn có thể thêm vào phản hồi máy chủ của mình để không cho phép HTTP không an toàn cho toàn bộ miền của bạn.

09. Nhận công cụ bảo mật trang web


Khi bạn nghĩ rằng bạn đã làm tất cả những gì bạn có thể thì đã đến lúc kiểm tra bảo mật trang web của bạn. 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 hoặc kiểm tra bút viết tắt.

Có rất nhiều sản phẩm thương mại và miễn phí để hỗ trợ bạn điều này. Chúng hoạt động trên cơ sở tương tự như các tin tặc kịch bản ở chỗ chúng kiểm tra tất cả các khai thác và cố gắng thỏa hiệp trang web của bạn 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:

Netsparker (Phiên bản cộng đồng miễn phí và phiên bản dùng thử có sẵn). Tốt để kiểm tra SQL SQL và XSS
OpenVAS Tuyên bố là trình quét bảo mật nguồn mở tiên tiến nhất. Tốt để kiểm tra các lỗ hổng đã biết, hiện đang quét hơn 25.000. Nhưng nó có thể khó thiết lập 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.io (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à một tên miền đã kích hoạt và được định cấu hình chính xác.
Xenotix XSS Khung khai thác Một công cụ từ OWASP (Dự án bảo mật ứng dụng web mở) bao gồm rất nhiều ví dụ tấn công XSS, bạn có thể chạy để nhanh chóng xác nhận xem các đầu vào trang web của bạn có dễ bị tấn công trong Chrome, Firefox và IE hay không.
Quảng cáo
Các kết quả từ các bài kiểm tra tự động có thể gây nản lòng, vì chúng thể hiện rất nhiều vấn đề tiềm năng. Điều quan trọng là tập trung vào các vấn đề quan trọng đầu 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 tốt về lỗ hổng tiềm năng. Bạn có thể sẽ thấy rằng một số vấn đề trung bình / thấp không phải là mối quan tâm đối với trang web của bạn.

Có một số bước tiếp theo bạn có thể thực hiện để cố gắng thỏa hiệp trang web của mình bằng cách thay đổi giá trị POST / GET. Một proxy gỡ lỗi có thể hỗ trợ bạn ở đây vì nó cho phép bạn chặn các giá trị của yêu cầu HTTP giữa trình duyệt của bạn và máy chủ. Một ứng dụng phần mềm miễn phí phổ biến được gọi là Fiddler là một điểm khởi đầu tốt.

Vì vậy, những gì bạn nên cố gắng thay đổi theo yêu cầu? Nếu bạn có cá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 mã để thực hiện XSS hoặc tải lên tập lệnh phía máy chủ.

Thích
Bình luận

Bài Viết Có Thể Xem

THÔNG BÁO

Biên tập nội dung: Đặng Tiến Sĩ
Sĩ Ben IT Blogger giữ bản quyền nội dung trên website này
Chỉ được phát hành lại nội dung khi có sự đồng ý của chủ sở hữu
Mọi thư từ góp ý vui lòng gửi về địa chỉ dangtiensi.vn@gmail.com

Đóng Liên hệ