2010-10-14 40 views
20

Có chức năng nào trong PHP mà tôi có thể sử dụng để phát hiện chức năng exec có sẵn không?Kiểm tra xem "exec" có bị vô hiệu hóa

+0

tại sao không thử 'exec'? – Fosco

+0

Tôi đang xây dựng một ứng dụng web và trên trang cài đặt, tôi muốn kiểm tra các yêu cầu. Tôi không thể tìm thấy bất cứ điều gì về những gì 'exec' ném ... vì vậy tôi muốn kiểm tra ở đây. : P – esqew

+0

'echo (int) function_exists ('exec');' –

Trả lời

39
<?php 
function exec_enabled() { 
    $disabled = explode(',', ini_get('disable_functions')); 
    return !in_array('exec', $disabled); 
} 
?> 

CHỈNH SỬA: Cố định phát nổ theo nhận xét của Ziagl.

+1

Điều này trả về 'true' nếu' exec' được kích hoạt. –

+1

đó là lý do tại sao chức năng được gọi là exec_enabled, nó chỉ không chính xác những gì ông yêu cầu. – UltimateBrent

+3

điều này có thể hoạt động hoặc có thể không - không may, trong trường hợp của tôi, tôi thấy rằng 'ini_get()' nằm trong danh sách các chức năng bị vô hiệu hóa cùng với các hàm 'exec' và các hệ thống tệp khác; một tình huống có thể xảy ra, do các nhà cung cấp dịch vụ lưu trữ có thể lo ngại về việc tiết lộ thông tin trong tệp INI. –

2

Bạn có thể tìm kiếm cài đặt ini disable_functions cho chức năng exec().

if(false !== strpos(ini_get("disable_functions"), "exec")) { 
// exec() is disabled 

Chỉ để hoàn thành, lưu ý rằng PHP Safe Mode cũng đặt một số hạn chế đối với chức năng.

+0

Cách quá chậm như tôi thấy :) – svens

+8

Điều này sẽ trả về câu trả lời sai nếu một hàm như 'shell_exec' đã được đặt trong' disable_functions' nhưng 'exec' không có. Tốt nhất để sử dụng phát nổ hoặc regex để đảm bảo nó khớp hoàn chỉnh – webbiedave

+0

Rất tiếc, đó là chính xác – svens

1

Bạn cũng cần phải kiểm tra xem safe_mode đang hoạt động như exec là không có sẵn nếu safe_mode là trên

function is_exec_available() { 

    // Are we in Safe Mode 
    if ($safe_mode = ini_get('safe_mode') && strtolower($safe_mode) != 'off') 
     return false; 

    // Is shell_exec disabled? 
    if (in_array('exec', array_map('trim', explode(',', ini_get('disable_functions'))))) 
     return false; 

    return true; 

} 
13

Hàm ở phía dưới mạnh mẽ hơn. Nó đề cập đến giá trị disabled_functions có 0 hoặc nhiều khoảng trống giữa các tên hàm, kiểm tra cài đặt danh sách đen của bản vá suhosin, bao gồm safe_mode và lưu trữ câu trả lời để tham khảo trong tương lai.

function is_exec_available() { 
    static $available; 

    if (!isset($available)) { 
     $available = true; 
     if (ini_get('safe_mode')) { 
      $available = false; 
     } else { 
      $d = ini_get('disable_functions'); 
      $s = ini_get('suhosin.executor.func.blacklist'); 
      if ("$d$s") { 
       $array = preg_split('/,\s*/', "$d,$s"); 
       if (in_array('exec', $array)) { 
        $available = false; 
       } 
      } 
     } 
    } 

    return $available; 
} 
+0

Để ghi lại, bản chỉnh sửa thêm kiểm tra danh sách đen suhosin là do tôi. Sau khi gửi nó, tôi nhận ra phiên xác thực của tôi bằng cách nào đó đã hết. –

0

Việc biên dịch một dòng chế độ an toàn, chức năng tồn tại và quản trị viên bị vô hiệu hóa bằng một số kỹ thuật được tìm thấy trên các bài đăng SO khác nhau.

Điều này sẽ kiểm tra xem exec có sẵn và được kích hoạt TRƯỚC KHI cố gắng chạy nó. Nếu bạn chạy exec() và chức năng không tồn tại hoặc bị vô hiệu hóa một cảnh báo sẽ được tạo ra. Tùy thuộc vào cài đặt máy chủ có thể hiển thị cho trình duyệt và hầu như luôn ghi dòng vào tệp nhật ký = lần truy cập hiệu suất.

// Exec function exists. 
// Exec is not disabled. 
// Safe Mode is not on. 
$exec_enabled = 
    function_exists('exec')           && 
    !in_array('exec', array_map('trim',explode(', ', ini_get('disable_functions'))))  && 
       !(strtolower(ini_get('safe_mode')) != 'off') 
    ; 


if ($exec_enabled) { exec('blah'); } 
Các vấn đề liên quan