Hướng dẫn can users access php code? - người dùng có thể truy cập mã php không?

Trong các trường hợp bình thường, giả sử rằng máy chủ được cấu hình chính xác và không có lỗ hổng bảo mật nào trong máy chủ hoặc mã PHP của bạn, không có cách nào để bất kỳ khách truy cập bình thường nào xem nguồn PHP của bạn.

Lý do bạn không thể ẩn HTML/CSS/JS khỏi người dùng là vì HTML/CSS/JS đều là mã phía máy khách, có nghĩa là chúng được trình duyệt của người dùng giải thích và thực thi. Rõ ràng, bạn phải gửi mã cho người dùng trước khi trình duyệt của người dùng có thể thực thi nó, để người dùng có thể dễ dàng làm cho trình duyệt của họ hiển thị cho họ mã này.client-side code, meaning they are interpreted and executed by the user's browser. Obviously, you must send the code to the user before the user's browser can execute it, so users can easily make their browsers show them this code.

Php, mặt khác, là mã phía máy chủ. Điều này có nghĩa là máy chủ của bạn chạy nó và chỉ gửi lại kết quả cho người dùng. ("Kết quả", đối với hầu hết các phần, có nghĩa là bất cứ điều gì bạn đặt trong các tuyên bố echo()). Vì vậy, không nên có cách nào để người dùng nhìn vào nguồn gốc. Chúng được giới hạn trong những thứ mà bạn rõ ràng là 'echo' (cộng với có thể là thông báo lỗi PHP, nếu bạn đã bật chúng).server-side code. This means that your server runs it, and only sends back the results to the user. ("Results", for the most part, means anything you put in echo() statements). Thus, there should be no way for users to look at the original source. They are limited to stuff that you explicitly 'echo' (plus maybe PHP error messages, if you have them enabled).

Nếu ai đó đoán URL của tập lệnh PHP và cố gắng truy cập trực tiếp vào URL, máy chủ vẫn sẽ chỉ đi qua và chạy tập lệnh và chỉ gửi lại đầu ra cho người dùng. Máy chủ chạy tập lệnh mỗi khi nó được yêu cầu. Những gì người dùng sẽ thấy phụ thuộc vào tập lệnh cụ thể và cấu hình máy chủ của bạn. Nếu tập lệnh yêu cầu đầu vào của người dùng và không có gì được cung cấp, thì có khả năng người dùng sẽ chỉ thấy một thông báo lỗi.

ĐỌC/Viết quyền được yêu cầu để người dùng thực sự làm cho PHP hoạt động hoặc có thể truy cập R/W của người dùng vào các tệp PHP và trang web sẽ hoạt động tương tự khi truy cập PHP khi người dùng sắp xếp yêu cầu bằng cách sử dụng trang web ?

Tôi không biết ý bạn là gì, bạn có thể giải thích không?

Mục lục

  • Các vấn đề liên quan đến byte null

PHP phải tuân theo bảo mật được tích hợp trong hầu hết các hệ thống máy chủ liên quan đến quyền trên cơ sở tệp và thư mục. Điều này cho phép bạn kiểm soát các tập tin nào trong hệ thống tập tin có thể được đọc. Cần cẩn thận với bất kỳ tệp nào có thể đọc được thế giới để đảm bảo rằng chúng an toàn khi đọc bởi tất cả người dùng có quyền truy cập vào hệ thống tập tin đó.

Vì PHP được thiết kế để cho phép truy cập cấp độ người dùng vào hệ thống tập tin, nên hoàn toàn có thể viết tập lệnh PHP cho phép bạn đọc các tệp hệ thống như /etc /passwd, sửa đổi kết nối Ethernet của bạn, gửi công việc máy in lớn, v.v. Có một số ý nghĩa rõ ràng, trong đó bạn cần đảm bảo rằng các tệp mà bạn đọc và ghi vào là những tệp thích hợp.

Hãy xem xét tập lệnh sau, trong đó người dùng chỉ ra rằng họ muốn xóa một tệp trong thư mục nhà của họ. Điều này giả định một tình huống trong đó giao diện web PHP thường xuyên được sử dụng để quản lý tệp, vì vậy người dùng Apache được phép xóa các tệp trong thư mục nhà người dùng.

Ví dụ #1 Kiểm tra biến kém dẫn đến ....

// remove a file from the user's home directory
$username $_POST['user_submitted_name'];
$userfile $_POST['user_submitted_filename'];
$homedir  "/home/$username";unlink("$homedir/$userfile");

echo

"The file has been deleted!";
?>

Vì tên người dùng và tên tệp có thể được đăng từ mẫu người dùng, họ có thể gửi tên người dùng và tên tệp thuộc về người khác và xóa nó ngay cả khi họ không được phép làm như vậy. Trong trường hợp này, bạn muốn sử dụng một số hình thức xác thực khác. Hãy xem xét những gì có thể xảy ra nếu các biến được gửi là "../etc/" và "passwd". Mã sau đó sẽ đọc một cách hiệu quả:

Ví dụ #2 ... một cuộc tấn công hệ thống tập tin

// removes a file from anywhere on the hard drive that
// the PHP user has access to. If PHP has root access:
$username $_POST['user_submitted_name']; // "../etc"
$userfile $_POST['user_submitted_filename']; // "passwd"
$homedir  "/home/$username"// "/home/../etc"unlink("$homedir/$userfile"); // "/home/../etc/passwd"echo "The file has been deleted!";
?>

Có hai biện pháp quan trọng bạn nên thực hiện để ngăn chặn những vấn đề này.

  • Chỉ cho phép các quyền hạn chế đối với nhị phân người dùng web PHP.
  • Kiểm tra tất cả các biến được gửi.

Đây là một kịch bản cải tiến:

Ví dụ #3 Kiểm tra tên tệp an toàn hơn

// removes a file from the hard drive that
// the PHP user has access to.
$username $_SERVER['REMOTE_USER']; // using an authentication mechanism
$userfile basename($_POST['user_submitted_filename']);
$homedir  "/home/$username";$filepath "$homedir/$userfile";

if (

file_exists($filepath) && unlink($filepath)) {
    
$logstring "Deleted $filepath\n";
} else {
    
$logstring "Failed to delete $filepath\n";
}
$fp fopen("/home/logging/filedelete.log""a");
fwrite($fp$logstring);
fclose($fp);

echo

htmlentities($logstringENT_QUOTES);?>

Tuy nhiên, ngay cả điều này không phải là không có sai sót của nó. Nếu hệ thống xác thực của bạn cho phép người dùng tạo đăng nhập người dùng của riêng họ và người dùng đã chọn đăng nhập "../etc/", hệ thống lại được hiển thị một lần nữa. Vì lý do này, bạn có thể thích viết một kiểm tra tùy chỉnh hơn:

Ví dụ #4 Kiểm tra tên tệp an toàn hơn

$username     $_SERVER['REMOTE_USER']; // using an authentication mechanisim
$userfile     $_POST['user_submitted_filename'];
$homedir      "/home/$username";$filepath     "$homedir/$userfile";

if (!

// remove a file from the user's home directory
$username $_POST['user_submitted_name'];
$userfile $_POST['user_submitted_filename'];
$homedir  "/home/$username";unlink("$homedir/$userfile");
0

Tùy thuộc vào hệ điều hành của bạn, có rất nhiều tệp mà bạn nên quan tâm, bao gồm các mục nhập thiết bị (/ dev/ hoặc com1), các tệp cấu hình (/ etc/ tệp và các tệp .ini), các khu vực lưu trữ tệp nổi tiếng (/home/, tài liệu của tôi), v.v. Vì lý do này, thường dễ dàng tạo ra một chính sách mà bạn cấm mọi thứ ngoại trừ những gì bạn cho phép rõ ràng.

ẩn danh ¶

17 năm trước

// remove a file from the user's home directory
$username $_POST['user_submitted_name'];
$userfile $_POST['user_submitted_filename'];
$homedir  "/home/$username";unlink("$homedir/$userfile");
1

// remove a file from the user's home directory
$username $_POST['user_submitted_name'];
$userfile $_POST['user_submitted_filename'];
$homedir  "/home/$username";unlink("$homedir/$userfile");
2

// remove a file from the user's home directory
$username $_POST['user_submitted_name'];
$userfile $_POST['user_submitted_filename'];
$homedir  "/home/$username";unlink("$homedir/$userfile");
3

// remove a file from the user's home directory
$username $_POST['user_submitted_name'];
$userfile $_POST['user_submitted_filename'];
$homedir  "/home/$username";unlink("$homedir/$userfile");
4

// remove a file from the user's home directory
$username $_POST['user_submitted_name'];
$userfile $_POST['user_submitted_filename'];
$homedir  "/home/$username";unlink("$homedir/$userfile");
5

// remove a file from the user's home directory
$username $_POST['user_submitted_name'];
$userfile $_POST['user_submitted_filename'];
$homedir  "/home/$username";unlink("$homedir/$userfile");
6

fmrose tại ncsu dot edu ¶

17 năm trước

// remove a file from the user's home directory
$username $_POST['user_submitted_name'];
$userfile $_POST['user_submitted_filename'];
$homedir  "/home/$username";unlink("$homedir/$userfile");
7

// remove a file from the user's home directory
$username $_POST['user_submitted_name'];
$userfile $_POST['user_submitted_filename'];
$homedir  "/home/$username";unlink("$homedir/$userfile");
8

// remove a file from the user's home directory
$username $_POST['user_submitted_name'];
$userfile $_POST['user_submitted_filename'];
$homedir  "/home/$username";unlink("$homedir/$userfile");
6

fmrose tại ncsu dot edu ¶

Devik tại CDI dot cz ¶

echo0

21 năm trước

Latchezar tzvetkoff ¶

echo1

echo2

// remove a file from the user's home directory
$username $_POST['user_submitted_name'];
$userfile $_POST['user_submitted_filename'];
$homedir  "/home/$username";unlink("$homedir/$userfile");
6

13 năm trước

Cronos586 (at) caramail (dot) com ¶

echo4

20 năm trước

17 năm trước

echo5

echo6

echo7

// remove a file from the user's home directory
$username $_POST['user_submitted_name'];
$userfile $_POST['user_submitted_filename'];
$homedir  "/home/$username";unlink("$homedir/$userfile");
6

fmrose tại ncsu dot edu ¶

Devik tại CDI dot cz ¶

echo9

"The file has been deleted!";
?>
0

"The file has been deleted!";
?>
1

"The file has been deleted!";
?>
2

// remove a file from the user's home directory
$username $_POST['user_submitted_name'];
$userfile $_POST['user_submitted_filename'];
$homedir  "/home/$username";unlink("$homedir/$userfile");
6

Người dùng có thể truy cập các tệp PHP không?

Nếu máy chủ của bạn được cấu hình đúng và không có lỗi trong mã PHP của bạn, thì nội dung của tệp PHP không thể được truy cập bởi công chúng. Nếu nó được cấu hình kém hoặc có lỗi, thì nội dung có thể có sẵn cho bất kỳ kẻ tấn công nào.. If it's poorly configured or there are bugs, then the contents may be available to any attacker.

Mã PHP có được gửi đến máy khách không?

PHP là ngôn ngữ phía máy chủ, có nghĩa là bất cứ điều gì nó chạy sẽ được chạy và hiển thị trên máy chủ của bạn, điều duy nhất được gửi lại cho máy khách là phản hồi mà bạn đưa ra.Điều này có nghĩa là không có mã PHP nào được hiển thị trong trình duyệt web cũng như không thể truy cập thông qua bảng điều khiển.the only thing that is sent back to the client is the response that you give it. This means that no PHP code will be visible in the web browser nor is accessable via the console.

Có thể truy xuất mã nguồn PHP của một trang web không?

Bạn không thể làm điều đó.Bởi vì tập lệnh phía máy chủ (ở đây các tập lệnh PHP) thực thi trên máy chủ web và đầu ra của nó được nhúng bên trong HTML, sau đó được ném trở lại trình duyệt của bạn.Vì vậy, tất cả những gì bạn có thể xem là HTML.. Because the server side script (here PHP scripts) execute on the web server and its output is embedded inside HTML which is then thrown back to your browser. So all you can view is the HTML.

PHP có thể chạy mà không cần máy chủ?

Bạn có thể tạo một tập lệnh PHP để chạy nó mà không cần bất kỳ máy chủ hoặc trình duyệt nào.Bạn chỉ cần trình phân tích cú pháp PHP để sử dụng nó theo cách này.Loại sử dụng này là lý tưởng cho các tập lệnh thường xuyên được thực hiện bằng cron (trên *Nix hoặc Linux) hoặc Trình lập lịch tác vụ (trên Windows).Các tập lệnh này cũng có thể được sử dụng cho các tác vụ xử lý văn bản đơn giản.. You only need the PHP parser to use it this way. This type of usage is ideal for scripts regularly executed using cron (on *nix or Linux) or Task Scheduler (on Windows). These scripts can also be used for simple text processing tasks.