Một số thống kê về bảo mật php là gì?

PHP cho đến nay là ngôn ngữ lập trình phía máy chủ được sử dụng rộng rãi nhất. Các mối đe dọa bảo mật xung quanh các ứng dụng PHP đã được đưa tin vì PHP chiếm hơn 80% internet với hơn 10 triệu trang web được xây dựng. Không có gì ngạc nhiên khi với lượng sử dụng lớn như vậy, PHP cũng là một trong những ngôn ngữ được nhắm mục tiêu và khai thác nhiều nhất, như thể hiện trong số liệu thống kê dưới đây

nguồn. https. // thông tin chi tiết. xúc xắc. com/2019/11/27/lập trình-ngôn ngữ-vulnerabilities/

Một trong những lý do chính khiến các ứng dụng PHP thường dễ bị tổn thương là do các thực hành mã hóa an toàn không được tuân thủ trong quá trình phát triển PHP trên toàn bộ ứng dụng. Các lỗ hổng phổ biến như SQL injection, Cross-site scripting, data tampering, v.v. , có thể tránh được chỉ bằng cách thêm một vài dòng mã để bảo vệ ứng dụng và dữ liệu máy chủ

Trong bài viết này, chúng tôi sẽ đề cập đến các lĩnh vực mà nhà phát triển web cần tập trung vào để bảo mật tốt hơn các ứng dụng PHP của họ

Luôn cập nhật PHP

Đầu tiên và quan trọng nhất, các nhà phát triển nên sử dụng bản phát hành ổn định mới nhất của PHP trong các ứng dụng của họ. Điều này là do các bản phát hành mới thường chứa các bản vá bảo mật và bản sửa lỗi cho các lỗ hổng bảo mật đã biết có thể bị kẻ thù khai thác nếu không được cập nhật kịp thời

Hạn chế các tệp nhạy cảm

Khi triển khai ứng dụng PHP trên máy chủ trực tiếp, hãy đảm bảo di chuyển tất cả ứng dụng, tệp cấu hình và các tệp nhạy cảm cần thiết khác vào một thư mục không thể truy cập công khai [xem lại quyền của thư mục/tệp]. Ví dụ: cấu trúc thư mục có thể theo như ví dụ dưới đây

app/
  config/
    parameters.yml
  src/
public/
  index.php
  style.css

Làm như vậy khiến kẻ tấn công khó truy cập thông tin nhạy cảm bên ngoài thư mục gốc.  

Bật chứng chỉ SSL

Đối với tất cả các ứng dụng web, lưu lượng được gửi đến và đi từ các máy chủ web phải được mã hóa bằng chứng chỉ TLS/SSL. Điều này có nghĩa là toàn bộ ứng dụng phải sử dụng giao thức HTTPS để kẻ tấn công không thể rò rỉ hoặc đánh cắp thông tin nhạy cảm

Định cấu hình gốc tài liệu đúng cách

Thư mục gốc của tài liệu cho các ứng dụng PHP phải được đặt thành /var/www/html cho các hệ thống Linux và C. \inetpub\wwwroot cho hệ thống Windows. Làm như vậy sẽ đảm bảo rằng tất cả các tệp PHP nhạy cảm và các tệp khác chứa biến môi trường và thông tin xác thực cơ sở dữ liệu, chẳng hạn như. htaccess và. env không truy cập được

Tắt lỗi dài dòng và bật ghi nhật ký

Thông báo lỗi dài dòng là một trong những lý do khiến kẻ tấn công có được thông tin có giá trị về trang web, giúp kẻ tấn công tiến hành các cuộc tấn công tiếp theo. Bất cứ khi nào một ứng dụng được triển khai trên máy chủ trực tiếp, hãy đảm bảo tắt tất cả lỗi chi tiết và thay vào đó hiển thị lỗi tùy chỉnh.  

display_errors=Off

Ngoài ra, hãy định cấu hình ứng dụng để ghi nhật ký tất cả các thông báo lỗi để các nhóm liên quan có thể xem qua nhật ký để phát hiện mọi điểm bất thường hoặc các cuộc tấn công thành công cũng như không thành công

log_errors=On
error_log=/var/log/httpd/php_application_errors.log

Triển khai mã hóa URL

Luôn sử dụng các hàm tích hợp PHP như urlencode[] để mã hóa an toàn tất cả các chuỗi được sử dụng để tạo URL. Điều này có thể có lợi trong việc trốn tránh các cuộc tấn công sử dụng biểu tượng và các ký tự khác

Không tin tưởng vào đầu vào của người dùng

Phần lớn các cuộc tấn công PHP xảy ra do các nhà phát triển tin tưởng đầu vào của người dùng và xử lý hoặc phân tích cú pháp trực tiếp vào tệp PHP. Khi làm như vậy, mã độc cũng được xử lý dẫn đến những bất ngờ khó chịu, cái mà chúng tôi gọi là khai thác

Các nhà phát triển web PHP nên làm việc với giả định rằng tất cả các đầu vào đến từ phía máy khách đều độc hại và do đó phải được khử trùng ngay khi chúng đến. Vệ sinh đầu vào phải là quy trình tiếp theo ngay lập tức sau khi nhận được đầu vào.  

Tương tự, đầu vào của người dùng cũng được hiển thị trong ứng dụng dưới dạng đầu ra. Dữ liệu đầu ra này cũng cần được làm sạch trước khi hiển thị và hiển thị trên ứng dụng. Không giống như khử trùng đầu vào, khử trùng đầu ra nên được thực hiện càng muộn càng tốt để đảm bảo rằng dữ liệu đầu ra không bị sửa đổi tại bất kỳ thời điểm nào sau khi khử trùng

Nguyên tắc ngón tay cái là làm sạch đầu vào càng sớm càng tốt và mã hóa đầu ra

Vệ sinh, xác nhận và thoát

Ba thuật ngữ làm sạch, xác thực và thoát được thấy rất phổ biến khi nói về mã hóa an toàn, nhưng mỗi thuật ngữ này có nghĩa là gì

Thẩm định

Xác thực có nghĩa là kiểm tra xem ứng dụng có nhận đúng loại dữ liệu đầu vào hay không. Ví dụ: nếu ứng dụng đang hỏi tuổi của một người, thì chỉ nhận các giá trị số nguyên và không có bảng chữ cái hoặc ký hiệu nào trong đầu vào. Các hàm PHP như is_numeric[] có thể được sử dụng tại đây

vệ sinh

Khử trùng có nghĩa là loại bỏ hoặc loại bỏ các ký tự nguy hiểm tiềm ẩn khỏi đầu vào. Chẳng hạn như loại bỏ dấu nháy đơn [‘] để ngăn chặn việc tiêm SQL hoặc dấu ngoặc nhọn [ < , >] để ngăn chặn các cuộc tấn công XSS

bỏ trốn

Thoát có nghĩa là chuyển đổi dữ liệu có hại thành dữ liệu vô hại. Ví dụ: nếu bất kỳ kẻ tấn công nào thêm 
$search = $_GET[‘search’] ?? . $search;
echo ‘Search results for ‘.$search;

// Điều này có thể được giảm thiểu bằng cách sử dụng hàm htmlspecialchars
$search = htmlspecialchars[$search, ENT_QUOTES, 'UTF-8'];
. $search;

Trong đoạn mã trên, các hàm như ENT_QUOTES có thể được sử dụng để thoát khỏi dấu ngoặc đơn và dấu ngoặc kép để kẻ tấn công không thể phá vỡ cú pháp và thực thi tập lệnh

Thảo luận về mối quan tâm của bạn ngày hôm nay

LIÊN HỆ CHÚNG TÔI

tiêm SQL

Như đã thảo luận ở trên, tấn công SQL injection rất phổ biến trong tập lệnh PHP và có thể tránh được bằng cách sử dụng các truy vấn được tham số hóa hoặc các câu lệnh SQL đã chuẩn bị sẵn

$sql = "SELECT username, password FROM users WHERE id = :id";
$sth = $dbh->prepare[$sql, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]];
$sth->execute[[':id' => $id]];
$users = $sth->fetchAll[];

duyệt thư mục

Duyệt thư mục hoặc dấu chấm, dấu chấm, dấu gạch chéo [. /] các cuộc tấn công có thể tiết lộ thông tin và tệp nhạy cảm trong thư mục máy chủ web. Những cuộc tấn công này có thể được giảm thiểu bằng cách sử dụng sau đây

// Check if the string contains parent directory
if [strstr[$_GET['page'], '../'] !== false] {
    throw new \Exception["Directory traversal attempt!"];
}

// Check for remote file inclusions
if [strstr[$_GET['page'], 'file://'] !== false] {
    throw new \Exception["Remote file inclusion attempt!"];
}

// Use whitelists of web pages that are only allowed to be included
$allowed = ['home', 'blog', 'contact', 'services'];
$page = [in_array[$page, $allowed]] ? $page : 'home';
echo file_get_contents['../pages/'.$page.'.php'];

Sử dụng kết hợp các hàm basename[] và realpath[], nhưng điều này không giúp bạn giải quyết các vấn đề về LFI [Local File Inclusion].  

tiêm lệnh

Việc thực thi các lệnh không đáng tin cậy có thể trực tiếp dẫn đến việc làm hỏng máy chủ web. Đảm bảo không tin tưởng bất kỳ lệnh nào không quen thuộc

exec['rm -rf '.$GET['path']];

tiêm mã

Các chức năng như eval[] nên tránh bằng mọi giá, vì chúng có thể được sử dụng để thực thi mã tùy ý. Nếu điều này là không thể tránh khỏi thì hãy đảm bảo khử trùng đầu vào đúng cách trước khi sử dụng hàm eval[] của PHP

eval['include '.$_GET['path']];

Hơn nữa, để tránh các cuộc tấn công chèn mã, bạn cần tắt các chức năng trong cấu hình PHP cho phép xử lý trực tiếp đầu vào hoặc tương tác với phần phụ trợ. Các ví dụ về hàm nguy hiểm này là exec[], shell_exec[], passthru[] và system[].  

Lưu trữ mật khẩu

Tất cả mật khẩu được lưu trữ hoặc sử dụng trong ứng dụng phải được mã hóa hoặc băm. Hàm password_hash[] có thể được sử dụng cho việc này. Băm mật khẩu đảm bảo rằng ngay cả khi mật khẩu bị rò rỉ, kẻ thù không thể tiết lộ giá trị thực của mật khẩu

Lỗi và đăng nhập

Như đã đề cập ở trên, các lỗi chi tiết cung cấp cho kẻ tấn công cái nhìn sâu sắc về ứng dụng và có thể được sử dụng để tiến hành các cuộc tấn công tiếp theo. Luôn tắt hiển thị lỗi và đảm bảo ghi lại tất cả các lỗi trong một tệp riêng

; Disable displaying errors to screen
display_errors = off
; Enable writing errors to server logs
log_errors = on

Phiên bản PHP được tiết lộ

Các phiên bản PHP được hiển thị theo mặc định trong cấu hình PHP trong các tiêu đề HTML, tuy nhiên, cách tốt nhất là ẩn các phiên bản này. Nếu kẻ tấn công biết phiên bản công nghệ, họ có thể tìm thấy các lỗ hổng được tiết lộ công khai liên quan đến phiên bản đó và sử dụng khai thác trên ứng dụng

________số 8

Bao gồm tệp từ xa [RFI]

Quyền truy cập vào các tệp từ xa phải bị vô hiệu hóa để kẻ tấn công không thể tải các tệp được lưu trữ trên máy chủ của chúng vào trang web. Trong một cuộc tấn công RFI [Bao gồm tệp từ xa], kẻ tấn công có thể bao gồm các tệp của chính chúng và hiển thị chúng trong ngữ cảnh của ứng dụng

; disabled opening remote files for fopen, fsockopen, file_get_contents and similar functions
allow_url_fopen =  0

; disabled including remote files for require, include and similar functions
allow_url_include = 0

Cấu hình phiên người dùng

Có một số lĩnh vực trong quản lý phiên cần được xem xét khi viết mã bảo mật

  • Cho phép sử dụng cookie phiên với ID phiên duy nhất
display_errors=Off
0
  • Kích hoạt cookie chỉ là http, để mã JS độc hại không thể đánh cắp cookie
display_errors=Off
1
  • Đặt giá trị miền cookie, thay vì sử dụng ký tự đại diện
display_errors=Off
2
  • Bật cookie an toàn để cookie chỉ được truyền qua HTTPS
display_errors=Off
3

Tải lên tập tin an toàn

Tải lên các tệp do người dùng cung cấp là một tính năng mà hầu như tất cả các ứng dụng đều có. Các tệp này phải được tải lên một cách an toàn để không có tệp thực thi độc hại hoặc tập lệnh PHP nào được tải lên máy chủ web

Các tệp phải được xác thực bằng các loại mime

display_errors=Off
4

Và tải lên. php nên là

display_errors=Off
5

Tóm lại, đây là lời khuyên để tải lên tệp an toàn

  • Hạn chế các loại tệp được chấp nhận để tải lên, sử dụng danh sách cho phép thay vì danh sách chặn – kiểm tra phần mở rộng tệp và chỉ cho phép tải lên một số định dạng tệp nhất định
  • Đảm bảo trình quét phần mềm độc hại được định cấu hình để quét nội dung trước khi lưu và chia sẻ nội dung đã tải lên. Điều này sẽ xác minh nội dung không độc hại hoặc được tải lên dưới định dạng tệp sai để tránh các loại tệp tải lên
  • Kiểm tra các phần mở rộng kép, các tệp không có tên tệp, chẳng hạn như. htaccess web. cấu hình, v.v.
  • Cân nhắc đổi tên các tệp đã tải lên và không cho phép thực thi/thay đổi quyền

Thảo luận về mối quan tâm của bạn ngày hôm nay

LIÊN HỆ CHÚNG TÔI

Sự kết luận

Thực tiễn bảo mật PHP là một chủ đề rộng lớn và chúng tôi mới chỉ xem xét bề nổi. Cuối cùng, trách nhiệm của các nhà phát triển PHP là tạo mã không chỉ đáp ứng các yêu cầu kinh doanh mà còn an toàn và có khả năng chống lại các cuộc tấn công mạng. Các nhà phát triển của bạn không bao giờ nên tin tưởng đầu vào của người dùng và giữ các vấn đề bảo mật như bao gồm tệp từ xa, XSS, CSRF, SQLi, mã hóa URL, v.v. trong tâm trí của bạn.  

Ngoài ra, hãy xem xét việc xem xét mã bảo mật cùng với các hoạt động kiểm tra thâm nhập được thực hiện trên các ứng dụng PHP của bạn. Hãy liên hệ để xác thực độc lập các biện pháp kiểm soát bảo mật ứng dụng của bạn trước khi quá muộn

Thử nghiệm thâm nhập ứng dụng web

Hướng dẫn phân tích phần mềm độc hại. Các loại & Công cụ

23/10/2022

Đọc thêm "

dấu chân kỹ thuật số. Tất cả về dấu vết điện tử và cách để lại dấu vết kỹ thuật số tối thiểu

13/10/2022

Đọc thêm "

Sự khác biệt giữa Giám sát mạng và Giám sát an ninh mạng

10/05/2022

Đọc thêm "

Mục lục

Thẻ

activedirectory vi phạm kiến ​​trúc api Tuân thủ Bảo mật đám mây cyberessentials an ninh mạng Mã hóa gdpr cứng hóa chung mới nhất office365 owasp mật khẩu pcidss pentest phòng chống lừa đảo bảo mật redteaming rủi ro đánh giá rủi ro giảm thiểu rủi ro doanh nghiệp xã hội kỹ thuật các mối đe dọa chuỗi cung ứng Mẹo ứng dụng web

PHP có tốt cho bảo mật không?

PHP an toàn như bất kỳ ngôn ngữ chính nào khác . PHP an toàn như bất kỳ ngôn ngữ phía máy chủ chính nào. Với các công cụ và khuôn khổ PHP mới được giới thiệu trong vài năm qua, giờ đây việc quản lý bảo mật hàng đầu trở nên dễ dàng hơn bao giờ hết.

Các vấn đề bảo mật trong PHP là gì?

7 vấn đề và lỗ hổng bảo mật hàng đầu của PHP và cách tránh chúng .
tiêm SQL. .
XSS [Cross-Site Scripting].
Giả mạo yêu cầu trên nhiều trang web – CSRF. .
Tiêm đối tượng PHP. .
Bỏ qua xác thực. .
Cướp phiên. .
Tấn công chèn luồng [Bao gồm tệp cục bộ/từ xa]

Tại sao PHP được coi là không an toàn?

Các ứng dụng PHP giống hệt nhau thường được triển khai rộng rãi, vì vậy một lỗ hổng bảo mật trong một ứng dụng có thể dẫn đến một số lượng lớn máy chủ không an toàn, có thể truy cập công khai . Trên thực tế, 30% tất cả các lỗ hổng trong Cơ sở dữ liệu về lỗ hổng quốc gia được liên kết với PHP.

Các tính năng bảo mật được cung cấp bởi PHP là gì?

Các phương pháp hay nhất về bảo mật PHP .
#1 Cập nhật phiên bản PHP của bạn thường xuyên
#2 Cẩn thận với các cuộc tấn công XSS [Cross-site scripting]
#3 Tận dụng các câu lệnh SQL đã chuẩn bị
#4 Không tải tất cả các tệp khung lên máy chủ của bạn
#5 Giới hạn quyền truy cập thư mục
#6 Xác minh cấu hình SSL của bạn
#7 Sử dụng mã hóa URL
#8 Tránh bao gồm tập tin từ xa

Chủ Đề