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àtruemộ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