Exec önce bir dize güvenliğini () Ing

3 Cevap php

Ben bir kullanıcı girilen $ ImageUrl alır ve şunları yapar bir PHP uygulaması var:

exec('convert "'.$url.'" -thumbnail 80x500 "images/out.jpg"');

Şimdi açıkçası ben rasgele kod yürütme kullanıcıların durdurmak için bu ile bazı önlemler almak zorunda. Örneğin, kullanıcı kümeleri $url için ";rm -rf *;" hiç iyi olup olmadığını.

Onlar ne tür olursa olsun, onların giriş convert bir parametre olmaktan kaçamaz böylece Yani başlayanlar için ben " süzmek gerekiyor. Ama ben de ; süzmek gerekir? Ben onları noktalı virgül ile adresler gördüm ... ve noktalı virgül filtreleyerek, burada gerçekten tehlike ise " beni hala güvende doğru tutmak istiyorsunuz? Fakat URL'ler " olabilir? Ve ben izlemek gereken başka karakterler var mı?

Belki yerine karakterler filtreleme ben onları kaçmaya çalışmalısınız. Yani her karakter kabuk tarafından özel olarak yorumlanır kaçmaya çalışmalısınız? Ya da sadece her şey "pre-kaçtı", çift-tırnak içinde olduğunu verilen bir tür " olarak kaçmak?

Benim başıboş karışıklık için, ben bu anda sadece yeniyim ve güvenli kalmak istiyorum Üzgünüm!

Thanks,
Mala

3 Cevap

Peki, kullandığınız filter_var, URL URL olduğundan emin olmak istiyorsanız

filter_var($url, FILTER_VALIDATE_URL);

Bu hala geçerli bir URL olsa da, hangi example.com/foo?;rm -rf gibi bir URL temin engellemek olmaz. Ben bu rm yürütmek neden olur emin değilim, ama aynı zamanda parse_url() ile URL'yi kontrol ve sorgu kısmını ihmal olabilir.

Genellikle de bu bakmak için iyi bir fikirdir:

Ayrıca PHP Manual on securing user input bkz.

Sen escapeshellarg işlevini kullanabilirsiniz.

O $ url sağlamak için normal ifadeleri kullanan tek geçerli dosya adı karakterleri içerir, örneğin, "(\ \ \ W -. \ /) {1.256}". Artı, ben rastgele bir dosya olması için dosyayı kullanıcı yüklenenler yeniden adlandırma, ya da en azından bir beyaz liste dosya (yani aynı regex kullanarak) hayal. sha1. Dahili veya md5. Dahili kullanımı kolay formatları vardır.