AsIs असुरक्षित है, जब तक कि आप वास्तव में नहीं जानते कि आप क्या कर रहे हैं। उदाहरण के लिए आप इसे यूनिट परीक्षण के लिए उपयोग कर सकते हैं।
पैरामीटर पास करना असुरक्षित नहीं है, जब तक कि आप अपनी एसक्यूएल क्वेरी को प्री-फॉर्मेट नहीं करते हैं। कभी न करें:
sql_query = 'SELECT * FROM {}'.format(user_input)
cur.execute(sql_query)
चूंकि user_input ';DROP DATABASE;' . हो सकता है उदाहरण के लिए।
इसके बजाय, करें:
sql_query = 'SELECT * FROM %s'
cur.execute(sql_query, (user_input,))
pyscopg2 आपकी क्वेरी को साफ कर देगा। इसके अलावा, यदि आप वास्तव में अपने उपयोगकर्ता के इनपुट पर भरोसा नहीं करते हैं, तो आप अपने कोड में पैरामीटर को अपने तर्क से पूर्व-स्वच्छता कर सकते हैं।
प्रति psycopg2 दस्तावेज़ीकरण
:
साथ ही, मैं कभी भी, अपने उपयोगकर्ताओं को मुझे यह नहीं बताने दूंगा कि मुझे कौन सी तालिका पूछनी चाहिए। आपके ऐप का तर्क (या मार्ग) आपको यह बताना चाहिए।
AsIs() . के संबंध में , प्रति psycopg2 दस्तावेज़ीकरण
:
इसलिए, उपयोगकर्ता के इनपुट के साथ इसका उपयोग न करें।