Chuyển tới nội dung chính

Bảo vệ tập lệnh và sử dụng require đúng cách


Tại sao require có thể là một rủi ro bảo mật?

  • Các mô-đun tập lệnh XXTouch đã mã hóa có thể được nhập bởi các tập lệnh hoặc mô-đun khác thông qua require.
  • Khi tập lệnh của bạn được tải thông qua require, môi trường toàn cục là không đáng tin cậy; các hàm mà tập lệnh của bạn gọi có thể đã bị thay thế.

Làm thế nào để sử dụng require một cách an toàn?

  • XXTouch đảm bảo một số hàm của mô-đun được khôi phục về trạng thái ban đầu trước khi script được tải thông qua require. Điều này bao gồm tất cả các hàm trong os, io, string, device, http, file, và table.
  • Bạn có thể sao chép sâu môi trường toàn cục vào một môi trường riêng của mô-đun để gọi an toàn các hàm của những mô-đun trên. Ví dụ:
    -- Đặt điều này ở đầu tiên của tập lệnh của bạn
    local _ENV = table.deep_copy(_ENV)
    -- Nội dung tập lệnh ở dưới đây
    --
    -- Cuối cùng, bạn có thể trả về các hàm hoặc hằng số được xuất
  • Khi một mô-đun được tải thông qua require, biến toàn cục been_require được thiết lập là true một cách không điều kiện. Bạn có thể sử dụng nó để phát hiện xem tập lệnh hiện tại có đang được tải bởi require hay không. Ví dụ:
    -- Đặt điều này ở đầu tiên của tập lệnh của bạn
    if been_require then
    return -- thoát ngay lập tức nếu được tải thông qua require
    end
    -- Nội dung tập lệnh ở dưới đây