Máy tínhPhần mềm

PHP biến toàn cục trong hàm. Thực hiện một biến toàn cầu trong PHP

Để tạo một trang web đầy đủ, trong đó có chức năng rộng, bạn cần phải biết rất nhiều. Nhưng những gì có thể làm cho anh ta thật sự độc đáo - đó là PHP. Các biến toàn cầu trong ngôn ngữ lập trình không được sử dụng rất thường xuyên, nhưng đôi khi phải biết cách thức hoạt động, đôi khi nó là cần thiết. Đó là nghiên cứu của nó là gì và làm thế nào nó hoạt động, chúng ta sẽ làm gì trong bài viết này.

phạm vi

Vì vậy, gọi bối cảnh trong đó biến và xác định. Trong hầu hết các trường hợp, họ chỉ có một phạm vi. Khi PHP biến toàn cục nạp từ các tập tin khác, sau đó nó có thể bao gồm (bao gồm) và yêu cầu (yêu cầu).

Theo mặc định, họ được giới hạn ở phạm vi chức năng địa phương. Và làm thế nào để làm cho biến file thấy trong ranh giới của nó, mà hơn và có thể sử dụng không? Để kết thúc này, và được cung cấp trong các biến toàn cầu PHP.

Các từ khóa "toàn cầu"

Và đây là làm thế nào để khai báo một biến toàn cục để PHP? Trong việc đạt được mục tiêu này sẽ giúp chúng tôi từ "toàn cầu". Nó là cần thiết để đặt ở phía trước của biến mà bạn muốn thực hiện một toàn cầu (narimer, toàn cầu «Các Biến").

Sau khi thực hiện một dấu hiệu như vậy, dữ liệu sẽ có thể làm việc với bất kỳ tập tin. Nếu ở đâu đó có những tài liệu tham khảo để biến này, chương trình sẽ luôn luôn chú ý trên phiên bản toàn cầu.

Tại sao như vậy một ngôn ngữ kỳ lạ? Thực tế là cùng một lúc có thể có các phiên bản địa phương. Nhưng họ sẽ có sẵn dành riêng cho các tập tin nơi công bố. Và đối với tất cả các phần còn lại sẽ đóng vai trò các biến toàn cục lớp PHP. Vì vậy, bạn phải cẩn thận. Và đó là không có nghi ngờ gì nữa, đây là một ví dụ về những gì họ trông giống như: a toàn cầu.

Bởi vì nếu một tập tin sẽ có quyền truy cập vào một số biến, nó sẽ làm cho chúng mâu thuẫn. Nhưng chúng ta không thể nói chắc chắn - địa phương hay toàn cầu biến được đọc hoặc hoàn toàn thất bại. Vì vậy, nếu nó là đăng ký trong một hàm, nó phải là không có vấn đề. Nhưng việc sử dụng một biến cho biên giới của nó có vấn đề. Do đó, cấu trúc của quá trình soạn thảo mã cần thiết để giám sát chặt chẽ và chắc chắn rằng không nơi nào là có ngay cả một điều kiện tiên quyết để các mâu thuẫn nảy sinh nói.

Một hiện thân của bản ghi

Có thể trong PHP để tạo một biến toàn cầu theo cách khác? Vâng, thậm chí người ta không. Đầu tiên, chúng ta hãy xem xét các $ GLOBALS. Đây là một mảng kết hợp. Chìa khóa để nó - là tên. Khi giá trị của nội dung hoạt động như một biến toàn cầu. Cần lưu ý rằng các mảng sau khi công bố tồn tại trong bất kỳ phạm vi. Điều này cho phép lý do để tin rằng nó superglobal. Nó trông giống như vậy: $ GLOBALS [ 'biến'].

Predefined / superglobals

Trong tất cả các ngôn ngữ lập trình có một số tên được điều lệ đối với một số chức năng của mình. Vì vậy, để tạo trong PHP biến toàn cầu cùng tên sẽ không hoạt động.

ngôn ngữ lập trình này có những đặc điểm riêng của mình. Vì vậy, điều quan trọng là các biến được xác định trước đây không được cài đặt "siêu", có nghĩa là, họ không có sẵn trong tất cả các địa điểm. Làm thế nào tôi có thể sửa chữa nó? Để biến được xác định trước là có sẵn tại một số khu vực địa phương, nó phải được khai báo như sau :. «Biến toàn cầu" Nó có vẻ là giống như trước đã nói, phải không? Nó là đúng, nhưng không hoàn toàn. Chúng ta hãy nhìn đã "chiến đấu" một ví dụ:

  • $ HTTP_POST_VARS toàn cầu;
  • echo $ HTTP_POST_VARS [ 'name'].

Bạn cảm nhận được sự khác biệt giữa chúng? Lưu ý rằng trong các biến toàn cục PHP không nhất thiết phải được sử dụng trong hàm. Nó thậm chí có thể được đặt trong một tập tin được bao gồm trong đó.

Liên kết và an toàn

Như bạn có thể thấy, trong PHP tạo một biến toàn cầu không phải là một vấn đề. Nhưng có bất kỳ liên kết tương đối cụ thể không? Có, có thể có hành vi bất ngờ khi sử dụng toàn cầu. Nhưng trước đó, một cốt truyện chút.

Trong phiên bản 4.2.0 chỉ thị bởi register_globals mặc định thay đổi từ trên trạng thái tắt. Đối với hầu hết người dùng, điều này không phải là rất quan trọng, nhưng vô ích. Sau khi tất cả, nó trực tiếp ảnh hưởng đến sự an toàn của các sản phẩm phát triển. Nếu bạn cần phải thực hiện toàn cầu, PHP-Chỉ thị biến trên tham số này không bị ảnh hưởng trực tiếp. Tuy nhiên, sử dụng không đúng đã có thể tạo ra tiền lệ an ninh.

Vì vậy, nếu register_globals được bật, trước khi thực hiện các mã văn bản khởi tạo các biến khác nhau mà là cần thiết, ví dụ để gửi HTML-hình thức. Do đó, nó đã được quyết định để tắt nó đi.

Tại sao tình trạng của chỉ thị này trong biến toàn cầu php nợ nhiêu? Thực tế là khi trạng thái của các nhà phát triển không phải lúc nào một cách chắc chắn mình có thể trả lời câu hỏi của nó đến từ đâu. Một mặt, nó là dễ dàng hơn để viết mã. Nhưng mặt khác - đó là một nguy cơ bảo mật. Vì vậy, để tránh sai sót, cũng như dữ liệu trộn và chỉ thị đã bị vô hiệu hóa.

Bây giờ chúng ta hãy nhìn không / code an toàn, cũng như làm thế nào để phát hiện những trường hợp thông báo của các biến PHP toàn cầu được đi kèm với nỗ lực can thiệp vào dữ liệu. Này là cần thiết để tạo ra không chỉ xinh đẹp, mà còn đều đặn các trang web không nứt người sẵn đầu tiên làm việc.

mã độc

Hãy đặt biến đó là sự thật đối với những người đã được ủy quyền:

if (authenticate_user ()) {
$ Authorize = true;
}

if ($ ủy quyền) {
bao gồm "/highly/sensitive/data.php";
}

Trong trạng thái này, biến thể được thiết lập tự động. Xét rằng các dữ liệu chỉ có thể được thay thế, và nguồn gốc của nguồn gốc của chúng không được thiết lập, sau đó ai cũng có thể vượt qua một bài kiểm tra như vậy và giả vờ là một người khác. Nếu muốn, những kẻ tấn công (hoặc chỉ tò mò nhưng thiếu kinh nghiệm người) có thể bị khiếm, logic của chúng tôi.

Nếu chúng ta thay đổi giá trị của các chỉ thị, mã này sẽ làm việc một cách chính xác, như chúng ta yêu cầu. Nhưng khởi của các biến không chỉ là một giai điệu tốt trong lập trình, nhưng cũng cho chúng ta một sự đảm bảo chắc chắn về sự ổn định của kịch bản.

phiên bản đáng tin cậy của mã

bạn có thể tắt hoặc làm việc chỉ thị, hoặc quy định một mã phức tạp hơn để đạt được mục tiêu này. Ví dụ, như thế này:

if (isset ($ _ SESSION [ 'username'])) {

echo "Xin chào {$ _ SESSION [ 'username']} ";

} Else {

echo "Xin chào khách
";
echo "sử dụng Chào mừng bạn!";

}

Thay người ở trong trường hợp này, sẽ có khó khăn. Nhưng vẫn còn - có thể. Để làm điều này, bạn phải chăm sóc mà các công cụ phản ứng nhanh được cung cấp. Nếu bạn muốn bao gồm các biến toàn cầu trong PHP, bạn có thể sử dụng các công cụ sau: nếu chúng ta biết những gì phạm vi là giá trị thu được, có thể đăng ký một kịch bản để kiểm tra điều này với một trận đấu. Tất nhiên, nó cũng không đảm bảo bảo vệ đầy đủ chống lại các giá trị thay thế. Nhưng đó là quá nhiều tùy chọn phức tạp đáng kể.

Tìm thấy những nỗ lực để giả mạo

Chúng ta hãy xem làm thế nào bạn hiểu được viết trước đó. Trong PHP biến toàn cục trong hàm đó sẽ được đưa ra dưới đây, bạn sẽ cần phải tuyên bố chính mình. Chúng ta có thể nói rằng đây là một loại bài tập về sự đồng hoá của chủ đề bài học. Đây là mã:

if (isset ($ _ [ 'C_COOKIE']) COOKIE) {
} Elseif (isset ($ _ GET [ 'C_COOKIE']) || isset ($ _ POST [ 'C_COOKIE'])) {

mail ( "administrarot@example.com", "Chú ý, kịch bản được ghi nhận nỗ lực trộm và giả mạo với các dữ liệu", $ _SERVER [ 'REMOTE_ADDR']);
echo "Có một sự an toàn bị hỏng hoặc cố gắng làm như vậy thông báo cho quản trị.";
lối ra;

} Else {
}
?>

Bây giờ giải thích quan. Phần C_COOKIE đến với chúng ta từ một nguồn đáng tin cậy. Để đáp ứng đầy đủ theo kết quả mong đợi, chúng tôi kiểm tra giá trị của nó và thông báo cho người quản trị trong trường hợp của các vấn đề. Nếu nó không đến, sau đó không có hành động và không cần phải thực hiện. Bạn phải hiểu rằng chỉ đơn giản là vô hiệu hóa chỉ thị register_globals không làm cho mã của bạn được an toàn. Do đó, bất kỳ biến mà nhận được một kịch bản từ người sử dụng, nên được kiểm tra giá trị kỳ vọng.

phần kết luận

Ở đây, nói chung, và tất cả mọi thứ bạn cần biết về các biến toàn cầu để sử dụng thành công và an toàn cho họ trong công việc của họ. Tất nhiên, để nói rằng có một sự bảo đảm đầy đủ mà không có ai sẽ sử dụng chúng không có thể - những kẻ tấn công không ngừng cải tiến phương pháp và kỹ năng của họ. Do đó, mong muốn giới hạn việc sử dụng tối đa các biến toàn cục trong các mã. May mắn thay, cấu trúc và thiết kế các tính năng của ngôn ngữ lập trình này có thể đạt được mục tiêu này. Chúc may mắn!

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 vi.delachieve.com. Theme powered by WordPress.