2017-04-15 45 views
10

Ben çalıştırmak için bir sistem komut tetikleyen bir ActiveJob:raylar güvenli komuta

`grunt custom-job --src=files --dest="file" --vars='#{user_input_vars_from_json}'` 

Nokta varlık

user_input_vars_from_json 

olarak gelen bir json yapılandırma mı olduğunu Bir kontrolörden kullanıcı giriş parametresi. Json formatını doğrularım ama sistem komutuma zararlı kodların gönderilmemesini nasıl sağlayabilirim?

cevap

1

Bunu şu şekilde önizlemek istiyorum: Herhangi bir kullanıcı girdisi tehlikeli olarak değerlendirilmelidir. Kullanıcı tarafından sağlanan girdileri kullanarak herhangi bir komutu çalıştırmanızı önermem.

Yapmak istediğiniz ilk şey girişi mümkün olduğunca kilitlemek. Arabellek taşması ve DoS saldırılarını önlemek için user_input_vars_from_json uzunluğunu kısıtlamayı düşünün. Ayrıca, istenmeyen anahtarları/değerleri filtrelemek için user_input_vars_from_json JSON'da ayarlamaya çalıştığınız "vars" ı hem doğrulamak hem de kısıtlamak için bir yol bulmaya çalışmanızı öneririz.

require 'shellwords' 
system("grunt", "custom-job", "--src=files", '--dest="file"', "--vars=\"#{Shellwords.escape(user_input_vars_from_json)}\"" 
: Giriş temizlendikten sonra

, işinden komutu yürüterek mümkün olduğunca güvenli olarak yaklaşmak için Shellwords birlikte Kernel#system kullanabilirsiniz