** बैश / शेल में इंजेक्शन-सुरक्षित फ्लोटिंग पॉइंट गणित **
नोट: इस उत्तर का ध्यान बैश (या अन्य गोले) में गणित प्रदर्शन करने के लिए इंजेक्शन-सुरक्षित समाधान के लिए विचार प्रदान करता है।बेशक, एक ही उपयोग किया जा सकता है, उन्नत स्ट्रिंग प्रसंस्करण आदि करने के लिए मामूली समायोजन के साथ।
अधिकांश समाधान जो प्रस्तुत किए गए थे, बाहरी डेटा (चर, फाइलें, कमांड लाइन, पर्यावरण चर) का उपयोग करके मक्खी पर छोटे स्क्रिप्टलेट का निर्माण करते हैं। बाहरी इनपुट का उपयोग इंजन में दुर्भावनापूर्ण कोड को इंजेक्ट करने के लिए किया जा सकता है, उनमें से कई
नीचे मूल गणित गणना करने के लिए विभिन्न भाषा का उपयोग करने पर एक तुलना है, जहां फ्लोटिंग पॉइंट में परिणाम है। यह A + B * 0.1 (फ्लोटिंग पॉइंट के रूप में) की गणना करता है।
सभी समाधान प्रयास गतिशील स्क्रिप्टलेट बनाने से बचते हैं, जिन्हें बनाए रखना बेहद कठिन होता है, इसके बजाय वे स्थैतिक कार्यक्रम का उपयोग करते हैं, और नामित चर में पैरामीटर पास करते हैं। वे विशेष वर्णों के साथ मापदंडों को सुरक्षित रूप से संभाल लेंगे - कोड इंजेक्शन की संभावना को कम करना। अपवाद 'बीसी' है जो इनपुट / आउटपुट सुविधा प्रदान नहीं करता है
अपवाद 'bc' है, जो कोई इनपुट / आउटपुट प्रदान नहीं करता है, सारा डेटा स्टडिन में प्रोग्राम के माध्यम से आता है, और सभी आउटपुट stdout में जाता है। सभी गणना सैंडबॉक्स में निष्पादित हो रही है, जो साइड इफेक्ट (फ़ाइलों को खोलने, आदि) की अनुमति नहीं देता है। सिद्धांत रूप में, डिजाइन द्वारा सुरक्षित इंजेक्शन!
A=5.2
B=4.3
# Awk: Map variable into awk
# Exit 0 (or just exit) for success, non-zero for error.
#
awk -v A="$A" -v B="$B" 'BEGIN { print A + B * 0.1 ; exit 0}'
# Perl
perl -e '($A,$B) = @ARGV ; print $A + $B * 0.1' "$A" "$B"
# Python 2
python -c 'import sys ; a = float(sys.argv[1]) ; b = float(sys.argv[2]) ; print a+b*0.1' "$A" "$B"
# Python 3
python3 -c 'import sys ; a = float(sys.argv[1]) ; b = float(sys.argv[2]) ; print(a+b*0.1)' "$A" "$B"
# BC
bc <<< "scale=1 ; $A + $B * 0.1"