
URL के लिए रेगुलर एक्सप्रेशन मिलान। url-regex का अनुरक्षित, सुरक्षित, और ब्राउज़र-अनुकूल संस्करण। Node.js सर्वर के लिए CVE-2020-7661 को हल करता है।
URL के लिए रेगुलर एक्सप्रेशन मिलान। [url-regex][] का अनुरक्षित, सुरक्षित और ब्राउज़र-अनुकूल संस्करण। Node.js सर्वरों के लिए [CVE-2020-7661][cve] का समाधान करता है। Node v14+ और ब्राउज़रों में कार्य करता है। इसे [Spam Scanner][spam-scanner] और [Forward Email][forward-email] के लिए अनुरक्षित किया जाता है।
जब मैंने [CVE-2020-7661][cve] की खोज की और इसे सार्वजनिक रूप से प्रकट किया ([Spam Scanner][spam-scanner] और [Forward Email][forward-email] पर अपने कार्य के माध्यम से) – मैंने खराब URL मैचों को फ़िल्टर करने के लिए कुछ अतिरिक्त गोंद के साथ [url-regex][] के एक कार्यान्वयन का उपयोग किया।
हालाँकि, प्रोडक्शन में [Forward Email][forward-email] पर इसका उपयोग करने के बाद (जो प्रति सप्ताह सैकड़ों-हजारों ईमेल संसाधित करता है), मुझे [url-regex][] के साथ कई और मूलभूत समस्याएँ मिलीं और उनका दस्तावेज़ीकरण किया।
यह महसूस करते हुए कि [url-regex][] अब सक्रिय रूप से अनुरक्षित नहीं है, इस लेखन के समय 9 खुले पुल अनुरोध हैं, और इसमें ब्राउज़र समर्थन का भी अभाव था – मैंने सभी के लिए यह पैकेज लिखने और सभी खुले पुल अनुरोधों को विलय करने का निर्णय लिया।
उम्मीद है कि यह पैकेज URL रेगुलर एक्सप्रेशन के वास्तविक दुनिया के इच्छित उपयोग से अधिक निकटता से मेल खाएगा, और उपयोगकर्ता को इसे अपनी इच्छानुसार कॉन्फ़िगर करने की अनुमति देगा। यदि इस पैकेज ने आपकी मदद की है तो कृपया [Forward Email][forward-email] देखें, और GitHub पर हमारे स्रोत कोड का अन्वेषण करें जो दिखाता है कि हम इस पैकेज का उपयोग कैसे करते हैं।
नोट: इस पैकेज का डिफ़ॉल्ट व्यवहार re2 को लोड करने का प्रयास करेगा (यह एक वैकल्पिक पीयर निर्भरता है जिसका उपयोग रेगुलर एक्सप्रेशन डेनियल ऑफ सर्विस हमलों और अधिक को रोकने के लिए किया जाता है)। यदि आप इस व्यवहार का उपयोग करना चाहते हैं, तो आपके पास npm install re2 के माध्यम से re2 स्थापित होना चाहिए – अन्यथा यह सामान्य RegExp इंस्टेंस का उपयोग करने के लिए वापस आ जाएगा। v4.0.0 के अनुसार हमने एक विकल्प जोड़ा है यदि आप इस पैकेज को re2 लोड करने का प्रयास भी नहीं करने के लिए बाध्य करना चाहते हैं (उदा. यह आपके node_modules में है लेकिन आप इसका उपयोग नहीं करना चाहते) – बस एक विकल्प के रूप में re2: false पास करें।
[npm][]:
npm install url-regex-safe
हमने Node.js उपयोग के लिए [RE2][] शामिल करके [CVE-2020-7661][cve] को हल कर दिया है। अब आपको url-regex-safe के माध्यम से अपने URL रेगुलर एक्सप्रेशन को new RE2(urlRegex()) के साथ मैन्युअल रूप से लपेटने की आवश्यकता नहीं होगी (हम इसे आपके लिए स्वचालित रूप से करते हैं)।
const urlRegexSafe = require('url-regex-safe');
const str = 'some long string with url.com in it';
const matches = str.match(urlRegexSafe());
for (const match of matches) {
console.log('match', match);
}
console.log(urlRegexSafe({ exact: true }).test('github.com'));
चूंकि [RE2][] ब्राउज़र के लिए नहीं बनाया गया है, इसलिए इसका उपयोग नहीं किया जाएगा, और इसलिए [CVE-2020-7661][cve] अभी भी क्लाइंट-साइड पर एक समस्या है। हालाँकि यह गंभीर नहीं है क्योंकि यह अधिक से अधिक ब्राउज़र टैब को क्रैश कर सकता है (जैसे Node.js की ओर यह पूरी प्रक्रिया को क्रैश कर देता और मेमोरी से बाहर का अपवाद फेंक देता)।
यदि आप हर जगह केवल <script> टैग का उपयोग कर रहे हैं तो यह आपके लिए समाधान है!
<script src="https://unpkg.com/url-regex-safe"></script>
<script type="text/javascript">
(function() {
var str = 'some long string with url.com in it';
var matches = str.match(urlRegexSafe());
for (var i=0; i<matches.length; i++) {
console.log('match', matches[i]);
}
console.log(urlRegexSafe({ exact: true }).test('github.com'));
})();
</script>
मान लें कि आप [browserify][], [webpack][], [rollup][], या किसी अन्य बंडलर का उपयोग कर रहे हैं, तो आप ऊपर दिए गए Node उपयोग का आसानी से अनुसरण कर सकते हैं।
TypeScript के साथ इस पैकेज का उपयोग करने के लिए, आप प्रकार परिभाषाओं के लिए @types/url-regex-safe पैकेज स्थापित कर सकते हैं।
npm install --save-dev @types/url-regex-safe