PHP kullanıcı kodu değerlendirilmesi güvenlik endişeleri nelerdir?

9 Cevap php

Ben güvenlik kaygıları böyle bir PHP değerlendirici uygulanması için vardır merak ediyorum:

<?php eval($_POST['codeInput']); %>

Bu yüzden vb DB girdisine karşı dezenfektan büyük bir sorun değil, bir PHP sandbox yapma bağlamında olduğunu.

Dosya üzerinde barındırılan sunucu yok kullanıcıları.

Ben Ruby yüzden (en azından belirsiz detayları) bilge ilgili güvenlik neler merak simülatörleri gördüm.


Tüm teşekkürler. Ben hepsi yararlıdır, çünkü kabul etmek cevap hangi bile emin değilim.

Owen's answer I (sunucu kendisi risk altında olacaktır) şüpheli özetler.

arin's answer potansiyel sorunların büyük bir örnek verir.

Geoff's answer ve randy's answer Eğer simülasyon türü yetenekleri ulaşmak için kendi değerlendirici yazmak gerekir genel görüşünü yansıtmaktadır.

9 Cevap

Eğer eval() 'gibi bir şey d eğer potansiyel gerçekten büyük dertte olabilir

<?php
   eval("shell_exec(\"rm -rf {$_SERVER['DOCUMENT_ROOT']}\");");
?>

Bu uç bir örnek ama bu durumda sitenizin sadece silinmiş olacaktı. umarım izinleri buna izin olmaz ama, bu sıhhileştirilmesinde & ihtiyacını göstermek yardımcı olur denetler.

bunu yapmaz.

onlar temelde PHP yapabileceğiniz şey erişimi (/ vs çalıştırmak için kod eklemek için değişkenler, diğer makinelere açık bağlantı her türlü set olsun, dosya sistemi etrafında bakmak ..)

Eval () işlevi sterilize etmek zordur ve hatta eğer kesinlikle bunun etrafında bir yolu olmaz. 'Exec' süzülmüş bile, yapmanız gereken tüm şekilde bir değişken dize 'exec' tutkal, ve sonra $ değişken () etmektir. Sen hayali güvenliğin en az çeşit elde etmek gerçekten dili sakat gerekiyordu.

Eğer .. endişeler vardır not specific to PHP. diyebiliriz bir çok şey vardır

Burada basit bir cevabı var:

Any input to your machine (or database) needs to be sanitized.

Kod oldukça fazla kullanıcı istedikleri herhangi bir kod çalıştırmak sağlar gönderdiniz pasajı, bu yüzden özellikle tehlikeli.

Burada kod enjeksiyon oldukça iyi bir tanıtım makale var:

Wikipedia on Code Injection.

Eğer keyfi kod sunucu üzerinde çalışmasına izin verirseniz, bir daha sunucu değil.

Sevgili tanrı NO. Hatta başlık yalakalık. Kullanıcı keyfi kod her türlü çalışmasına izin onlara sunucuyu teslim gibi

Biliyorum bana yukarıda zaten insan olduğunu söyledi. Ama inan bana. Yani birisi girdiyi söyleyebilirim ki yeterli kez asla.

Eğer really, really kullanıcı kodu çeşit çalışmasına izin vermek istiyorsanız. Kullanıcı bunu yapmak için kullanabileceğiniz psudo dil çeşit oluşturarak kullanıcı için kullanılabilir komutların bir alt kümesini yapmak. Yol bbcode veya markdown işleri A-la.

Inşa etmek isteyen varsa, bir online PHP interpreter, sen eval kullanmak gerçek bir REPL tercüman inşa etmek değil gerekir.

Aksi halde, hiç keyfi kullanıcı kod çalıştırmasına asla. Hiç.

NOT filtresiz kodu, sunucu, dönem idam izin vermeyin.

http://tryruby.hobix.com/ Ben dili kendiniz bir alt bölümünü kodlama çalışır: Eğer böyle burada görülen aracı olarak dilin interaktif gösteri için izin veren bir araç yaratmak isterseniz. İdeal olarak, yeni programcılar için basit kavramları göstermek için kullanıyor olacak, böylece düzgün tüm özelliklerini uygulamak eğer alakasız.

Bunu yaparak bir white list bilinen kabul edilebilir girdi yoluyla girişini kontrol edebilirsiniz. Giriş beyaz listede değilse yürütülmez.

İyi şanslar!

Zaten cevap olarak, size girişleri sterilize etmek gerekir. Ben böyle "exec" ve temelde her kötü niyetli komut PHP (veya istismar edilebileceği) sunmak için var gibi istenmeyen komutları kaldırmak için bazı tür bazı regex-Filitre kullanabilirsiniz sanırım, ve bu bir çok şey.