2014-08-31 17 views
7

Giả sử tôi muốn cho phép người dùng nhập bất kỳ biểu thức chính quy nào mà anh ta muốn và chuỗi để khớp, và tôi sẽ kiểm tra xem nó có khớp với sử dụng re.compile của Python hay không. Điều đó có an toàn không? Có cách nào để người dùng độc hại gặp sự cố hoặc thực hiện từ xa bằng cách truyền các chuỗi được tạo đặc biệt không?Bảo mật của cụm từ thông dụng

+2

Là một lưu ý phụ, tùy theo nhu cầu của bạn, có thể đáng xem xét một biểu thức _glob_ đơn giản, chứ không phải là regex chính thức. Đối với hầu hết người dùng, nó dễ hiểu hơn. Và nó sẽ đòi hỏi ít năng lượng hơn để xử lý. Nhưng một lần nữa, nó sẽ phụ thuộc vào nhu cầu của bạn ... –

Trả lời

9

Tôi không nghĩ rằng re.compile() sẽ là một vấn đề. Tất nhiên nó có thể ném một ngoại lệ với regexes không hợp lệ, nhưng bạn có thể dễ dàng bắt những người đó. Python regexes không cho phép chú thích mã (không giống như Perl, ví dụ), vì vậy tôi không thấy một cơ chế mà kẻ tấn công có thể sử dụng để tiêm mã độc vào một regex.

Thực tế chạy regex (qua re.search(), v.v.) có thể là một vấn đề, bởi vì Python không thực hiện bất kỳ biện pháp phòng ngừa nào chống lại catastrophic backtracking có thể khiến thời gian chạy của regex tăng vọt.

Có thể nên chạy regex trong một quy trình chuyên dụng và giết nó nếu nó không hoàn thành trong vòng một giây.

Các vấn đề liên quan