Php'de kötülük ne zaman değerlendirilir?


84

Php'de geliştirdiğim tüm yıllarda, bunu kullandığımı her zaman duymuşumdur. eval() kötü duymuşumdur.

Aşağıdaki kodu göz önünde bulundurarak, ikinci (ve daha zarif) seçeneği kullanmak mantıklı olmaz mı? Değilse neden?

// $type is the result of an SQL statement
// e.g. SHOW COLUMNS FROM a_table LIKE 'a_column';
// hence you can be pretty sure about the consistency
// of your string
$type = "enum('a','b','c')";

// possibility one
$type_1 = preg_replace('#^enum\s*\(\s*\'|\'\s*\)\s*$#', '', $type);
$result = preg_split('#\'\s*,\s*\'#', $type_1);

// possibility two
eval('$result = '.preg_replace('#^enum#','array', $type).';');

2
eval HER ZAMAN kötüdür, kod yazmanın her zaman daha iyi bir yolu vardır, özellikle PHP anonim işlevler sunduğundan beri. Bu örnekte kullanacağım$result = array(); preg_replace_callback('#^enum\s*\(\s*\'|\'\s*\)\s*$#', function($m) use($result) { $result[] = $m[1]; }, $type);
Geoffrey

Doğrusu, php ile ilgili ana sorunun dilin kendisi değil, onu kullanan insanlar olduğunu düşünüyorum. Bu soruya verilen üç doğru cevap (thomasrutter, braincracking ve benim), kimsenin aleyhinde bir nokta olmadan olumsuz oy aldı. Öte yandan bir cevap, örnek veya açıklama olmadan "Bazen eval () tek / doğru çözümdür" iddiasında bulunur ve bu konuda en çok oy alır ...
Francois Bourgeois

Yanıtlar:


134

Eval () saf kötü diye adlandırırken dikkatli olurum. Dinamik değerlendirme güçlü bir araçtır ve bazen hayat kurtarıcı olabilir. Eval () ile PHP'nin eksiklikleri giderilebilir (aşağıya bakın).

Eval () ile ilgili temel sorunlar şunlardır:

  • Olası güvenli olmayan girdi. Güvenilmeyen bir parametrenin iletilmesi başarısız olmanın bir yoludur. Bir parametrenin (veya bir kısmının) tamamen güvenilir olduğundan emin olmak genellikle önemsiz bir görev değildir.
  • Kurnazlık. Eval () kullanmak kodu akıllı hale getirir, bu nedenle takip edilmesi daha zor olur. Brian Kernighan'dan alıntı yapmak gerekirse , " Hata ayıklama, ilk etapta kodu yazmaktan iki kat daha zordur. Bu nedenle, kodu olabildiğince akıllıca yazarsanız, tanımı gereği hata ayıklamak için yeterince akıllı değilsiniz "

Eval () işlevinin gerçek kullanımıyla ilgili temel sorun yalnızca bir tanesidir:

  • Yeterince düşünmeden kullanan deneyimsiz geliştiriciler.

Genel bir kural olarak şunu takip etme eğilimindeyim:

  1. Bazen eval () tek / doğru çözümdür.
  2. Çoğu durumda kişi başka bir şey denemelidir.
  3. Emin değilseniz, 2'ye gidin.
  4. Aksi takdirde, çok çok dikkatli olun.

4
Bu, eval () 'dan da kaçınmak için yeniden düzenlenebilir, özellikle de $ className beyaz listeye alınmışsa, bu eval () kullanımını eğlendirmek için olmalıdır. Yine de iyi haber, 5.3 itibariyle $ foo :: bar () geçerli.
rojoca

@rojoca: PHP 5.2'de eval () olmadan nasıl yapılacağına dair bize bir örnek verebilir misiniz lütfen?
Michał Rudnicki

30
Eval olarak sayılıp sayılmadığından emin değilim, ama $ sonuç = call_user_func (array ('Foo', 'bar')); tıkır tıkır çalışıyor.
Ionuț G. Stan

3
Aldatıcılıkla ilgili iyi bir nokta - (basit) örneğinizde, bir değişken "hiçbir yerden" ortaya çıkıyor. Kod biraz daha karmaşık hale gelirse, koda bakan ve bu değişkeni takip etmeye çalışan bir sonraki kişiye iyi şanslar (orada bulundum, bunu yaptım, sahip olduğum tek şey bir baş ağrısı ve bu berbat tişörtdü).
Piskvor,

Güvenli olmayan girdilerden kaçınılabilir
thepowerlies

40

Kullanıcı girdisinin değerlendirilen dizeye dahil edilmesi olasılığı çok düşük olduğunda eval kötüdür. Bir kullanıcıdan gelen içerik olmadan değerlendirme yaptığınızda, güvende olmalısınız.

Yine de eval'u kullanmadan önce en az iki kez düşünmelisiniz, aldatıcı derecede basit görünüyor, ancak hata işleme (bkz. VBAssassins yorumu), hata ayıklama vb. Akılda tutulursa, artık o kadar basit değil.

Yani bir kural olarak: Unut gitsin. Eval cevap olduğunda, muhtemelen yanlış soruyu soruyorsunuz! ;-)


6
Bazen cevabı DEĞİLDİR. Çevrimiçi oyun uygulaması üzerinde çalışıyoruz ve varlıklar arasındaki çok karmaşık ilişkiler nedeniyle orada evallerden kaçınmak çok zor ... ancak IMHO, vakaların% 90'ında değerlendirilen cevap değil.
Jet

19
YALNIZCA değerlendirmenin yanıt olduğu bir durumu gerçekten merak ediyorum.
Ionuț G. Stan

2
@Ionut G. Stan Nesneler / varlıklar için veritabanında depolanan özel tetikleyiciler?
Kuroki Kaze

8
Bunların hiçbirinin eval () 'un haklı kullanımları olduğunu gerçekten satın almıyorum. Her durumda, eval () kullanmadan aynı şeyi yapmak en azından mümkündür. PHP eval () olmadan sakat değildir. Verilmiş, eval () bu gibi durumlarda bir kısayoldur, ancak yine de kod yolunuzun takip edilmesini biraz daha zor hale getirir ve sorunları biraz daha zorlaştırır. Benim fikrim bu.
thomasrutter

4
@Christian: Önce bir örnek yazmalısınız ( pastebin.com'u kullanın ve bağlantıyı buraya yapıştırın), kullanımdan kaçınmanın eval()imkansız olduğunu düşündüğünüz yerde , bu daha iyi bir yaklaşım. Pek çok insan eval()bazı durumlarda kaçınılmaz olduğunu söylüyor , ancak tartışabileceğimiz belirli örneklerden bahsetmiyorlar - bu şekilde bu tartışma mantıklı değil. Öyleyse lütfen eval()kaçınılmaz olduğunu söyleyenler önce bunu kanıtlayın!
Sk8erPeter

19

eval her zaman eşit derecede "kötüdür".

Eval () öğesini kötü olarak görürseniz, her zaman kötüdür. Bağlama bağlı olarak kötülüğünü sihirli bir şekilde kaybetmez.

Bana göre, "eval () ne zaman kötü değildir?" eval () kullanmanın sakıncalarının bazı bağlamlarda sihirli bir şekilde ortadan kalktığını ima ediyor gibi görünüyor.

Eval () kullanmak genellikle kötü bir fikirdir çünkü kodun okunabilirliğini, sizin çalışma zamanından önce kod yolunu (ve bunun olası güvenlik sonuçlarını) tahmin etme yeteneğini azaltır ve bu nedenle kodu analiz etme ve hata ayıklama yeteneğini bozar. Eval () kullanmak, değerlendirilen kodun ve onu çevreleyen kodun, PHP 5.5 ve üzeri ile entegre Zend Opcache gibi bir işlem kodu önbelleği veya HHVM'deki gibi bir JIT derleyicisi tarafından optimize edilmesini de engelleyebilir.

Dahası, eval () 'u kullanmanın kesinlikle gerekli olduğu bir durum yoktur - PHP, onsuz tam yetenekli bir programlama dilidir. Eval () ne için kullanmak isterseniz isteyin, bu onu yapmanın başka bir yoludur.

Bunları gerçekten kötülük olarak görüp görmeyeceğiniz veya bazı durumlarda eval () kullanarak kişisel olarak gerekçelendirme hakkınız size bağlıdır. Bazıları için kötülükler onu haklı çıkarmak için çok büyüktür ve diğerleri için eval () kullanışlı bir kısayoldur.


2
Harika bir programcı oldun.
Christian

1
"Ayrıca, eval () 'u kullanmanın kesinlikle gerekli olduğu bir durum yoktur" - PHP belgelerinde verilen örneğe göre, bir veritabanında sakladığım kodu çalıştırmak istersem ne olur?
Yarin

4
Buna göre, veritabanında PHP kodunu saklamanın eşit derecede kötü ve aynı derecede gereksiz olduğunu söyleyebilirim. Neye ulaşmak istiyorsanız, bunu yapmanın PHP'yi veritabanında saklamaktan veya eval () kullanmaktan başka yolları da vardır. İsterseniz yapın ve sizin için yararlı bir kısayol ise, ancak eval () 'a kötü davranırsanız, PHP'yi veritabanında saklamaya da kötü davranmanız gerekir.
thomasrutter

13
Başka bir saldırı vektörü ekler - bir SQL enjeksiyonu daha sonra web sunucusunda keyfi PHP kodunu da çalıştırabilir. Eval () kullanılmasını gerektirir. Bayt kodu önbellekleri ile optimize edilemez. Kodunuzu ve verilerinizi ayırma ilkesini ihlal ediyor. Uygulamanızı daha az taşınabilir hale getirebilir - PHP'yi güncellemek / düzeltmek için veritabanını da güncellemeniz gerekir.
thomasrutter

3
Şunu söyleyebilirim ki, eğer bir şey ancak eval kullanılarak başarılabilirse, o şeyi yapmayı yeniden düşünmek iyi olabilir. Çalışma zamanında dinamik olarak sınıf oluşturmak kötü bir fikir gibi görünüyor. Neden biraz kod üretimi kullanıp onları önceden tanımlayan kodu üretmiyorsunuz?
thomasrutter

15

Bu durumda, bir kullanıcı tarafından bir tabloda rastgele sütunların oluşturulması hiçbir zaman mümkün olmadığı sürece, eval muhtemelen yeterince güvenlidir.

Yine de gerçekten daha zarif değil. Bu temelde bir metin ayrıştırma problemidir ve PHP'nin ayrıştırıcısını işlemek için kötüye kullanmak biraz hilekar görünüyor. Dil özelliklerini kötüye kullanmak istiyorsanız, neden JSON ayrıştırıcısını kötüye kullanmıyorsunuz? En azından JSON ayrıştırıcısıyla, kod yerleştirme olasılığı yoktur.

$json = str_replace(array(
    'enum', '(', ')', "'"), array)
    '',     '[', ']', "'"), $type);
$result = json_decode($json);

Normal bir ifade muhtemelen en bariz yoldur. Bu dizeden tüm değerleri çıkarmak için tek bir normal ifade kullanabilirsiniz:

$extract_regex = '/
    (?<=,|enum\()   # Match strings that follow either a comma, or the string "enum("...
    \'      # ...then the opening quote mark...
    (.*?)       # ...and capture anything...
    \'      # ...up to the closing quote mark...
    /x';
preg_match_all($extract_regex, $type, $matches);
$result = $matches[1];

1
Soruyu kendi başına yanıtlamasa da, bu soruya çok iyi bir cevaptır: Bir numaralandırmayı ayrıştırmanın en iyi yolu nedir ()… teşekkür ederim;)
Pierre Spring

13

eval() yavaş, ama ben buna kötü demezdim.

Kod enjeksiyonuna yol açabilen ve kötü olabilen, yaptığımız kötü kullanımdır .

Basit bir örnek:

$_GET = 'echo 5 + 5 * 2;';
eval($_GET); // 15

Zararlı bir örnek:

$_GET = 'system("reboot");';
eval($_GET); // oops

Kullanmamanızı tavsiye ederim, ancak kullanarsanız eval(), tüm girişleri doğruladığınızdan / beyaz listeye eklediğinizden emin olun.


12

Eval içinde yabancı verileri (kullanıcı girişi gibi) kullandığınızda.

Yukarıdaki örneğinizde bu bir sorun değil.


7

İçeriği bariz bir şekilde çalacağım:

  1. Doğası gereği değerlendirme her zaman bir güvenlik endişesi olacaktır.

  2. Güvenlik endişelerinin yanı sıra, inanılmaz derecede yavaş olma sorunu da var. PHP 4.3.10 üzerinde yaptığım testte normal koddan 10 kat daha yavaş ve PHP 5.1 beta1'de 28 kat daha yavaş.

blog.joshuaeichorn.com: kullanarak-eval-in-php


5

eval()her zaman kötüdür.

  • güvenlik nedeniyle
  • performans nedenleriyle
  • okunabilirlik / yeniden kullanılabilirlik nedenleriyle
  • IDE / araç nedenleriyle
  • hata ayıklama nedenleri için
  • her zaman daha iyi bir yol vardır

@bracketworks: Ama yanılıyorsunuz - tüm bu içsel sorunlar bazı durumlarda sihirli bir şekilde ortadan kalkmaz. Neden yapmalılar? Örneğin performansı ele alalım: Yorumlayıcının son derece yavaş olan eval () işlevini yalnızca mistik "kötü olmayan" bir şekilde kullandığınız için artan hızda çalıştıracağını gerçekten düşünüyor musunuz? Ya da bu adım adım hata ayıklama, şanslı bir günde değerlendirme cümlenizin içinde çalışacak mı?
Francois Bourgeois

3
Açıkçası, bence @ MichałRudnicki'nin cevabı en iyisi. Beni yanlış anlamayın, ne zaman ( kendime ) bir soru sorsam ve cevap şu ki eval(), soruyu yanlış sorduğumu varsayarım; nadiren bu "doğru" cevaptır, ancak genel olarak kötü olduğunu söylemek her zaman yanlıştır.
Dan Lugg

kodu veritabanında saklamak istersem? nasıl uygulayabilirim?
Konstantin XFlash Stratigenas

@KonstantinXFlashStratigenas Kendinize neden yürütülebilir kodu bir veritabanında depoladığınızı sormalısınız. Veritabanı, kodunuzdan kaynaklanan veriler içindir - kodunuzdan değil. En azından saldırı vektörlerini artırıyorsunuz.
Jack B

4

Ayrıca, kodunuzu koruyan insanlara da biraz önem veririm.

eval () sadece bakıp ne olması gerektiğini bilmek kolay değildir, örneğiniz o kadar da kötü değildir, ancak başka yerlerde doğru bir kabus olabilir.


4

Şahsen, bu kodun hala oldukça kötü olduğunu düşünüyorum çünkü ne yaptığını yorumlamıyorsunuz. Ayrıca, girdilerini geçerlilik için test etmiyor, bu da onu çok kırılgan yapıyor.

Ayrıca, eval kullanımlarının% 95'i (veya daha fazlası) aktif olarak tehlikeli olduğundan, diğer durumlarda sağlayabileceği küçük potansiyel zaman tasarrufunun, onu kullanmanın kötü uygulamasına düşmeye değmeyeceğini düşünüyorum. Artı, daha sonra minyonlarınıza eval kullanımınızın neden iyi ve onların kötü olduğunu açıklamanız gerekecek.

Ve tabii ki, PHP'niz Perl'e benziyor;)

Eval () ile ilgili iki temel sorun vardır ("enjeksiyon saldırısı" senaryosu olarak):

1) Zarar verebilir 2) Basitçe çökebilir

ve teknikten çok sosyal olan:

3) İnsanları uygunsuz bir şekilde başka bir yerde kısayol olarak kullanmaya teşvik eder

İlk durumda, rastgele kod çalıştırma riskini alırsınız (tabii ki bilinen bir dizeyi değerlendirirken değil). Yine de girdileriniz düşündüğünüz kadar bilindik veya sabit olmayabilir.

Daha büyük olasılıkla (bu durumda) sadece kilitlenirsiniz ve dizeniz nedensizce anlaşılmaz bir hata mesajı ile sona erer. IMHO, tüm kodlar olabildiğince düzgün bir şekilde başarısız olmalı, başarısız olmalı ve bir istisna atmalıdır (en işlenebilir hata şekli olarak).

Bu örnekte, davranışa kodlamak yerine tesadüfen kodladığınızı öneririm. Evet, SQL enum ifadesi (ve bu alanın numaralandırmasından emin misiniz? - veritabanının doğru sürümünün doğru tablosunun doğru alanını mı çağırdınız? Gerçekten yanıt verdi mi?) PHP'de dizi bildirimi sözdizimi gibi görünüyor, ancak, gerçekten yapmak istediğiniz şeyin, girdiden çıktıya kadar en kısa yolu bulmak değil, belirtilen görevin üstesinden gelmek olduğunu öneririm:

  • Bir numaranız olduğunu tanımlayın
  • İç listeyi çıkarın
  • Liste değerlerini paketinden çıkarın

Bu kabaca sizin seçeneğinizin yaptığı şeydir, ancak açıklık ve güvenlik için bazı if'ları ve yorumları etrafına sararım (örneğin, ilk eşleşme eşleşmezse, istisna atın veya boş sonucu ayarlayın).

Hala kaçan virgül veya alıntılarla ilgili bazı olası sorunlar var ve muhtemelen verileri paketinden çıkarıp alıntı yapmalısınız, ancak en azından verileri kod yerine veri olarak ele alıyor.

Preg_version ile en kötü sonucunuz muhtemelen $ sonuç = null olacaktır, eval sürümünde en kötüsü bilinmemektedir, ancak en azından bir çöküştür.


3

bir dizeyi kod olarak değerlendirir, bununla ilgili sorun, dizenin herhangi bir şekilde "kirlenmiş" olması durumunda, büyük güvenlik tehditlerini açığa çıkarabilmesidir. Normalde sorun, kullanıcı girdisinin dizide değerlendirildiği bir durumda, çoğu durumda kullanıcı, daha sonra eval içinde çalıştırılan kod (örneğin php veya ssi) girebilir, php betiğinizle aynı izinlerle çalışır ve sunucunuza bilgi / erişim elde etmek için kullanılabilir. Kullanıcı girdisinin değerlendirmeye vermeden önce düzgün bir şekilde temizlendiğinden emin olmak oldukça zor olabilir. Başka problemler var ... bazıları tartışmalı


3

PHP, kodunuzu açık evaller yapmak yerine call_user_func aracılığıyla çalıştırılacak şekilde yazmanızı tavsiye eder.


2

Diğer bir neden evalde kötülüktür, eAccelertor veya ACP gibi PHP bayt kodu önbellekleri tarafından önbelleğe alınamamasıdır.


2

Eval () işlevini değil, kötü programlamadır. Bazen birden fazla sitede dinamik programlamada dolaşamadığım için kullanıyorum. İstediğim şeyleri alamayacağım için PHP'nin bir sitede ayrıştırılmasına sahip olamıyorum. Sadece bir sonuç alırdım! Hayatımı çok daha kolaylaştırdığı için eval () işlevinin var olduğu için mutluyum. Kullanıcı girişi? Yalnızca kötü programcılar bilgisayar korsanları tarafından bağlanır. Ben bunun için endişelenmiyorum.


2

Eval () işlevini değil, kötü programlamadır. Bazen birden fazla sitede dinamik programlamada dolaşamadığım için kullanıyorum. İstediğim şeyleri alamayacağım için PHP'nin bir sitede ayrıştırılmasına sahip olamıyorum. Sadece bir sonuç alırdım! Hayatımı çok daha kolaylaştırdığı için eval () işlevinin var olduğu için mutluyum. Kullanıcı girişi? Yalnızca kötü programcılar bilgisayar korsanları tarafından bağlanır. Ben bunun için endişelenmiyorum.

Yakında ciddi sorunların olacağını tahmin ediyorum ...

Dürüst olmak gerekirse, eval gibi aşırı bir işlevin PHP gibi yorumlanmış bir dilde kesinlikle iyi bir kullanımı yoktur. Değerlendirmenin başka, daha güvenli yollarla yürütülemeyen program işlevlerini gerçekleştirdiğini hiç görmedim ...

Değerlendir, tüm kötülüklerin köküdür, tüm kalbimle katılıyorum, kullanıcı girdilerini test etmenin yardımcı olacağını düşünen tüm insanlara. İki kere düşünün, kullanıcı girdisi birçok farklı biçimde gelebilir ve biz konuşurken bilgisayar korsanları, sizin yeterince umursamadığınız bu işlevi kötüye kullanıyor. Bence, tamamen değerlendirmekten kaçının.

Kendi yaratıcılığımı aşan eval işlevini kötüye kullanmak için hazırlanmış örnekler gördüm. Bir güvenlik duruşundan, ne pahasına olursa olsun kaçının ve hatta en azından PHP yapılandırmasında bir 'verilen' yerine en azından bir seçenek olmasını talep edecek kadar ileri giderdim.


"X özelliği ile ilgili kodunuzu ne kadar dikkatli bir şekilde korumaya çalışırsanız çalışın, akıllı bilgisayar korsanları her zaman bir adım öndedir ..." mantığı, yalnızca X == değil, başka herhangi bir tekniğe uygulanabilir eval. Ve bu nedenle, herhangi bir özellik için X: X, tüm değerlendirmelerin köküdür ... eee ... kötü, bu yüzden programlamayı tamamen bıraksanız iyi olur (böylece bu aptal hackerların altından halıyı çekip, sonunda onları alt etmeye devam edersiniz).
Sz.

"eval gibi fahiş bir işlevin kesinlikle iyi bir kullanımı yoktur" -> 'kesinlikle' gibi sözcükleri kullanabilen herkes, ya programlamaya yeni ya da kötü bir programcıdır.
unity100

2

İşte eval kullanmadan bir veritabanından alınan PHP kodunu çalıştırmanın bir çözümü. Tüm kapsam içi işlevlere ve istisnalara izin verir:

$rowId=1;  //database row id
$code="echo 'hello'; echo '\nThis is a test\n'; echo date(\"Y-m-d\");"; //php code pulled from database

$func="func{$rowId}";

file_put_contents('/tmp/tempFunction.php',"<?php\nfunction $func() {\n global \$rowId;\n$code\n}\n".chr(63).">");

include '/tmp/tempFunction.php';
call_user_func($func);
unlink ('/tmp/tempFunction.php');

Temel olarak, bir metin dosyasına dahil edilen kodla benzersiz bir işlev oluşturur, dosyayı içerir, işlevi çağırır ve iş bittiğinde dosyayı kaldırır. Bunu, her adımın işlemek için benzersiz bir kod gerektirdiği günlük veritabanı alımlarını / senkronizasyonlarını gerçekleştirmek için kullanıyorum. Bu, karşılaştığım tüm sorunları çözdü.


Bu, bir yanıta verilen yanıt gibi görünür; lütfen yapabildiğiniz zaman gönderin.
rfornal

1

Eskiden eval () 'u çok kullanırdım, ancak vakaların çoğunun hile yapmak için eval kullanmak zorunda olmadığını gördüm. PHP'de call_user_func () ve call_user_func_array () var. Herhangi bir yöntemi statik ve dinamik olarak çağırmak yeterince iyidir.

Statik bir çağrı gerçekleştirmek için geri çağrınızı dizi ('sınıf_adı', 'yöntem_adı') veya hatta 'sınıf_adı :: yöntem_adı' gibi basit bir dize olarak oluşturun. Dinamik bir çağrı gerçekleştirmek için array ($ nesne, 'yöntem') tarzı geri çağrı kullanın.

Eval () için tek mantıklı kullanım, özel bir derleyici yazmaktır. Bir tane yaptım, ancak eval hala kötü çünkü hata ayıklamak çok zor. En kötüsü, değerlendirilen koddaki ölümcül hata, onu çağıran kodu çökertir. En azından sözdizimini kontrol etmek için Parsekit PECL uzantısını kullandım, ancak yine de neşe yok - bilinmeyen sınıfa ve tüm uygulama çökmelerine başvurmaya çalışın.


0

Güvenlik endişeleri dışında, eval () derlenemez, optimize edilemez veya opcode önbelleğe alınamaz, bu nedenle her zaman normal php kodundan daha yavaş - çok daha yavaş - olacaktır . Dolayısıyla, eval kullanmak onu kötü yapmasa da, performanssızdır. ( gotokötüdür, evalyalnızca kötü bir uygulamadır / kötü kokulu kod / çirkin)


evaldaha düşük bir kötülük derecesi alıyor goto? Ters gün mü?
JLRishe

Sadece php geliştiricilerine goto5.3'te uyguladıkları için kin besliyorum .
Aron Cederholm

1
Hayır, gotofobiler için: araçlar var ve bunları kullanan (ya da kullanmayan) zanaatkarlar var. Öyle asla oldukça uygun araçlar (düzgün) kullanmak için yetersizlik hataları yaparken bir aptal gibi profesyonel görünmesi araçları, ancak. Ama her zaman suçlanacak araçlardır ...
Sz.

0

Çoğu insan, kullanıcı girdisi ile uğraşırken tehlikeli olabileceğine dikkat çekecektir (bununla başa çıkmak mümkündür).

Benim için en kötü yanı, kodunuzun sürdürülebilirliğini azaltmasıdır :

  • Hata ayıklamak zor
  • Güncellenmesi zor
  • Araçların ve yardımcıların kullanımını sınırlar (IDE'ler gibi)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.