Hướng dẫn php.ini security best practices - các phương pháp hay nhất về bảo mật php.ini
Dưới đây chúng tôi sẽ xem xét các nguyên tắc bảo mật chung và mô tả cách tránh các mối đe dọa khi phát triển các ứng dụng sử dụng YII. Hầu hết các nguyên tắc này không chỉ riêng cho YII mà áp dụng cho trang web hoặc phát triển phần mềm nói chung, vì vậy bạn cũng sẽ tìm thấy các liên kết để đọc thêm về các ý tưởng chung đằng sau những ý tưởng này. Show
Nguyên tắc cơ bản ¶Có hai nguyên tắc chính khi nói đến bảo mật cho dù ứng dụng nào đang được phát triển:
Đầu vào lọc ¶Đầu vào bộ lọc có nghĩa là đầu vào không bao giờ được coi là an toàn và bạn nên luôn luôn kiểm tra xem giá trị bạn có thực sự là một trong những giá trị được phép. Ví dụ: nếu chúng ta biết rằng việc sắp xếp có thể được thực hiện bởi ba trường 4, 5 và 6 và trường có thể được cung cấp thông qua đầu vào của người dùng, tốt hơn là kiểm tra giá trị chúng ta có ngay khi chúng ta nhận được. Về mặt PHP cơ bản trông giống như sau:
Trong YII, rất có thể bạn sẽ sử dụng xác thực biểu mẫu để kiểm tra giống nhau. Đọc thêm về chủ đề:
Thoát ra đầu ra ¶Đầu ra thoát có nghĩa là tùy thuộc vào ngữ cảnh mà chúng tôi đang sử dụng dữ liệu, nó sẽ được thoát, tức là trong bối cảnh của HTML, bạn nên thoát 7, 8 và các ký tự đặc biệt giống nhau. Trong bối cảnh của JavaScript hoặc SQL, nó sẽ là tập hợp các ký tự khác nhau. Vì dễ bị lỗi để thoát khỏi mọi thứ theo cách thủ công YII cung cấp các công cụ khác nhau để thực hiện thoát khỏi các bối cảnh khác nhau.Đọc thêm về chủ đề:
Thoát ra đầu ra ¶Đầu ra thoát có nghĩa là tùy thuộc vào ngữ cảnh mà chúng tôi đang sử dụng dữ liệu, nó sẽ được thoát, tức là trong bối cảnh của HTML, bạn nên thoát 7, 8 và các ký tự đặc biệt giống nhau. Trong bối cảnh của JavaScript hoặc SQL, nó sẽ là tập hợp các ký tự khác nhau. Vì dễ bị lỗi để thoát khỏi mọi thứ theo cách thủ công YII cung cấp các công cụ khác nhau để thực hiện thoát khỏi các bối cảnh khác nhau.
Tránh tiêm SQL ¶
SQL Injection xảy ra khi văn bản truy vấn được hình thành bằng cách ghép các chuỗi không được phân loại như sau: Thay vì cung cấp kẻ tấn công tên người dùng chính xác có thể cung cấp cho các ứng dụng của bạn một cái gì đó như 9. Kết quả SQL sẽ như sau:Đây là truy vấn hợp lệ sẽ tìm kiếm người dùng có tên người dùng trống và sau đó sẽ bỏ bảng 0 có lẽ dẫn đến trang web bị hỏng và mất dữ liệu (bạn đã thiết lập các bản sao lưu thông thường, phải không?).
Trong YII, hầu hết các truy vấn cơ sở dữ liệu xảy ra thông qua bản ghi hoạt động sử dụng đúng các câu lệnh PDO trong nội bộ. Trong trường hợp các tuyên bố đã chuẩn bị, không thể thao tác truy vấn như đã được trình bày ở trên.
Tuy nhiên, đôi khi bạn cần truy vấn thô hoặc trình tạo truy vấn. Trong trường hợp này, bạn nên sử dụng các cách truyền dữ liệu an toàn. Nếu dữ liệu được sử dụng cho các giá trị cột, bạn sẽ ưu tiên sử dụng các câu lệnh đã chuẩn bị:
Nếu dữ liệu được sử dụng để chỉ định tên cột hoặc tên bảng, điều tốt nhất cần làm là chỉ cho phép tập hợp các giá trị được xác định trước: Đọc thêm về chủ đề:
Thoát ra đầu ra ¶Đầu ra thoát có nghĩa là tùy thuộc vào ngữ cảnh mà chúng tôi đang sử dụng dữ liệu, nó sẽ được thoát, tức là trong bối cảnh của HTML, bạn nên thoát 7, 8 và các ký tự đặc biệt giống nhau. Trong bối cảnh của JavaScript hoặc SQL, nó sẽ là tập hợp các ký tự khác nhau. Vì dễ bị lỗi để thoát khỏi mọi thứ theo cách thủ công YII cung cấp các công cụ khác nhau để thực hiện thoát khỏi các bối cảnh khác nhau.Tránh tiêm SQL ¶
Đây là truy vấn hợp lệ sẽ tìm kiếm người dùng có tên người dùng trống và sau đó sẽ bỏ bảng 0 có lẽ dẫn đến trang web bị hỏng và mất dữ liệu (bạn đã thiết lập các bản sao lưu thông thường, phải không?).
Trong YII, hầu hết các truy vấn cơ sở dữ liệu xảy ra thông qua bản ghi hoạt động sử dụng đúng các câu lệnh PDO trong nội bộ. Trong trường hợp các tuyên bố đã chuẩn bị, không thể thao tác truy vấn như đã được trình bày ở trên.
Tuy nhiên, đôi khi bạn cần truy vấn thô hoặc trình tạo truy vấn. Trong trường hợp này, bạn nên sử dụng các cách truyền dữ liệu an toàn. Nếu dữ liệu được sử dụng cho các giá trị cột, bạn sẽ ưu tiên sử dụng các câu lệnh đã chuẩn bị: Đọc thêm về chủ đề:
Thoát ra đầu ra ¶Đầu ra thoát có nghĩa là tùy thuộc vào ngữ cảnh mà chúng tôi đang sử dụng dữ liệu, nó sẽ được thoát, tức là trong bối cảnh của HTML, bạn nên thoát 7, 8 và các ký tự đặc biệt giống nhau. Trong bối cảnh của JavaScript hoặc SQL, nó sẽ là tập hợp các ký tự khác nhau. Vì dễ bị lỗi để thoát khỏi mọi thứ theo cách thủ công YII cung cấp các công cụ khác nhau để thực hiện thoát khỏi các bối cảnh khác nhau.Tránh tiêm SQL ¶ Đó là ý tưởng cơ bản về cách hoạt động của một cuộc tấn công CSRF. Người ta có thể nói rằng việc đăng xuất người dùng không phải là một điều nghiêm trọng, tuy nhiên đây chỉ là một ví dụ, có nhiều điều người ta có thể làm bằng cách sử dụng phương pháp này, ví dụ như kích hoạt thanh toán hoặc thay đổi dữ liệu. Hãy tưởng tượng rằng một số trang web có URL 9. Truy cập nó bằng cách sử dụng yêu cầu Get, gây ra chuyển giao $ 2000 từ tài khoản người dùng được ủy quyền sang người dùng 0. Chúng tôi biết rằng trình duyệt sẽ luôn gửi yêu cầu nhận được tải một hình ảnh, vì vậy chúng tôi có thể sửa đổi mã để chỉ chấp nhận các yêu cầu đăng trên URL đó. Thật không may, điều này sẽ không lưu chúng tôi, bởi vì kẻ tấn công có thể đặt một số mã JavaScript thay vì thẻ 7, cho phép gửi các yêu cầu POST đến URL đó.Vì lý do này, YII áp dụng các cơ chế bổ sung để bảo vệ chống lại các cuộc tấn công CSRF. Để tránh CSRF, bạn nên luôn luôn:
Đôi khi bạn cần vô hiệu hóa xác thực CSRF trên mỗi bộ điều khiển và/hoặc hành động. Nó có thể đạt được bằng cách đặt tài sản của nó:
Để vô hiệu hóa xác thực CSRF cho mỗi hành động tùy chỉnh, bạn có thể làm:
Vô hiệu hóa xác thực CSRF trong các hành động độc lập phải được thực hiện theo phương pháp 2. Không đặt mã này vào phương thức 3 vì nó sẽ không có hiệu lực. 0
Đọc thêm về chủ đề:
Tránh tiếp xúc với tệp ¶Theo mặc định, máy chủ Webroot có nghĩa là được chỉ vào thư mục 6 trong đó 7. Trong trường hợp môi trường lưu trữ được chia sẻ, có thể không thể đạt được, vì vậy chúng tôi sẽ kết thúc với tất cả các mã, cấu hình và nhật ký trong máy chủ Webroot.Nếu đó là trường hợp đừng quên từ chối quyền truy cập vào mọi thứ ngoại trừ 6. Nếu nó không thể được thực hiện, hãy xem xét việc lưu trữ ứng dụng của bạn ở nơi khác.Trong chế độ gỡ lỗi, YII cho thấy các lỗi khá dài dòng, chắc chắn rất hữu ích cho sự phát triển. Vấn đề là các lỗi dài dòng này cũng tiện dụng cho kẻ tấn công vì chúng có thể tiết lộ cấu trúc cơ sở dữ liệu, giá trị cấu hình và các phần của mã của bạn. Không bao giờ chạy các ứng dụng sản xuất với 9 được đặt thành 0 trong 7 của bạn.Bạn không bao giờ nên kích hoạt Gii hoặc thanh công cụ gỡ lỗi trong sản xuất. Nó có thể được sử dụng để có được thông tin về cấu trúc cơ sở dữ liệu, mã và chỉ cần viết lại mã với những gì được tạo bởi GII. Thanh công cụ gỡ lỗi nên tránh trong sản xuất trừ khi thực sự cần thiết. Nó phơi bày tất cả các chi tiết ứng dụng và cấu hình có thể. Nếu bạn hoàn toàn cần nó, hãy kiểm tra hai lần rằng quyền truy cập chỉ được giới hạn đúng cho IP của bạn. Đọc thêm về chủ đề:
Theo mặc định, máy chủ Webroot có nghĩa là được chỉ vào thư mục // query builder $userIDs = (new Query()) ->select('id') ->from('user') ->where('status=:status', [':status' => $status]) ->all(); // DAO $userIDs = $connection ->createCommand('SELECT id FROM user where status=:status') ->bindValues([':status' => $status]) ->queryColumn(); 6 trong đó // query builder $userIDs = (new Query()) ->select('id') ->from('user') ->where('status=:status', [':status' => $status]) ->all(); // DAO $userIDs = $connection ->createCommand('SELECT id FROM user where status=:status') ->bindValues([':status' => $status]) ->queryColumn(); 7. Trong trường hợp môi trường lưu trữ được chia sẻ, có thể không thể đạt được, vì vậy chúng tôi sẽ kết thúc với tất cả các mã, cấu hình và nhật ký trong máy chủ Webroot.Nếu đó là trường hợp đừng quên từ chối quyền truy cập vào mọi thứ ngoại trừ 6. Nếu nó không thể được thực hiện, hãy xem xét việc lưu trữ ứng dụng của bạn ở nơi khác.Trong chế độ gỡ lỗi, YII cho thấy các lỗi khá dài dòng, chắc chắn rất hữu ích cho sự phát triển. Vấn đề là các lỗi dài dòng này cũng tiện dụng cho kẻ tấn công vì chúng có thể tiết lộ cấu trúc cơ sở dữ liệu, giá trị cấu hình và các phần của mã của bạn. Không bao giờ chạy các ứng dụng sản xuất với 9 được đặt thành 0 trong 7 của bạn.
https://owasp.org/www-pdf-archive/owasp_top_10_2007.pdf (A6-rò rỉ thông tin và xử lý lỗi không đúng)Sử dụng kết nối an toàn qua TLS ¶ YII cung cấp các tính năng dựa vào cookie và/hoặc phiên PHP. Đây có thể dễ bị tổn thương trong trường hợp kết nối của bạn bị xâm phạm. Rủi ro sẽ giảm nếu ứng dụng sử dụng kết nối an toàn thông qua TLS (thường được gọi là SSL). Để biết thêm thông tin về cấu hình máy chủ, vui lòng tham khảo tài liệu của máy chủ web của bạn:
Nếu bạn không có quyền truy cập vào cấu hình máy chủ, bạn có thể thiết lập bộ lọc yii \ brilter \ hostcontrol ở cấp ứng dụng để bảo vệ chống lại loại tấn công đó: 1
Định cấu hình xác thực ngang hàng SSL ¶Có một quan niệm sai lầm điển hình về cách giải quyết các vấn đề xác nhận chứng chỉ SSL như: 2hoặc 3Nhiều nguồn nhầm gợi ý tắt xác minh ngang hàng SSL. Điều đó không nên được thực hiện vì nó cho phép các loại tấn công giữa trong số các cuộc tấn công. Thay vào đó, PHP nên được cấu hình đúng cách:
Lưu ý rằng tệp 6 nên được cập nhật. |