दिलचस्प पोस्ट
PHP में बड़ी संख्या में कार्य करना NSDateFormatter में 'YYYY' और 'yyyy' के बीच का अंतर एक निर्भरता इंजेक्शन का उपयोग क्यों करता है? निरपेक्ष यूआरएल, रिश्तेदार यूआरएल, और …? एंड्रॉइड कस्टम यूआरएल योजना ..? तार के लिए अच्छा हैश फ़ंक्शन क्रोम में आप वेब इंस्पेक्टर का कैसे निरीक्षण करते हैं? मैं फ़ायरफ़ॉक्स में बाहरी HTML कैसे करूं? आइकन के साथ संपादन करें, लेकिन पॉपअप संदेश के बिना संपादन सेटएअर () एंड्रॉइड 5.1.1 और ऊपर – getRunningAppProcesses () केवल मेरे आवेदन पैकेज को रिटर्न करता है क्या पीएचएल में ग्लोबल वैरिएबल बुरा व्यवहार में है? यदि हां, तो क्यों? Base64 में कनवर्ट छवि यूआरएल जावास्क्रिप्ट (वैश्विक चर सहित) में चर घोषणा वाक्यविन्यास के बीच अंतर? एंड्रॉइड मानचित्र v2 सभी मार्करों को दिखाने के लिए ज़ूम करें क्या चिंताओं को अलग करना है?

मेलिंग से पहले उपयोगकर्ता इनपुट को PHP में कैसे स्वीकृत करना है?

मेरे पास एक सरल PHP मेलर स्क्रिप्ट है जो POST के माध्यम से सबमिट किए गए फ़ॉर्म से मान लेता है और मुझे उन्हें मेल करता है:

<?php $to = "me@example.com"; $name = $_POST['name']; $message = $_POST['message']; $email = $_POST['email']; $body = "Person $name submitted a message: $message"; $subject = "A message has been submitted"; $headers = 'From: ' . $email; mail($to, $subject, $body, $headers); header("Location: http://example.com/thanks"); ?> 

मैं इनपुट को कैसे रोक सकता हूं?

वेब के समाधान से एकत्रित समाधान "मेलिंग से पहले उपयोगकर्ता इनपुट को PHP में कैसे स्वीकृत करना है?"

filter_var() साथ पोस्ट वैरिएबल को filter_var()

यहाँ उदाहरण पसंद:

 echo filter_var($_POST['email'], FILTER_SANITIZE_EMAIL); 

चूंकि आप किसी एसक्यूएल क्वेरी या यहाँ कुछ भी नहीं बना रहे हैं, केवल उन्हीं प्रासंगिक मान्यताओं को मैं उन आदानों के लिए देख सकता हूं जो $ _POST ["ईमेल"] के लिए एक ईमेल सत्यापन है, और संभवत: दूसरे क्षेत्रों पर एक अल्फ़ान्यूमेरिक फ़िल्टर यदि आप वास्तव में चाहते हैं संदेश में शामिल होने की संभावना को सीमित करने के लिए

ईमेल पते को फ़िल्टर करने के लिए, बस filter_var का उपयोग करें :

 $email = filter_var($email, FILTER_SANITIZE_EMAIL); 

फ्रैंक किसान के सुझाव के अनुसार, आप ईमेल विषय में न्यूलाइन को भी फ़िल्टर कर सकते हैं:

 $subject = str_replace(array("\r","\n"),array(" "," "),$subject); 

जैसा कि अन्य लोगों ने उल्लेख किया है, filter_var महान है यदि यह उपलब्ध नहीं है, तो इसे अपने टूलचेस्ट पर जोड़ें।

$headers वैरिएबल विशेष रूप से सुरक्षा-वार से खराब है। इसे जोड़ा जा सकता है और स्पूफ़ेड हेडर को जोड़ा जा सकता है। ईमेल इनजेक्शन नामक इस पोस्ट ने इसे बहुत अच्छी तरह से चर्चा की है

filter_var i महान है, लेकिन एक और तरीका यह आश्वस्त करने के लिए कि कुछ एक ईमेल पता है और कुछ बुरा नहीं है isMail() फ़ंक्शन का उपयोग करना है। यहां एक है:

 function isEmail($email) { return preg_match('|^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]{2,})+$|i', $email); }; 

तो इसका उपयोग करने के लिए, आप ऐसा कर सकते हैं:

 if (isset($_POST['email']) && isEmail($_POST['email'])) { $email = $_POST['email'] ; } else { // you could halt execution here, set $email to a default email address // display an error, redirect, or some combination here, } 

मैन्युअल सत्यापन के संदर्भ में, substr() , लंबाई वाली strip_tags() चलने की लंबाई को सीमित करें और अन्यथा इसमें क्या लगाया जा सकता है।

$ हेडर में उपयोगकर्ताओं द्वारा प्रदत्त इनपुट से आपको किसी भी नई लाइन को निकालना होगा, जो मेल () (आपके मामले में $ ईमेल) को पारित हो जाता है! ईमेल इंजेक्शन देखें

PHP को $ और $ विषय को सैनिटाइज करने का ख्याल रखना चाहिए, लेकिन बगों के साथ PHP के संस्करण हैं (प्रभावित पीएचपी 4 <= 4.4.6 और PHP 5 = 5.2.1, एमओपीबी-34-2007 देखें)।

आप ईमेल को मान्य करने के लिए ऊपर artlung के उत्तर से कोड का उपयोग कर सकते हैं ..

हेडर इंजेक्शन को रोकने के लिए मैं इस प्रकार का कोड का उपयोग करता हूं ..

 // define some mail() header's parts and commonly used spam code to filter using preg_match $match = "/(from\:|to\:|bcc\:|cc\:|content\-type\:|mime\-version\:|subject\:|x\-mailer\:|reply\-to\:|\%0a|\%0b)/i"; // check if any field's value containing the one or more of the code above if (preg_match($match, $name) || preg_match( $match, $message) || preg_match( $match, $email)) { // I use ajax, so I call the string below and send it to js file to check whether the email is failed to send or not echo "failed"; // If you are not using ajax, then you can redirect it with php header function ie: header("Location: http://example.com/anypage/"); // stop the script before it reach or executing the mail function die(); } 

उपरोक्त mail() के शीर्षलेख फ़िल्टरिंग बहुत सख्त है, क्योंकि कुछ प्रयोक्ता अपने ईमेल फ़ॉर्म को अपहृत करने के किसी भी इरादे के बिना अपने संदेश में फ़िल्टर्ड स्ट्रिंग का उपयोग कर सकते हैं, इसलिए उसे किसी ऐसे पृष्ठ पर रीडायरेक्ट कर सकते हैं जो बताता है कि किस तरह की तार नहीं हैं फ़ॉर्म में अनुमति दी गई है या इसे अपने फॉर्म पेज पर समझाएं