Magento ECG कोडिंग मानक में कई PHP फ़ंक्शन क्यों बंद किए गए हैं?


30

Magento 1 एक्सटेंशन के लिए मानक के रूप में Magento ECG कोडिंग मानक (कम से कम तरह का) आधिकारिक लगता है:

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

लेकिन मैं सभी नियमों के पीछे के तर्क को नहीं समझता, और उनके संदेशों के साथ कोड स्निफर नियम अकेले बहुत मदद नहीं करते हैं। क्या मानक के बारे में कोई विस्तृत दस्तावेज है? मैं सामान्य सर्वोत्तम प्रथाओं और डेवलपर्स गाइड को जानता हूं, लेकिन इन कोडिंग मानकों के बारे में कुछ भी विशिष्ट नहीं पा सकता हूं ।

PHP के कार्यों का उपयोग नहीं करने के बारे में मुझे सबसे अधिक परेशानी क्या है।

उदाहरण के लिए: हर एक फाइल सिस्टम से संबंधित PHP फंक्शन वर्जित क्यों है?

मुझे लगता है, आप का उपयोग करने वाले हैं Varien_Io_File, Varien_File_Objectआदि , लेकिन यहां तक ​​कि कोर डेवलपर्स को सभी वैरिन वर्गों के बारे में पता नहीं है और आप अक्सर इस तरह पाते हैं Mage_ImportExport_Model_Import_Adapter_Csv:

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

तो, कोर सबसे अच्छा उदाहरण नहीं है, जैसा कि अक्सर होता है।

अन्य IMHO संदिग्ध निषिद्ध कार्य:

  • mb_parse_str
  • parse_str
  • parse_url
  • base64_decode

    • हाँ, यह बैकडोर में उपयोग किया जाता है लेकिन प्रतिबंध evalपर्याप्त होना चाहिए और बाइनरी डेटा एन्कोडिंग की तरह कानूनी उपयोग के मामले हैं। और इसके अलावा json_decode(जो निषिद्ध नहीं है) इसके लिए कोई कोर हेल्पर उपलब्ध नहीं है।

स्रोत: https://github.com/magento-ecg/coding-standard/blob/master/Sniffs/Security/ForbiddenFunctionSniff.php

अनिवार्य रूप से, मेरा प्रश्न यह है: यह मानक दस्तावेज कहां है? और / या "इन मूल PHP कार्यों के बजाय उपयोग करने वाली चीजों" की एक सूची है?


1
Zend फ्रेमवर्क पर बनाया गया Magento। आप Zend मानकों का उपयोग क्यों नहीं करते?
झारतुनिक ११'१५ को ११:५०

ईसीजी मैगेंटो विशिष्ट जांच करता है, जैसे कि लूप में लोड किए गए मॉडल हैं। यह इंडेंटेशन और ब्रैकेट जैसी बुनियादी शैली की जाँच के बारे में नहीं है।
फेबियन शेंगलर

1
"रॉ एसक्यूएल प्रश्नों" को निषिद्ध के रूप में सूचीबद्ध करना भी अनुभवहीन लगता है। बेशक आप ज्यादातर परिस्थितियों में कच्ची एसक्यूएल नहीं करते हैं, लेकिन निश्चित रूप से ऐसे समय हैं जहां यह न केवल उचित है, बल्कि आवश्यक है (यानी जटिल आयात / निर्यात)
pspahn

1
@pspahn मैं आपकी बात देख रहा हूं, लेकिन क्या Zend_Dbक्वेरी बिल्डर को किसी भी एसक्यूएल प्रश्नों को बनाने में सक्षम नहीं होना चाहिए ?
फैबियन शेंगलर

यकीन है, लेकिन आप इनपुट के रूप में कच्चे एसक्यूएल का उपयोग करके भी एक selectबयान नहीं बना सकते हैं Zend_Db? मैंने माना कि बैकथ में github.com/kalenjordan/custom-reports करता है।
pspahn

जवाबों:


28

उस पर ईसीजी टीम से एक अनौपचारिक जवाब मिला:

सबसे पहले, फ़्लैग किए गए फ़ंक्शंस आवश्यक रूप से अस्वीकृत नहीं हैं - उन्हें वैध उपयोग सुनिश्चित करने के लिए उपयोग पर मैन्युअल समीक्षा को ट्रिगर करना चाहिए। यह एक समीक्षा सहायक उपकरण है, अच्छा / बुरा कोड स्कोरिंग उपकरण नहीं है।

दूसरा, धारणा यह थी कि अगर वे अतिरिक्त कार्यक्षमता या सुरक्षा की पेशकश कर सकते हैं तो मैगेंटो रैपर (फ़ंक्शन / कक्षाएं) का उपयोग करना बेहतर है।

तीसरा, विशिष्ट कॉल के लिए, बेस 64_डॉब्लॉस्क का उपयोग अक्सर दुर्भावनापूर्ण इंजेक्शन कोड के लिए किया जाता है, और बाकी पार्स_स्ट्रैट असुरक्षित हो सकता है, विशेष रूप से अज्ञात या उपयोगकर्ता द्वारा प्रदान किए गए इनपुट को संभालना - उदाहरण के लिए देखें http://php-security.org/2010/05/ 31 / mops-2010-049-php-parse_str-रुकावट स्मृति भ्रष्टाचार-जोखिम /

फिर से, यह कोड को खराब नहीं मानकर समीक्षा के लिए इसे ध्वजांकित कर रहा है।

आशा करता हूँ की ये काम करेगा।


तो फिर वे "फ़ंक्शन निषिद्ध है" क्यों लिख रहे हैं "के बजाय आपको" इसके वैध उपयोग को सुनिश्चित करने के लिए कोड की समीक्षा करनी चाहिए "?!
ब्लैक

11

कोडिंग स्टैंडर्ड के दो लक्ष्य हैं।

  1. संभवतः समस्याग्रस्त भागों की खोज को बहुत आसान बनाते हैं। एक अनुभवी डेवलपर पहले से ही जानता है कि एक नए मॉड्यूल के किन हिस्सों की उसे समीक्षा करने की आवश्यकता है, और यह मानक चिह्न और उसके लिए उन्हें सूचीबद्ध करता है। ऐसा नहीं है कि वह इस हिस्सों को हटा सकता है, लेकिन समीक्षा करने के लिए कि क्या वे आवश्यक हैं, समस्याग्रस्त हैं या दोनों हैं।

  2. अनुभवहीन डेवलपर्स का समर्थन करें, जिस पर उन्हें बचना चाहिए। जबकि सभी चिह्नित कार्य विशिष्ट समस्याओं के लिए अच्छे समाधान हो सकते हैं, वे समस्याग्रस्त तरीके से उपयोग करना बहुत आसान हैं। यह डेवलपर्स को समस्या के बारे में अधिक सोचने के लिए प्रेरित करता है, और अक्सर एक बेहतर समाधान के लिए जो मानक के साथ संघर्ष नहीं करता है।

और कभी-कभी, यहां तक ​​कि सबसे अनुभवी डेवलपर्स नेत्रहीन मानक का पालन करते हैं और सबसे क्रूर वर्कअराउंड बनाते हैं, बस एक समुदाय मजबूर मानक को ठेस नहीं पहुंचाते हैं।

थोड़ा अतिरिक्त चेतावनी

फ़ाइल फ़ंक्शंस अक्सर प्रोटोकॉल रैपर का उपयोग करने की अनुमति देते हैं, इसका मतलब है कि http: // से शुरू होने वाला फ़ाइल पथ, http रिएक्वेस्ट की ओर जाता है, जिसका उपयोग अक्सर "कॉलिंग होम" के लिए किया जाता है, और समय-समय पर एक दुकान को मारता है, क्योंकि सर्वर उपलब्ध नहीं है (30 सेकंड डिफ़ॉल्ट समयबाह्य) और इसे एक बहुत ही केंद्रीय स्थान में बनाया गया है।

एंथिल के साथ वास्तविक, कोई भी विश्वास करता है कि कितने एसक्यूएल इंजेक्शन छेद अभी भी वहां मौजूद हैं। एक बड़ा उदाहरण था, जैसा कि मायसक्ल वेबसाइट पर सर्च में एक था।

कहीं न कहीं json_decode के लिए एक मुख्य सहायक है, लेकिन इसका बहुत पुराना कार्यान्वयन है, बस json_decode का उपयोग करें। नहीं आइडिया क्यों मना किया जाए।

गेटटेक्स्ट एक दिलचस्प php हिस्सा है, मुझे याद है कि यह कुछ देशी OS कार्यान्वयन का उपयोग करता है जो समस्याएं हो सकती हैं, यदि आप इसे विभिन्न भाषाओं के साथ parrallel में उपयोग करते हैं (जैसे कि यह आमतौर पर तब होता है जब आपके पास अधिक हो तो आपकी दुकान में एक भाषा। कभी भी वास्तव में बहुत अधिक जांच नहीं की जाती है। , लेकिन Magento के संदर्भ में इसके लिए कोई आवश्यकता नहीं होनी चाहिए।

सूची को और गर्त में जाने से, यह केवल एक सूची प्रतीत होती है जिसमें यथासंभव अधिक कार्य होते हैं। इतिहास वास्तव में मज़ेदार है, ऐसा लगता है कि उन्होंने सूची से कुछ कार्यों को हटा दिया था, ध्यान देने के बाद वे इसका उपयोग करते हैं। : डी

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.