Bảo vệ hệ thống tệp tin của bạn
Vào tháng Bảy năm 2000, một trang web đã để lọt dữ liệu của khách hàng trong các tệp tin trên một máy chủ Web. Một người xem truy cập vào trang web đó đã điều khiển URL để xem được các tệp tin có chứa dữ liệu. Mặc dù các tệp tin này bị đặt sai vị trí, ví dụ này nhấn mạnh tầm quan trọng của việc bảo vệ hệ thống tệp tin của bạn chống lại những kẻ thâm nhập.
Nếu ứng dụng PHP làm bất cứ điều gì với các tệp tin và có dữ liệu biến đổi mà người sử dụng có thể nhập vào, hãy cẩn thận rằng bạn phải lau chùi sạch sẽ dữ liệu đầu vào của người sử dụng để đảm bảo rằng người sử dụng không thể làm được bất cứ điều gì đối với hệ thống tệp tin mà bạn không muốn họ làm. Liệt kê 1 cho thấy một thí dụ về một trang web PHP để tải xuống một hình ảnh khi cung cấp tên.
Liệt kê 1. Tải xuống một tệp tin
<?php
if ($_POST['submit'] == 'Download') {
$file = $_POST['fileName'];
header("Content-Type: application/x-octet-stream");
header("Content-Transfer-Encoding: binary");
header("Content-Disposition: attachment; filename=\"" . $file . "\";" );
$fh = fopen($file, 'r');
while (! feof($fh))
{
echo(fread($fh, 1024));
}
fclose($fh);
} else {
echo("<html><head><");
echo("title>Guard your filesystem</title></head>");
echo("<body><form id=\"myFrom\" action=\"" . $_SERVER['PHP_SELF'] .
"\" method=\"post\">");
echo("<div><input type=\"text\" name=\"fileName\" value=\"");
echo(isset($_REQUEST['fileName']) ? $_REQUEST['fileName'] : '');
echo("\" />");
echo("<input type=\"submit\" value=\"Download\" name=\"submit\" /></div>");
echo("</form></body></html>");
}
Như bạn có thể thấy, kịch bản tương đối nguy hiểm trong Liệt kê 1 đưa ra phục vụ bất kỳ tệp tin nào mà máy chủ Web có quyền đọc, kể cả các tệp tin trong thư mục phiên làm việc (xem phần "Bảo vệ dữ liệu phiên làm việc của bạn") và thậm chí một số tệp tin hệ thống như
/etc/passwd. Thí dụ này có một hộp văn bản trong đó người sử dụng có thể gõ nhập vào tên tệp tin dùng làm ví dụ, nhưng tên tệp tin đó cũng có thể được cung cấp một cách dễ dàng trong chuỗi truy vấn.
Việc cấu hình cho phép truy cập hệ thống tệp tin tùy theo đầu vào của người sử dụng là nguy hiểm, vì vậy tốt nhất là tránh hoàn toàn việc đó bằng cách thiết kế ứng dụng của bạn để nó sử dụng một cơ sở dữ liệu và các tên tệp tin được tạo ra và giấu kín. Tuy nhiên, không phải lúc nào cũng có thể làm thế. Liệt kê 2 cung cấp một thí dụ về một thủ tục kiểm tra hợp lệ tên tệp tin. Nó sử dụng các biểu thức chính quy để đảm bảo rằng chỉ các ký tự hợp lệ là được sử dụng trong tên tệp tin và đặc biệt kiểm tra các ký tự chấm chấm:
...
Không có nhận xét nào:
Đăng nhận xét