Công cụ thành viên

Công cụ trang web


programming:module:security

Khác biệt

Đây là những khác biệt giữa hai phiên bản của trang.

Liên kết đến bản xem so sánh này

Phiên bản trước của cả hai bênPhiên bản trước
Phiên bản sau
Phiên bản trước
programming:module:security [2015/11/11 14:23] hoaquynhtim99programming:module:security [2015/11/18 08:46] (hiện tại) hoaquynhtim99
Dòng 1: Dòng 1:
 ===== Bảo mật trong kiểm tra tồn tại file với đường dẫn file nhập từ người dùng ===== ===== Bảo mật trong kiểm tra tồn tại file với đường dẫn file nhập từ người dùng =====
 +Thông thường để kiểm tra file hoặc thư mục tồn tại ta dùng hàm file_exists, để kiểm tra file tồn tại dùng hàm is_file, để kiểm tra thư mục tồn tại dùng hàm is_dir. Tuy nhiên, cách kiểm tra này không an toàn đối với đường dẫn file do người dùng nhập vào, theo đó người dùng có thể thông qua ô nhập liệu để dò ra các file bí mật như file config, các file ngầm định không cho người dùng biết...
 +Ví dụ: Trong module news, khi thêm bài viết có ô chọn hình minh họa như ảnh 
 +{{ programming:module_nv4:chon-hinh-minh-hoa.png }}
 +Nếu chỉ thực hiện việc đọc dữ liệu sau đó kiểm tra is_file:
 +<code php>
 +$rowcontent['homeimgfile'] = $nv_Request->get_title( 'homeimg', 'post', '' );
  
 +if( is_file( NV_DOCUMENT_ROOT . $rowcontent['homeimgfile'] ) )
 +{
 +    $lu = strlen( NV_BASE_SITEURL . NV_UPLOADS_DIR . '/' . $module_upload . '/' );
 +    $rowcontent['homeimgfile'] = substr( $rowcontent['homeimgfile'], $lu );
 +}
 +</code>
  
 +Thì sau khi kiểm tra giá trị $rowcontent['homeimgfile'] được ghi vào CSDL, kẻ phá hoại có thể dựa vào dữ liệu đó để kiểm tra sự tồn tại của các file hệ thống.
 +
 +Để đảm bảo an toàn, người lập trình module cần sử dụng hàm nv_is_file thay vì is_file hay file_exists. Khi đó đoạn code trên được viết lại
 +<code php>
 +$rowcontent['homeimgfile'] = $nv_Request->get_title( 'homeimg', 'post', '' );
 +
 +if( nv_is_file( $rowcontent['homeimgfile'], $uploads_dir_user ) )
 +{
 +    $lu = strlen( NV_BASE_SITEURL . NV_UPLOADS_DIR . '/' . $module_upload . '/' );
 +    $rowcontent['homeimgfile'] = substr( $rowcontent['homeimgfile'], $lu );
 +}
 +</code>
 +
 +Cách sử dụng hàm [[:programming:function#nv_is_file|nv_is_file]] tham khảo tại [[:programming:function#nv_is_file|Đây]]
programming/module/security.1447226634.txt.gz · Sửa đổi lần cuối: 2015/11/11 14:23 bởi hoaquynhtim99