आप यह सुनिश्चित नहीं कर सकते कि डेटा फॉर्म से आया है। एक POST अनुरोध केवल एक POST अनुरोध है, इसे किसी भी तरीके से उत्पन्न किया जा सकता है। एक HTML फॉर्म सिर्फ एक उन तरीकों से है जो बहुत उपयोगकर्ता के अनुकूल हैं। आपके सर्वर को यह सत्यापित करने की आवश्यकता है कि POST अनुरोध के माध्यम से प्राप्त डेटा मान्य है या नहीं और क्या इस पर कार्य करना है या नहीं।
ऐसा कहकर, ऐसी चीजें हैं जो सबमिट किए जा रहे डेटा को प्रतिबंधित और मान्य करने में आपकी सहायता कर सकती हैं। सबसे पहले, यह आवश्यक है कि उपयोगकर्ता (सत्र) कुकीज़ का उपयोग कर लॉग इन हो। यह अज्ञात उपयोगकर्ताओं द्वारा यादृच्छिक अनुरोध को समाप्त करता है। दूसरा, आप एक टोकन को एक छिपे हुए फ़ील्ड के रूप में एम्बेड कर सकते हैं जिसे आप उपयोगकर्ता के सत्र में भी सहेजते हैं। POST अनुरोध को मान्य होने के लिए उस टोकन को शामिल करने की आवश्यकता है। टोकन बस एक छद्म-यादृच्छिक स्ट्रिंग है।
आप फॉर्म फ़ील्ड्स के हैश तैयार करके इसे बढ़ा सकते हैं, जिसे आप उपयोगकर्ता को सबमिट करने की अपेक्षा करते हैं। यदि फॉर्म मान केवल पढ़ने के लिए ही किया जाना चाहिए, तो आप मान को हैश में भी शामिल कर सकते हैं। जैसे:
$rand = md5(mt_rand());
$hash = sha1('lastname:firstname:email:' . $rand);
$_SESSION['rand'] = $rand;
$_SESSION['hash'] = $hash;
// on form submit:
$keys = array_keys($_POST);
$checkHash = sha1(join(':', $keys) . ':' . $_SESSION['rand']);
if ($checkHash != $_SESSION['hash']) {
die('Form submission failed token validation');
}
बस एक त्वरित उदाहरण है कि, तो आप शायद वर्णानुक्रम कुंजी सॉर्ट करने के लिए सुनिश्चित करें कि आप एक ही हैश आदि मिल जाएगा इसके लिए एक अद्वितीय टोकन के लिए की आवश्यकता होगी, उपयोगकर्ता की अवधारणा को दर्शाता है बनाने के लिए चाहता हूँ प्रत्येक अनुरोध हालांकि जो रूपों के साथ tempering रोकता है और चाहता था से अधिक या कम डेटा जमा।
यह अभी भी इसका मतलब यह नहीं है कि उपयोगकर्ता वास्तव में डेटा जमा करने के लिए आपके फॉर्म का उपयोग करता है।
इसके लिए धन्यवाद मैंने इस कार्रवाई के अन्य प्रभावों के बारे में सोचा नहीं था। हालांकि मुझे लगता है कि इन मुद्दों को इस तरह से इस्तेमाल किया जा सकता है जैसे कि अगर (! जारी ($ _ सत्र ['हैश']) {{हैश} बनाएं {अन्य मौजूदा हैश} का उपयोग करें। –