var foo = "function(){ alert('meee'); }";
foo();
Yukarıdakileri denedim ama işe yaramıyor, bu işlevi kullanmadan başka bir şekilde değerlendirme yapmanıza gerek yok mu?javascript işlevi için bir dize değiştirme (değerlendirme değil)
thnx
var foo = "function(){ alert('meee'); }";
foo();
Yukarıdakileri denedim ama işe yaramıyor, bu işlevi kullanmadan başka bir şekilde değerlendirme yapmanıza gerek yok mu?javascript işlevi için bir dize değiştirme (değerlendirme değil)
thnx
Eğer doğrudan Function
yapıcı kullanmak istiyorum. Tüm argümanlar dizelerdir. Son argüman fonksiyonun gövdesidir, herhangi bir önde gelen argüman fonksiyonun aldığı argümanların isimleridir.
Anders' örnekten deyimine göre
,var multiply = new Function("x", "y", "return x * y");
Senin durumunda
var multiply = function (x,y) {
return x * y
}
yazmak gibi olurdun,
"function(){ alert('meee'); }"
var ve var
foo
bir fonksiyonu olarak kaydetmek istiyorum. Genel kapsamda
var fn = "function(){ alert('meee'); }";
var foo = new Function("return ("+fn+")")();
foo();
// alerts "meee"
Function
ve eval
arasındaki fark özel kapsamında eval
çalışır olduğunu Function
iken çalışır.
var x="haha", y="hehe";
function test() {
var x=15, y=34;
eval("alert('eval: ' + x + ', ' + y)");
new Function("alert('Func: ' + x + ', ' + y)")();
}
test();
// eval: 15, 34
// Func: haha, hehe
bir aldatıcı sonucu (konsolları
eval
kullanın) alırsınız, konsolda çalıştırmak için çalışmayın. Bir
<script>
etiketine yazarak ve tarayıcıya yükleyerek gerçek sonucu verecektir.
'Fonksiyon' yapıcısının bu fonksiyonu yaratma biçiminin çok fazla aynı olmadığını eval'ın yaptığı gibi. Bu gerçekten "eval" ın sadece başka bir şeklidir, bu yüzden tüm bu gerçekten "eval" sözcüğünü kullanmaktan kaçınmaktır. ama bunu '7' veren pencere [(typeof [] [0]) [3] + "val"] ("4 + 3") 'gibi de yapabilirsiniz. – Claudiu
yinelemek zorundayım. "eval" kullanırsanız komut dosyası enjeksiyonundan veya şifrelerinizi çaldığınızdan korktuğunu söylüyorsunuz. iyi, ** BU DEĞER YARATIYOR ** !!! aynı şeydir - rasgele kod JS tarafından derlenmekte ve çalıştırılmaktadır. Neden kullanıcıların kendi işlevlerini kodunuza sunabilmelerini istiyorsunuz? – Claudiu
Ben bildiğim kadarıyla ... Bir şekilde javascript etrafında geçen içermeyen bir komut dosyası enjeksiyon saldırısına kendinizi savunmasız yapmadan yapmaya çalıştığınız şeyi yapmanın daha iyi bir yolu muhtemelen orada dize.
Biliyorum bu konuda çok şey var ama güvenli bir bilgiye ihtiyacım var. Kullanıcı adlarını ve şifreleri verebileceğine ya da herşeyi sileceğine dair izlenimim var :) – Val
gerçekten javascript'inizin nereden geldiğine bağlı? Eğer bir veritabanındaysa ve kod dizelerinin içine girebilmesinin tek yolu güvenli bir formdadır ya da neyin var, muhtemelen tamam. Öte yandan, eğer kimsenin arka ucuna karşı keyfi bir kod yürütmesine izin verirseniz, muhtemelen sorun çıkarırsınız. En çok düşündüğüm javascript saldırıları, veritabanınızdan ziyade kullanıcı etkileşimini etkileyecek. Tek yapmanız gereken, büyük olasılıkla tuş vuruşlarını kaydeden ve bunları xhr kayıtları veya benzerleri aracılığıyla uzak bir siteye gönderen bir komut dosyasıdır. Bir html elemanından gelen – vicatcu
innerhtml .. – Val
MDC'a göre. Kullanın: Anders söylediği gibi
var multiply = new Function("x", "y", "return x * y");
var theAnswer = multiply(7, 6);
Eminim bir matematik dersi istemedim. tek istediğim metin olarak bir işlev içeren bir dize yapmak ve çağırmak. eval kullanarak, güvenli ve çok yavaş kullanmanız kolay. – Val
@Val, kullanmanız gereken şeylerin bir örneğidir, referans sayfasını okuyun. – Anders
Özelliklerin belirtildiği yerde tekrar okumanızı öneririm.'Reddedilen argümanlar' ve 'arity Deprecated' – Val
Sorunuzla ilgili daha spesifik olabilirseniz, muhtemelen bu yaklaşımı değerlendirmeye ihtiyaç duymadığınız bir alternatif vardır. – rfunduk
well 'function() {alert ('mee');}' yakalamayı başarabilen bir metin şu anda bu fonksiyonu çağırmam gerekiyor ... bence yukarıdaki örnek php üzerinde çalışıyor, muhtemelen bu fikri nasıl aldım ... böylece fonksiyon bir 'iç html'den alınmıştı bu yüzden bir metin olacağını düşündüm. – Val