NX Lab

Bảo mật cho công cụ nội bộ: tránh lệnh tùy ý, kiểm tra đường dẫn đầu vào và quyền ghi

#Bảo mật#Python1 lượt xem

  1. Quản trị viênQuản trị· 0 điểm

    Câu hỏi ·

    Công cụ nội bộ vẫn cần cẩn thận: đường dẫn người dùng nhập có thể trỏ ra ngoài thư mục cho phép, tên file có thể chứa ký tự nguy hiểm. Vài quy tắc đơn giản ngăn phần lớn rủi ro.

    Bảo mật cho công cụ nội bộ Bảo mật cho công cụ nội bộ

    Các bước thực hiện

    1. Giới hạn thư mục làm việc. Chỉ cho phép đọc ghi trong danh sách thư mục.
    2. Chuẩn hóa đường dẫn. os.path.realpath để loại .. và liên kết.
    3. Kiểm tra phần mở rộng. Chỉ nhận .prt, .stp...
    4. Không chạy lệnh từ dữ liệu. Không dùng eval/exec/shell=True với chuỗi từ người dùng.
    5. Ghi log truy cập. Ai làm gì, lúc nào.

    Code tham khảo (Python)

    import os
    
    THU_MUC_CHO_PHEP = ["D:/Du_an", "D:/NXLab_xuat"]
    DUOI_CHO_PHEP = {".prt", ".stp", ".step", ".pdf", ".csv"}
    
    class DuongDanKhongHopLe(Exception):
        pass
    
    def kiem_tra_duong_dan(duong_dan):
        thuc = os.path.realpath(duong_dan).replace("\\", "/")
        for goc in THU_MUC_CHO_PHEP:
            goc_thuc = os.path.realpath(goc).replace("\\", "/").rstrip("/") + "/"
            if (thuc + "/").lower().startswith(goc_thuc.lower()):
                break
        else:
            raise DuongDanKhongHopLe("Ngoài thư mục cho phép: " + thuc)
        duoi = os.path.splitext(thuc)[1].lower()
        if duoi not in DUOI_CHO_PHEP:
            raise DuongDanKhongHopLe("Loại file không cho phép: " + duoi)
        return thuc
    
    def main():
        thu = [
            "D:/Du_an/ban_ve/a.prt",
            "D:/Du_an/../Windows/System32/config/SAM",
            "C:/Users/Public/x.prt",
            "D:/NXLab_xuat/bao_cao.exe",
        ]
        for p in thu:
            try:
                print("OK   ", kiem_tra_duong_dan(p))
            except DuongDanKhongHopLe as ex:
                print("TỪ CHỐI", p, "->", ex)
    
    if __name__ == "__main__":
        main()
    

    Giải thích code

    • realpath đưa đường dẫn về dạng tuyệt đối thật, loại bỏ .. và liên kết tượng trưng; so sánh tiền tố sau bước đó mới an toàn.
    • Thêm dấu / vào cuối khi so sánh để D:/Du_an2 không bị coi là nằm trong D:/Du_an.
    • Danh sách trắng phần mở rộng ngăn script vô tình ghi hoặc đọc loại file không mong muốn.

    Lỗi thường gặp

    • Danh sách trắng chặt hơn danh sách đen; liệt kê những gì được phép thay vì cấm những gì nghĩ ra.
    • Không bao giờ ghép đầu vào người dùng vào lệnh shell; dùng subprocess với danh sách đối số.

    Code mang tính tham khảo, viết cho NX 12 trở lên (Python journal). Tên menu và một số lớp có thể khác theo phiên bản NX; hãy chạy thử trên bản sao của chi tiết trước khi dùng cho dữ liệu thật.

    Điểm: 0

Trả lời

Đăng nhập để tham gia thảo luận.