2008-08-09 18 views
10

Tôi đã thừa hưởng một số mã PHP cũ đã được viết lại khi thực hành tiêu chuẩn sử dụng register_globals (Theo PHP 4.2.0, chỉ thị này mặc định tắt, phát hành ngày 22 tháng 4 năm 2002).Làm cho mã hoạt động với register_globals bị tắt

Hiện tại chúng tôi biết rằng tính năng bảo mật được kích hoạt là rất xấu. Vấn đề là làm cách nào để tìm tất cả các địa điểm trong mã mà tôi cần sử dụng $_GET hoặc $_POST? Suy nghĩ duy nhất của tôi là đặt báo cáo lỗi để cảnh báo về các biến chưa được khởi tạo và sau đó kiểm tra từng phần của trang web. Có cách nào dễ hơn không? Tôi sẽ phải kiểm tra từng đường dẫn mã trong trang web hay PHP sẽ đưa ra cảnh báo trên cơ sở tệp?

Trả lời

5

Nếu bạn đặt báo cáo lỗi thành E_ALL, nó cảnh báo trong nhật ký lỗi về biến không xác định hoàn chỉnh với tên tệp và số dòng (giả sử bạn đang đăng nhập vào tệp). Tuy nhiên, nó sẽ cảnh báo chỉ khi nó đi qua một biến không xác định, vì vậy tôi nghĩ bạn sẽ phải kiểm tra từng đường dẫn mã. Chạy php từ dòng lệnh dường như cũng không hữu ích.

Có một công cụ gỡ lỗi có tên xdebug, chưa thử, nhưng có thể điều đó có thể hữu ích?

0

Tôi biết rằng có một cách để thiết lập giá trị php.ini cho kịch bản với một lệnh nào đó, tôi như vậy đã đi tìm và phát hiện này quá - Goto last post on page

tôi cũng tìm thấy bài sau đây có thể được sử dụng - Goto last post on the page

Tôi sẽ thêm vào điều này nếu không có ai tìm thấy câu trả lời nhưng giờ tôi phải bắt một chuyến tàu.

3

Tôi đã viết một script sử dụng chức năng được xây dựng trong Tokenizer. Nó khá thô nhưng nó làm việc cho các cơ sở mã tôi đã làm việc trên. Tôi tin rằng bạn cũng có thể sử dụng CodeSniffer.

2

Bạn có thể 'giả' thủ công hiệu ứng đăng ký nhưng thêm một số bảo mật. (Tôi phần nào nắm lấy này từ ngã ba osCommerce gọi xoops)

// Detect bad global variables 
$bad_global_list = array('GLOBALS', '_SESSION', 'HTTP_SESSION_VARS', '_GET', 'HTTP_GET_VARS', '_POST', 'HTTP_POST_VARS', '_COOKIE', 'HTTP_COOKIE_VARS', '_REQUEST', '_SERVER', 'HTTP_SERVER_VARS', '_ENV', 'HTTP_ENV_VARS', '_FILES', 'HTTP_POST_FILES'); 
foreach ($bad_global_list as $bad_global) { 
    if (isset($_REQUEST[$bad_global])) { 
     die('Bad Global'); 
    } 
} 

// Make global variables 
foreach ($_REQUEST as $name -> $value) { 
    $$name = $value; // Creates a varable nammed $name equal to $value. 
} 

Mặc dù bạn muốn tinh chỉnh nó để làm cho mã của bạn an toàn hơn, ít nhất là bằng cách thêm các biến global configuration của bạn (như đường dẫn và cơ sở url) vào danh sách toàn cầu xấu. Bạn cũng có thể sử dụng nó để dễ dàng biên dịch danh sách tất cả các biến get/post đã sử dụng để giúp bạn thay thế tất cả các lần xuất hiện, ví dụ $ return_url, với $ _REQUEST ['return_url];

Các vấn đề liên quan