Hướng dẫn dùng form security trong PHP

Bảo mật ứng dụng web

Giới thiệu

Tài liệu này sẽ liệt kê các mối đe dọa bảo mật có thể có đối với ứng dụng web, giải thích và các biện pháp phòng ngừa.

Nội dung chính

  • Bảo mật ứng dụng web
  • Giới thiệu
  • Tài liệu này sẽ liệt kê các mối đe dọa bảo mật có thể có đối với ứng dụng web, giải thích và các biện pháp phòng ngừa.
  • Nội phân chính
  • Làm thế nào để biết nếu một trang web dễ bị tổn thương?
  • 1. Cập nhật phiên bản PHP của bạn thường xuyên
  • Thực tiễn tốt nhất cho bảo mật ứng dụng web
  • Backdoor Php
  • 3. Sử dụng các câu lệnh SQL đã chuẩn bị
  • 4. Don lồng tải lên tất cả các tệp khung lên máy chủ của bạn
  • 5. Luôn xác nhận đầu vào của người dùng
  • 6. Hạn chế truy cập thư mục
  • 7. Xác minh cấu hình SSL của bạn
  • 8. Sử dụng mã hóa URL
  • 9. Tránh bao gồm tệp từ xa
  • 10. Hãy nhớ rằng, các vấn đề tài liệu
  • Tóm tắt bảo mật PHP
  • PHP có tốt cho bảo mật không?
  • Thực tiễn tốt nhất mã hóa an toàn là gì?
  • Phương pháp nào được bảo mật để đảm bảo dữ liệu trong PHP?
  • Bảo mật ứng dụng PHP là gì?

Nội phân chính

  • Bảo mật ứng dụng web
  • Giới thiệu
  • Tài liệu này sẽ liệt kê các mối đe dọa bảo mật có thể có đối với ứng dụng web, giải thích và các biện pháp phòng ngừa.
  • Nội phân chính
  • Làm thế nào để biết nếu một trang web dễ bị tổn thương?
  • Thực tiễn tốt nhất cho bảo mật ứng dụng web
  • Backdoor 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 (kịch bản chéo trang)
  • 3. Sử dụng các câu lệnh SQL đã chuẩn bị
  • 4. Don lồng tải lên tất cả các tệp khung lên máy chủ của bạn
  • 5. Luôn xác nhận đầu vào của người dùng
  • 6. Hạn chế truy cập thư mục
  • 7. Xác minh cấu hình SSL của bạn
  • 8. Sử dụng mã hóa URL
  • 9. Tránh bao gồm tệp từ xa
  • 10. Hãy nhớ rằng, các vấn đề tài liệu
  • Tóm tắt bảo mật PHP
  • PHP có tốt cho bảo mật không?
  • Thực tiễn tốt nhất mã hóa an toàn là gì?
  1. Phương pháp nào được bảo mật để đảm bảo dữ liệu trong PHP?
  2. Bảo mật ứng dụng PHP là gì?
  3. Dấu chân
  4. Quét
  5. SQL tiêm
  6. Tải lên tệp
  7. Vụ cướp phá vụ và cố định phiên
  8. eval()
  9. Bao gồm tập tin từ xa
  10. XSS
  11. Sự giả mạo yêu cầu chéo trang (CSRF)

Tài liệu này sẽ liệt kê các mối đe dọa bảo mật có thể có đối với ứng dụng web, giải thích và các biện pháp phòng ngừa.

Nội phân chính

  1. Làm thế nào để biết nếu một trang web dễ bị tổn thương?
  2. Thực tiễn tốt nhất cho bảo mật ứng dụng web
  3. Backdoor Php

Nội phân chính

  • Làm thế nào để biết nếu một trang web dễ bị tổn thương?

  • Thực tiễn tốt nhất cho bảo mật ứng dụng web

  • Backdoor 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 (kịch bản chéo trang)

  • 3. Sử dụng các câu lệnh SQL đã chuẩn bị

  • 4. Don lồng tải lên tất cả các tệp khung lên máy chủ của bạn

  • 5. Luôn xác nhận đầu vào của người dùng

  • 6. Hạn chế truy cập thư mục

  • 7. Xác minh cấu hình SSL của bạn

Làm thế nào để biết nếu một trang web dễ bị tổn thương?

Thực tiễn tốt nhất cho bảo mật ứng dụng web

Backdoor Php

 grep -iR 'c99' /var/www/html/
 grep -iR 'r57' /var/www/html/
 find /var/www/html/ -name \*.php -type f -print0 | xargs -0 grep c99
 grep -RPn "(passthru|shell_exec|system|base64_decode|fopen|fclose|eval)" /var/www/html/

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 (kịch bản chéo trang)OWASP secure coding practices and their checklist for testing for any vulnerabilities ( https://www.owasp.org).


3. Sử dụng các câu lệnh SQL đã chuẩn bị ( http://phpsec.org/) group of PHP experts dedicated to promoting secure programming practices within the PHP community. Members of the PHPSC seek to educate PHP developers about security through a variety of resources, including documentation, tools, and standards.

4. Don lồng tải lên tất cả các tệp khung lên máy chủ của bạn

5. Luôn xác nhận đầu vào của người dùng

Thực tiễn tốt nhất cho bảo mật ứng dụng web

Backdoor Php

1. Cập nhật phiên bản PHP của bạn thường xuyên

Backdoor 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 (kịch bản chéo trang)

   

3. Sử dụng các câu lệnh SQL đã chuẩn bị

Bây giờ, một người dùng độc hại có thể chèn JavaScript như thế này. Ví dụ: người dùng có thể bao gồm thẻ tập lệnh với chức năng cảnh báo mà ứng dụng web của bạn sẽ thực thi.

Thẻ tập lệnh trên sẽ tạo một thông báo cảnh báo đơn giản trong trình duyệt. Điều này có vẻ không có hại. Nhưng một người dùng độc hại có thể dễ dàng đánh cắp dữ liệu người dùng nhạy cảm hoặc cookie của người dùng.

Những gì giải pháp? Để ngăn chặn một cuộc tấn công kịch bản chéo trang, hãy đảm bảo thoát khỏi bất kỳ đầu vào người dùng nào để tránh thực thi mã từ xa. To prevent a cross-site scripting attack, make sure to escape any user input to avoid the remote execution of code.

Muốn tìm hiểu thêm? Đọc blog này về các cuộc tấn công XSS phản ánh và cách chúng ảnh hưởng đến ứng dụng web của bạn.

3. Sử dụng các câu lệnh SQL đã chuẩn bị

Một lỗi phổ biến là trực tiếp chèn đầu vào người dùng vào câu lệnh SQL. Điều này để lại chỗ cho các cuộc tấn công tiêm SQL trong đó người dùng có thể phá vỡ truy vấn SQL dự định và thực hiện bất kỳ truy vấn nào họ muốn.

Ví dụ: truy vấn bên dưới sử dụng trực tiếp đầu vào người dùng không được giải quyết bên trong truy vấn SQL.

$users = mysql_query("SELECT * FROM `users` WHERE `id`='$_GET[id]'");

Điều này cung cấp cho một hacker cơ hội để phá vỡ tuyên bố và cố gắng truy vấn các thông tin khác, chẳng hạn như tất cả dữ liệu của người dùng. Với một tuyên bố đã chuẩn bị, các giá trị được đầu vào được thoát ra, không để lại chỗ cho một cuộc tấn công tiêm SQL.

Hãy cùng xem ví dụ dưới đây, sử dụng một tuyên bố đã chuẩn bị.

$stmt = $conn->prepare("INSERT INTO users (firstname, lastname) VALUES (?, ?)");
$stmt->bind_param("ss", $firstname, $lastname);

Lưu ý tham số đầu tiên của hàm

   
4. Điều này cho SQL truy vấn loại dữ liệu bạn truyền. Ở đây, cả các tham số
   
5 và
   
6 đều thuộc chuỗi loại. Đây là một biện pháp bảo mật bổ sung để xác nhận loại dữ liệu của đầu vào.

4. Don lồng tải lên tất cả các tệp khung lên máy chủ của bạn

Nhiều khung PHP bao gồm cấu trúc tệp kiểm soát mô hình. Điều này có nghĩa là chúng đi kèm với một cấu trúc tập tin lớn. Ví dụ, khung SLIM PHP tạo ra cấu trúc tệp sau.

public_html/
    .htaccess
    index.php
    styles/
    images/
    scripts/
app/
    routes/
        session.php
        member.php
        admin.php
vendor/
lib/
data/

Điều quan trọng là bạn không tải lên tất cả các tệp đó lên máy chủ web của mình. Chỉ tải lên các tệp web cần thiết nằm trong thư mục

   
7.

Tải lên tất cả các tệp lên máy chủ của bạn có nghĩa là người dùng độc hại có thể truy cập các tệp của bạn và kiểm tra logic doanh nghiệp của bạn. Điều này cho phép họ có được sự hiểu biết sâu sắc hơn về ứng dụng và có thể tìm thấy các lỗ hổng bảo mật hoặc lỗi mà họ có thể khai thác.

5. Luôn xác nhận đầu vào của người dùng

Khi bạn luôn xác nhận đầu vào của người dùng khi bạn chấp nhận đầu vào thông qua một trường đầu vào, điều này đảm bảo rằng mọi phần dữ liệu đều có loại và định dạng chính xác.

Thông thường, các nhà phát triển sử dụng các biểu thức thường xuyên (regex) để xác nhận các định dạng dữ liệu như ngày sinh hoặc số điện thoại.

Hãy để đọc ví dụ dưới đây, xác nhận nếu ngày sinh ở định dạng

   
8
$date="2012-09-12";

if (preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/", $date)) {
    return true;
} else {
    return false;
}

6. Hạn chế truy cập thư mục

Hàm

   
9 cho phép bạn giới hạn các tệp mà PHP có thể truy cập trong hệ thống tập tin của bạn. Nếu bạn đặt chức năng
   
9 thành gốc của dự án của bạn, điều này có nghĩa là nó chỉ có thể truy cập các tệp trong gốc của dự án của bạn và đi xuống.

Trong trường hợp người dùng độc hại đạt được quyền truy cập vào máy chủ của bạn thông qua PHP và cố gắng truy cập các tệp nhạy cảm như

1, chức năng 
   
9 sẽ ngăn chặn điều này.

7. Xác minh cấu hình SSL của bạn

Mỗi máy chủ nên có chứng chỉ SSL để chuyển các tệp một cách an toàn qua HTTPS. Tuy nhiên, thường xuyên kiểm tra máy chủ của bạn để nhận chứng chỉ SSL lỗi thời hoặc mật mã yếu.

Thông thường, Sysadmins quên cập nhật chứng chỉ SSL khi hết hạn. Tuy nhiên, chứng chỉ SSL giúp trang web của bạn bảo vệ tốt hơn trước các cuộc tấn công XSS.

8. Sử dụng mã hóa URL

PHP cung cấp cho các nhà phát triển chức năng

3 để tạo ra các
URL hợp lệ một cách an toàn. Theo tài liệu PHP, chức năng thuận tiện khi mã hóa một chuỗi được sử dụng trong phần truy vấn của URL.

Hãy tưởng tượng rằng đầu vào của người dùng được sử dụng để tạo URL. Trong trường hợp đó, bạn có thể sử dụng chức năng UrlenCode để tạo URL an toàn.

';
?>

9. Tránh bao gồm tệp từ xa

Không bao giờ chấp nhận đầu vào người dùng để yêu cầu một tập tin. Ví dụ dưới đây hiển thị câu lệnh

4 sử dụng đầu vào do người
dùng tạo và cho phép bao gồm tệp từ xa.

Trong trường hợp này, người dùng có thể nhập đường dẫn độc hại như

5 và hiển thị nội dung của tệp 
6 trên máy chủ Linux/Unix. Do đó, không bao giờ chấp nhận đầu vào người dùng để yêu cầu một trang. Nếu bạn vẫn muốn chấp nhận đầu vào của người dùng để mở tệp, hãy đảm bảo xác nhận đầu vào của người dùng.

Hơn nữa, sử dụng thực tiễn số 6 tốt nhất để hạn chế quyền truy cập thư mục với chức năng

   
9. Một giải pháp tốt hơn sẽ là chỉ định các lựa chọn có thể bằng cách sử dụng câu lệnh Switch.

Ví dụ: nếu đầu vào khớp với

8, bạn điều hướng người dùng đến trang chủ. Xem ví dụ dưới đây, minh họa một công tắc có điều kiện để điều hướng người dùng. Nếu trang không tồn tại, chúng tôi hiển thị một trang lỗi.
   
0

10. Hãy nhớ rằng, các vấn đề tài liệu

Cuối cùng, đừng quên ghi lại hành động của bạn. Bất cứ khi nào bạn thực hiện các thay đổi cho máy chủ của mình, hãy cập nhật phiên bản chứng chỉ SSL hoặc thay đổi mật khẩu, đảm bảo ghi lại những thay đổi đó.

Các nhà phát triển khác có thể thấy thông tin này hữu ích bất cứ khi nào họ muốn thay đổi máy chủ. Nó cho phép họ nhanh chóng kiểm tra những gì đã xảy ra gần đây. Bằng cách này, bạn đã giành chiến thắng gặp phải những bất ngờ bất ngờ, chẳng hạn như mật khẩu không dùng nữa cho máy chủ MySQL của bạn.

Hơn nữa, tài liệu là một phương tiện lý tưởng để chuyển kiến ​​thức. Trong trường hợp nhà phát triển rời khỏi công ty của bạn hoặc bị bệnh, không có kiến ​​thức nào bị mất. Đó là mục đích chính của tài liệu về kiến ​​thức truyền tải.

Tóm tắt bảo mật PHP

Cuối cùng, với tư cách là nhà phát triển PHP, bạn có trách nhiệm không chỉ thực hiện logic kinh doanh cần thiết mà còn để đảm bảo bảo mật của nó và mã mà bạn đã phát triển.

Bài học quan trọng từ bài viết này là xác nhận đầu vào của người dùng. Đầu vào của người dùng không được đánh giá thường là cơ sở của một vấn đề bảo mật. Hãy xem các vấn đề bảo mật như bao gồm tệp từ xa, mã hóa URL hoặc tấn công XSS. Tất cả chúng xảy ra thông qua đầu vào người dùng không hợp lệ.

Bạn muốn tìm hiểu thêm về thực hành bảo mật PHP tốt nhất? Đảm bảo kiểm tra Hướng dẫn bảo mật PHP và Danh sách kiểm tra bảo mật PHP SQREEN.

—-

Bài đăng này được viết bởi Michiel Mulder. Michiel là một nhà phát triển blockchain đam mê, thích viết nội dung kỹ thuật. Bên cạnh đó, anh thích học về tiếp thị, tâm lý học UX và tinh thần kinh doanh. Khi anh ấy không viết, anh ấy có lẽ thưởng thức bia Bỉ!

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ủ lớn nào. Với các khung và công cụ 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 dễ dàng hơn bao giờ hết.. PHP is as secure as any major server-side language. With the new PHP frameworks and tools introduced over the last few years, it is now easier than ever to manage top-notch security.

Thực tiễn tốt nhất mã hóa an toàn là gì?

8 Mã hóa an toàn thực tiễn tốt nhất..

Bảo mật theo thiết kế ..

Quản lý mật khẩu ..

Kiểm soát truy cập..

Xử lý lỗi và ghi nhật ký ..

Cấu hình hệ thông..

Mô hình hóa mối đe dọa ..

Thực hành mật mã ..

Xác thực đầu vào và mã hóa đầu ra ..

Phương pháp nào được bảo mật để đảm bảo dữ liệu trong PHP?

SQL tiêm bằng cách sử dụng các tập lệnh tương tự như mã trên, kẻ tấn công có thể truy cập vào tất cả các bảng dữ liệu và thông tin nhạy cảm. Giải pháp cho điều này là sử dụng các truy vấn SQL được tham số hóa và các đối tượng dữ liệu PHP (PDO). Sử dụng các truy vấn được tham số hóa sẽ cho phép cơ sở dữ liệu phân biệt giữa các phần dữ liệu và truy vấn. By using scripts similar to the above code, attackers can get access to all data tables and sensitive information. The solution to this is to use parameterized SQL queries and PHP Data Objects (PDO). Using parameterized queries will let the database differentiate between the data and query parts.

Bảo mật ứng dụng PHP là gì?

Vì PHP rất phổ biến, nên bảo mật PHP là rất cần thiết và số lượng ứng dụng PHP dễ bị tổn thương là lớn. Hầu hết các ứng dụng web PHP đều chia sẻ các phần của 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ẻ là dễ bị tổn thương, tất cả các ứng dụng đang sử dụng nó cũng dễ bị tổn thương.PHP security is essential and the number of vulnerable PHP applications is large. Most PHP web applications share parts of code or scripts with other web applications. If the shared piece of code is found to be vulnerable, all the applications that are using it are also vulnerable.