Magento EKG Kodlama Standardı'nda neden bu kadar çok PHP işlevi engellenmiyor?


30

Magento EKG Kodlama Standardı, Magento 1 eklentileri için standart olarak (en azından bir tür) resmi görünüyor:

https://github.com/magento-ecg/coding-standard

Ancak tüm kuralların arkasındaki gerekçeyi anlamıyorum ve kod iletici kuralları sadece mesajları ile birlikte yardımcı olmuyor. Standartla ilgili ayrıntılı bir dokümantasyon var mı? Yaygın olarak kullanılan en iyi uygulamaları ve geliştiricilerin rehberliğini biliyorum, ancak bu kodlama standartları hakkında özel bir şey bulamıyorum.

Beni en çok rahatsız eden şey PHP işlevlerini kullanmama konusundaki katılık.

Örneğin: PHP ile ilgili her dosya sistemi neden tek tek yasaklanmıştır ?

Sanırım, kullanmanız gerekiyor Varien_Io_File, Varien_File_Objectvb. Ama temel geliştiriciler bile tüm Varien sınıflarının farkında değiller ve sıklıkla aşağıdaki gibi şeyler bulursunuz Mage_ImportExport_Model_Import_Adapter_Csv:

    $this->_fileHandler = fopen($this->_source, 'r');

Yani, çekirdek, sık sık, en iyi örnek değil.

Diğer IMHO şüpheli yasak fonksiyonlar:

  • mb_parse_str
  • parse_str
  • parse_url
  • base64_decode

    • evet, arka iç mekanlarda kullanılıyor ancak yasak evalyeterli olmalı ve ikili verileri kodlamak gibi yasal kullanım durumları da var. Ve json_decodebunun dışında (yasak değil) bunun için çekirdek yardımcı yoktur.

Kaynak: https://github.com/magento-ecg/coding-standard/blob/master/Sniffs/Security/ForbiddenFunctionSniff.php

Temelde sorumu aşağıya çekiyor: Bu standart nerede belgeleniyor? Ve / veya "bu yerel PHP fonksiyonları yerine kullanılacak şeyler" listesi var mı?


1
Magento, Zend Framework üzerine inşa edilmiştir. Neden Zend standartlarını kullanmıyorsun?
zhartaunik

EKG, döngülere yüklenmiş modeller varmış gibi Magento'ya özel kontroller yapar. Bu girinti ve parantez gibi temel stil kontrolleri ile ilgili değildir.
Fabian Schmengler

1
Yasaklı olarak "Ham SQL sorgularını" listelemek de saf görünüyor. Elbette çoğu durumda ham SQL
yapmazsınız

1
@ pspahn Amacınızı anlıyorum, ancak Zend_Dbsorgu oluşturucunun herhangi bir SQL sorgusu oluşturabilmesi mümkün değil mi?
Fabian Schmengler

Elbette, ancak ham SQL'i girdi olarak kullanarak da bir selectifade oluşturamıyor Zend_Dbmusunuz? Sanırım github.com/kalenjordan/custom-reports'un arka uçta yaptığı şey bu.
pspahn

Yanıtlar:


28

Bu konuda EKG ekibinden resmi olmayan bir cevap geldi:

Her şeyden önce, işaretlenen işlevlerin mutlaka izin verilmesine gerek yoktur - yasal kullanım sağlamak için kullanımla ilgili manuel bir inceleme başlatmaları gerekir. İyi / kötü kod puanlama aracı değil, bir inceleme yardımcı aracıdır.

İkincisi, varsayım, eğer ek işlevsellik veya koruma sunabilecekleri için Magento paketleyicilerini (fonksiyonlar / sınıflar) kullanmak daha iyiydi.

Üçüncüsü, belirli aramalarda olduğu gibi, base64_decode, kötü niyetli enjekte edilen kod için sıkça kullanılır ve parse_str gibi geri kalanlar, özellikle bilinmeyen veya kullanıcı tarafından sağlanan girdilerle ilgileniyorsa savunmasız olabilir - bkz. Örneğin, http://php-security.org/2010/05/ 31 / bezleri-2010-049-php-parse_str-kesme-bellek bozulması-savunma /

Yine, bu kodun kötü olarak reddedilmemesi için gözden geçirilmesi için işaret ediyor.

Umarım yardımcı olur.


Öyleyse neden "meşru kullanımını sağlamak için kodu gözden geçirmelisiniz" yerine "işlev yasak" yazıyorlar ?!
Siyah,

11

Kodlama Standardının iki hedefi vardır.

  1. olası sorunlu kısımların bulunmasını çok daha kolaylaştırır. Deneyimli bir geliştirici, yeni bir modülün hangi bölümlerini incelemesi gerektiğini zaten biliyor ve bu standart onları kendisi için işaretliyor ve listeliyor. Öyle değil, bu parçaları çıkarabiliyor, ancak gerekli, sorunlu veya her ikisinin de olup olmadığını incelemek için.

  2. hangi şeylerden kaçınması gerektiği konusunda deneyimsiz geliştiricileri destekleyin. Tüm işaretli fonksiyonlar belirli problemler için iyi çözümler olsa da, problemli bir şekilde kullanımı çok kolaydır. Geliştiricilerin sorun hakkında daha fazla düşünmelerine ve genellikle standartla uyuşmayan daha iyi çözümlere yönlendirmelerine neden olur.

Ve bazen, en deneyimli geliştiriciler bile standardı körlemesine takip eder ve sadece bir topluluk zorunlu standardı ihlal etmemek için en acımasız geçici çözümleri oluşturur.

biraz ek bilgi

Dosya işlevleri genellikle protokol sarıcılarının kullanımına izin verir, http: // ile başlayan bir dosya yolu anlamına gelir, bu genellikle "evi aramak" için kullanılan ve zaman zaman bir dükkanı öldürür, çünkü sunucuya erişilemez (30 saniye varsayılan zamanaşımı) ve çok merkezi bir yerde yerleşiktir.

Her yerde sql fark edildi, kimse orada kaç tane sql enjeksiyon deliğinin hala mevcut olduğuna inanmıyor. Müthiş bir örnek, Mysql web sitesinde Aramanın bir olmasıydı.

Bir yerde json_decode için bir çekirdek yardımcı var, ama çok eski bir uygulaması var, sadece json_decode kullanın. Hiçbir fikri neden yasaklanması gerektiği.

gettext ilginç bir php kısmıdır, farklı dillerle paralel olarak kullanıyorsanız (genellikle dükkanınızda bir dilden daha fazla dile sahip olduğunuzda olduğu gibi) bazı yerel işletim sistemi uygulamalarını kullandığını hatırlıyorum. Ancak Magento Bağlamında buna da ihtiyaç olmamalıdır.

Listeden daha da ileri giderken, bu sadece mümkün olduğunca fazla fonksiyona sahip bir liste gibi görünüyor. Tarih aslında komik, göründüğü gibi bazı fonksiyonlar listeden çıkarılmış gibi görünüyor, farkettikten sonra bunu kullanıyorlar. : D

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.