Tại sao php có nhiều lỗ hổng như vậy?

PHP là một trong những ngôn ngữ lập trình được sử dụng rộng rãi nhất cho các ứng dụng phía máy chủ. Các dự án như WordPress, Drupal và Laravel sử dụng PHP và các ứng dụng dựa trên PHP chiếm hơn 77% trong tất cả các ứng dụng web

Nếu bạn đang sử dụng PHP trong cơ sở mã của mình, điều quan trọng là phải biết các lỗ hổng bảo mật phổ biến nhất và thực hiện các bước để giảm thiểu chúng. Vi phạm bảo mật có chi phí rất lớn vượt quá giới hạn cuối cùng, dẫn đến mất người dùng, mất danh tiếng và khả năng gây hại cho cơ sở mã của bạn cũng như cho người dùng và nhân viên của bạn. Trong bài viết này, bạn sẽ tìm hiểu về

  • Các mối đe dọa bảo mật PHP phổ biến
  • Cách giám sát ứng dụng PHP của bạn để biết các vấn đề bảo mật
  • Cách cải thiện bảo mật PHP tổng thể của bạn

TÍCH HỢP RELIC PHP MỚI

Bắt đầu theo dõi dữ liệu PHP của bạn ngay hôm nay

Cài đặt khởi động nhanh PHP Cài đặt khởi động nhanh PHP

Các mối đe dọa bảo mật PHP phổ biến

Chúng ta hãy xem một số lỗ hổng PHP phổ biến nhất mà bạn cần theo dõi. Đây không phải là danh sách đầy đủ và tin tặc thường xuyên tìm thấy các lỗ hổng bảo mật mới để khai thác

  • Tập lệnh chéo trang [XSS]. XSS liên quan đến việc kẻ tấn công đưa mã độc vào một trang. Khi người dùng truy cập trang đó, mã sẽ được thực thi trong trình duyệt của người dùng. Điều này có thể cho phép kẻ tấn công có quyền truy cập vào thông tin của người dùng và thậm chí có khả năng thực hiện các hành động từ tài khoản hoặc máy của người dùng. Bạn có thể giảm nguy cơ bị tấn công XSS bằng cách xác thực đầu vào của biểu mẫu cũng như mã hóa đầu ra, bao gồm việc dịch các ký tự đặc biệt [cụ thể là những ký tự thường được sử dụng trong các cuộc tấn công XSS] sang các ký tự khác. Một số khung công tác PHP như Laravel bao gồm các biện pháp bảo vệ tích hợp chống lại XSS. Một cách tiếp cận khác là sử dụng trình thoát HTML, giúp khử trùng đầu vào từ người dùng, ngăn chặn mã độc hại được thực thi
  • tiêm SQL. Với SQL injection, tin tặc chèn mã độc vào truy vấn SQL để có quyền truy cập vào cơ sở dữ liệu của bạn. Để ngăn chặn các cuộc tấn công SQL injection, bạn cần làm sạch đầu vào của người dùng trước khi nó được chuyển đến cơ sở dữ liệu. Bạn có thể chuyển đầu vào của người dùng vào các phương thức PHP như sanitize[] và filter_var[] để làm sạch. Bạn cũng nên sử dụng truy vấn được tham số hóa thay vì chuyển trực tiếp đầu vào của người dùng vào truy vấn SQL
  • Giả mạo yêu cầu chéo trang [CSRF]. Với một cuộc tấn công giả mạo yêu cầu trên nhiều trang web, cuộc tấn công này cố gắng lừa người dùng gửi yêu cầu làm thay đổi dữ liệu trên máy chủ của bạn. Ví dụ: kẻ tấn công có thể tạo một trang web chứa biểu mẫu trông giống với biểu mẫu đăng nhập cho trang web của bạn. Nếu người dùng gửi biểu mẫu cùng với thông tin đăng nhập của họ, kẻ tấn công có thể có quyền truy cập vào tài khoản của người dùng. Để bảo vệ chống lại các cuộc tấn công CSRF, bạn có thể thêm một mã thông báo duy nhất cho mỗi lần gửi biểu mẫu. Mã thông báo này thường được tạo bằng khả năng quản lý phiên của PHP. Sau đó, máy chủ có thể xác minh rằng mã thông báo hợp lệ trước khi xử lý yêu cầu. Bạn cũng nên sử dụng giao thức HTTPS cho tất cả các biểu mẫu và xác minh tiêu đề Người giới thiệu HTTP trên mỗi yêu cầu
  • chiếm quyền điều khiển phiên. Chiếm quyền điều khiển phiên, còn được gọi là cố định phiên, khai thác lỗ hổng trong cách PHP xử lý ID phiên. Theo mặc định, PHP chỉ cần tăng bộ đếm cho mỗi phiên mới. Tuy nhiên, kẻ tấn công có thể khai thác điều này bằng cách dự đoán ID tiếp theo. Điều này cho phép kẻ tấn công chiếm lấy phiên của người dùng và thực hiện các hành động độc hại. Bạn nên sử dụng phương pháp an toàn hơn để tạo ID phiên, chẳng hạn như sử dụng số ngẫu nhiên. Bạn cũng có thể sử dụng Lớp cổng bảo mật [SSL] để mã hóa thông tin liên lạc giữa máy chủ và máy khách
  • tràn bộ đệm. Tràn bộ đệm xảy ra khi dữ liệu được ghi vào bộ đệm quá nhỏ hoặc không tồn tại. Điều này có thể dẫn đến hỏng dữ liệu hoặc làm hỏng ứng dụng của bạn, dẫn đến ngừng hoạt động. Kẻ tấn công có thể khai thác lỗi tràn bộ đệm để đưa mã độc vào ứng dụng hoặc gây ra các cuộc tấn công từ chối dịch vụ. Bạn có thể giảm thiểu rủi ro bằng cách đảm bảo rằng bộ đệm của bạn có kích thước phù hợp và được kiểm tra giới hạn trước khi ghi dữ liệu vào chúng. Bạn cũng nên sử dụng các hàm an toàn để tránh tràn bộ đệm, chẳng hạn như hàm strncpy[] của PHP
  • Từ chối dịch vụ [DoS] và Từ chối dịch vụ phân tán [DDoS]. Cả hai cuộc tấn công DoS và DDoS đều được thiết kế để làm ngập hệ thống của bạn với các yêu cầu, sử dụng hết tài nguyên ứng dụng của bạn và gây ra sự cố ngừng hoạt động. Các cuộc tấn công từ chối dịch vụ phân tán phức tạp hơn vì kẻ tấn công sử dụng mạng máy tính bị nhiễm, còn được gọi là botnet, để thực hiện cuộc tấn công. Các cuộc tấn công DDoS có thể rất khó chống lại vì chúng có thể tạo ra một lượng lớn lưu lượng truy cập. Các cuộc tấn công có thể xảy ra ở lớp cơ sở hạ tầng hoặc lớp ứng dụng. Để bảo vệ chống lại DDoS, trước tiên bạn cần giảm thiểu các điểm tấn công có thể xảy ra, chẳng hạn như các cổng hoặc giao thức không cần thiết. Sử dụng mạng phân phối nội dung và bộ cân bằng tải cũng có thể giúp giảm diện tích bề mặt dễ bị tổn thương của ứng dụng của bạn. Để xử lý các cuộc tấn công DoS và DDoS khi chúng xảy ra, bạn nên sử dụng một công cụ giám sát như New Relic để cảnh báo cho các nhóm của mình về các số liệu như lưu lượng truy cập tăng đột ngột và đáng ngờ hoặc khả năng xử lý yêu cầu của ứng dụng bị giảm. Bạn cũng có thể sẽ thấy tình trạng chậm lại hoặc tạm dừng đáng kể trong thời gian xử lý yêu cầu của người dùng. Khả năng linh hoạt để tăng dung lượng máy chủ cũng như dung lượng mạng [ví dụ: với CDN] có thể giúp giảm thiểu các loại tấn công này. Bạn cũng có thể triển khai giới hạn tốc độ để ngăn lưu lượng truy cập quá lớn áp đảo máy chủ của mình
  • Bẻ khóa mật khẩu. Tin tặc có thể bẻ khóa mật khẩu thông qua các cuộc tấn công vũ phu và tấn công từ điển. Bạn có thể giúp ngăn mật khẩu người dùng bị bẻ khóa bằng cách yêu cầu mật khẩu dài hơn với các ký tự đặc biệt bổ sung và cũng bao gồm các khuyến nghị hoặc yêu cầu cập nhật mật khẩu thường xuyên. Đối với nhân viên của bạn, các yêu cầu của bạn phải nghiêm ngặt hơn và bạn cũng nên bao gồm xác thực đa yếu tố để kẻ tấn công không thể xâm nhập vào tài khoản chỉ bằng một mật khẩu
  • Người trung gian [MitM]. Trong một cuộc tấn công MitM, kẻ tấn công chặn liên lạc giữa hai bên, để nghe trộm liên lạc, thao túng dữ liệu được trao đổi hoặc cả hai. Cookie phiên PHP là một lỗ hổng có thể dẫn đến các phiên người dùng bị chiếm quyền điều khiển và các cuộc tấn công MitM. Lỗ hổng bao gồm tệp từ xa [RFI] của PHP cũng có thể bị khai thác để đưa mã độc vào ứng dụng PHP. Bạn có thể bảo vệ chống lại các cuộc tấn công MitM bằng cách xác thực tất cả dữ liệu nhập của người dùng và thực hiện các bước để bảo mật đúng cách tất cả các cookie. Điều quan trọng nữa là tất cả các thông tin liên lạc phải được gửi qua HTTPS

Cách cải thiện bảo mật PHP tổng thể của bạn

Chúng tôi đã đề cập đến một số cách tiếp cận bảo mật cơ bản cho từng loại tấn công, nhưng hãy xem xét kỹ hơn về việc cải thiện bảo mật cho ứng dụng PHP của bạn. Chúng tôi chỉ có thể đề cập đến rất nhiều điều, vì vậy hãy lưu ý rằng có nhiều điều bạn có thể và nên làm để bảo mật ứng dụng PHP của mình ngoài danh sách này. Để có danh sách toàn diện hơn về các phương pháp mã hóa an toàn, áp dụng cho tất cả các ngôn ngữ lập trình bao gồm PHP, hãy xem Hướng dẫn tham khảo nhanh về phương pháp mã hóa an toàn của OWASP

  • Tuân thủ các phương pháp hay nhất về mã hóa thiết kế an toàn. Các nhóm kỹ thuật của bạn nên tập trung vào việc xây dựng các ứng dụng an toàn từ đầu. Điều này bao gồm các nguyên tắc như ít đặc quyền nhất, nghĩa là chỉ cung cấp cho người dùng đủ đặc quyền truy cập để thực hiện các hành động cần thiết trong ứng dụng của bạn. Bằng cách đó, ngay cả khi tài khoản của người dùng bị xâm phạm, những kẻ tấn công sẽ có quyền truy cập hạn chế vào ứng dụng của bạn
  • Giả định rằng các cuộc tấn công sẽ xảy ra và chuẩn bị sẵn sàng cho chúng. Đây là một nguyên tắc khác của thực tiễn tốt nhất về an toàn theo thiết kế. Giả định rằng các cuộc tấn công có thể và sẽ xảy ra. Làm như vậy, bạn sẽ không bị mất cảnh giác. Điều này cũng bao gồm sự chuẩn bị đầy đủ, bao gồm đào tạo nhóm, thiết lập các giao thức và nguyên tắc hoạt động đối với các vi phạm và ngừng hoạt động bảo mật, đồng thời có các ngày trò chơi mô phỏng các cuộc tấn công để chuẩn bị tốt hơn cho các nhóm của bạn đối phó với các cuộc tấn công thực sự khi chúng xảy ra
  • Sử dụng lưu trữ an toàn. Không phải máy chủ nào cũng cung cấp bảo mật—hãy cân nhắc sử dụng dịch vụ lưu trữ cung cấp CDN [để bảo vệ chống lại các cuộc tấn công DoS và DDoS], tường lửa [để ngăn chặn các cuộc tấn công trái phép] và chứng chỉ SSL [để xác minh trang web của bạn và ngăn chặn những kẻ tấn công tạo các bản sao độc hại của trang web của bạn. ]
  • Làm cho hệ thống của bạn có khả năng chịu lỗi. Thiết kế chịu lỗi có nghĩa là hệ thống của bạn có thể xử lý các đột biến bất ngờ trong hoạt động và mức sử dụng. Những đột biến này có thể xảy ra vì một số lý do, bao gồm các cuộc tấn công DoS và DDoS. Điều này có thể bao gồm việc sử dụng mạng phân phối nội dung để đảm bảo rằng người dùng vẫn có thể truy cập nội dung ngay cả khi bị tấn công hoặc có thể đòi hỏi phải có thêm không gian máy chủ hoặc tính linh hoạt trong đám mây để mở rộng quy mô dịch vụ trong khi bị tấn công. Ngược lại, bạn cũng có thể triển khai giới hạn tốc độ khi cần để giảm thiểu tác động của các cuộc tấn công
  • Tiến hành kiểm toán bảo mật. Bạn nên định kỳ đánh giá tính bảo mật và lỗ hổng của hệ thống. Điều này bao gồm chẩn đoán bảo mật, đánh giá cấu hình và môi trường hệ thống của bạn cũng như kiểm tra mã của bạn. Quản lý lỗ hổng Relic mới cho phép bạn đánh giá tất cả các lỗ hổng của ứng dụng của mình ở một nơi, bất kỳ lúc nào
  • Giám sát hoạt động trong ứng dụng của bạn. Bạn có thể sử dụng một công cụ hiệu suất ứng dụng như New Relic để theo dõi các số liệu chính có thể bị ảnh hưởng nặng nề bởi các cuộc tấn công, bao gồm thông lượng và tỷ lệ giao dịch
  • Sử dụng tính năng bắt đầu nhanh của Lacework để theo dõi các vi phạm tuân thủ trong cơ sở hạ tầng đám mây của bạn. Lacework là một công cụ điều tra và phát hiện vi phạm cho cơ sở hạ tầng đám mây của bạn. Nhiều ứng dụng PHP, đặc biệt là những ứng dụng lớn hơn, dựa trên cơ sở hạ tầng dựa trên đám mây. Nếu điều này áp dụng cho ứng dụng của bạn, hãy cài đặt bắt đầu nhanh New Relic Lacework để bao gồm các trang tổng quan nhằm phát hiện sự bất thường và vi phạm tuân thủ

TÍCH HỢP LENWORK RELIC MỚI

Bắt đầu theo dõi bảo mật đám mây ngay hôm nay

Cài đặt khởi động nhanh Lacework Cài đặt khởi động nhanh Lacework

  • Thiết lập cảnh báo cho ngưỡng hiệu suất quan trọng. Thiết lập cảnh báo trên các công cụ giám sát và bảo mật của bạn để nhóm của bạn được thông báo về hoạt động đáng ngờ nhanh nhất có thể
  • Bảo vệ cơ sở dữ liệu của bạn và sử dụng tham số hóa. Có nhiều bước bạn nên thực hiện để bảo mật cơ sở dữ liệu của mình. Một trong những điều quan trọng nhất—và cơ bản—là làm sạch đầu vào của người dùng thông qua việc sử dụng tham số hóa

    Đây là một ví dụ về truy vấn SQL không an toàn không sử dụng tham số hóa

    SELECT * FROM users WHERE name = '{$name}'

    Tin tặc có thể nhập một câu lệnh SQL độc hại để cơ sở dữ liệu của bạn đọc đầu vào $name dưới dạng lệnh và thực thi mã. Điều đó có thể bao gồm các lệnh thu thập thông tin cá nhân hoặc thậm chí cập nhật hoặc hủy các hàng trong cơ sở dữ liệu của bạn

    Đây là một ví dụ về truy vấn được tham số hóa trong MySQL

    "SELECT name FROM users WHERE name = @name";

    MySQL sử dụng @ để xác định một tham số. Các câu lệnh SQL không thể được tham số hóa, do đó, người dùng độc hại không thể chuyển một câu lệnh độc hại thông qua một tham số, làm cho nó an toàn khỏi việc tiêm SQL

    Nếu bạn sử dụng Laravel, bạn cũng có thể sử dụng Eloquent ORM để dễ dàng tạo các truy vấn được tham số hóa. Đây là một ví dụ

    $user = DB::table['users']->where['name', $name]->get[];

    Ở đây, $name được chuyển vào dưới dạng tham số bằng cách sử dụng mệnh đề where[]

Ngăn chặn lỗ hổng bảo mật với New Relic

Bằng cách chủ động giám sát hiệu suất và bảo mật của ứng dụng, bạn có thể giảm thiểu các cuộc tấn công khi chúng đang diễn ra—hoặc thậm chí ngăn chặn chúng trước khi chúng xảy ra

Relic mới bao gồm tính năng quản lý lỗ hổng, giám sát các lỗ hổng mở trong ứng dụng của bạn và cho phép bạn theo dõi, phân loại và liên lạc về các lỗ hổng đó với nhóm của mình. Hình ảnh tiếp theo hiển thị bảng điều khiển quản lý lỗ hổng trong New Relic

Giám sát hiệu suất ứng dụng [APM] cũng là một phần quan trọng trong lập trường bảo mật chủ động. Bạn có thể bắt đầu với khởi động nhanh PHP chỉ trong vài phút. Quickstart bao gồm một bảng điều khiển với các chỉ số hiệu suất chính bao gồm tỷ lệ giao dịch, tỷ lệ lỗi và thông lượng. Bạn sẽ tự động nhận được thông báo khi giao dịch web mất quá nhiều thời gian hoặc thông lượng ứng dụng của bạn quá thấp. Cả hai chỉ báo này có thể là dấu hiệu của lỗi trong quá trình phát triển—hoặc hệ thống của bạn đang bị tấn công nhắm mục tiêu. Bạn cũng có thể thiết lập cảnh báo của riêng mình trên nhiều loại chỉ số để nhóm của bạn được thông báo về các cuộc tấn công trước khi chúng áp đảo ứng dụng của bạn. Hình ảnh tiếp theo hiển thị bảng điều khiển Relic mới với các số liệu từ ứng dụng PHP, bao gồm tỷ lệ lỗi và thông lượng

Tại sao PHP rất dễ bị tổn thương?

Cơ sở người dùng lớn và cộng đồng tích cực khiến PHP dễ bị tấn công liên tục và các mối đe dọa bảo mật. Nghiên cứu cho thấy PHP có tỷ lệ mắc lỗi bảo mật cao nhất, khiến nó trở thành con mồi lý tưởng cho tội phạm mạng. Ngôn ngữ này có các lỗ hổng ở cấp độ ứng dụng khiến nó dễ bị tấn công bằng mã độc.

Tại sao PHP không phải là ngôn ngữ an toàn?

+1, nhiều người nghĩ PHP là ngôn ngữ không an toàn vì rất nhiều mã không an toàn đã được viết bằng PHP. Điều này là do PHP có đường cong học tập ban đầu khá nhẹ, điều này tạo cơ hội cho các lập trình viên không an toàn tạo ra một số mã không an toàn

Tại sao JavaScript rất dễ bị tổn thương?

JavaScript dễ bị tấn công vì tin tặc và các tác nhân đe dọa khác dễ dàng nhập chuỗi truy vấn vào biểu mẫu để truy cập, đánh cắp hoặc làm nhiễm bẩn dữ liệu được bảo vệ. JavaScript is the standard for the processing of personal information in client-side websites and applications.

Mã PHP có an toàn không?

Vì PHP quá phổ biến nên bảo mật PHP là điều cần thiết và số lượng ứng dụng PHP dễ bị tấn công là rất lớn. Hầu hết các ứng dụng web PHP chia sẻ các phần mã hoặc tập lệnh với các ứng dụng web khác. Nếu đoạn mã được chia sẻ bị phát hiện là dễ bị tổn thương thì tất cả các ứng dụng đang sử dụng nó cũng dễ bị tổn thương.

Chủ Đề